# HG changeset patch # User lordofwar # Date 2009-07-06 12:31:26 # Node ID 7674c1654b599cf5595f60083843a6b71b2c5e75 # Parent 1c70cb48bb28f0c2263102e7272c4ca3db768474 changed over to arrays... lets see if the compiler yells at me as much. diff --git a/src/server/distrend.c b/src/server/distrend.c --- a/src/server/distrend.c +++ b/src/server/distrend.c @@ -59,6 +59,10 @@ struct { struct frameset **frameset; // What exactly is this now? hehe + int frame_num[]; + char slave_name[][]; + short int frame_status[]; + // For secondary upload location... char url; @@ -66,6 +70,7 @@ struct { char login_pass; } blendjob[max]; +/* // -- Matthew's handywork -- // struct for storing informaiton on each frame for a particular blender job struct { @@ -75,6 +80,7 @@ struct { } frameset[]; // Frameset array is generated by status_report_generator function // Using this method to save memory, because if animation starts on a high frame number, it would waste a lot of RAM on empty structures // -- end of Matthew's handywork -- +*/ struct { char *name; @@ -264,7 +270,8 @@ void loginuser(char *username, int secre */ -/* This function creates frame array based on the total number of frames to be rendered, which will then be parsed by function frame_farmer. */ +/* -- Coding using OLD FRAMESET STRUCTURE... temporarily saving it!! -- +// This function creates frame array based on the total number of frames to be rendered, which will then be parsed by function frame_farmer. void frame_num_struct_builder(int sframe, int eframe) { int jobnum_new = highest_jobnum + 1; int total = (sframe - eframe) +1; // total number of frames @@ -346,10 +353,10 @@ void status_report_generator(){ float percent = 0; // variable that stores the percent done of the blendjob while(num2 <= blendjob[jobnum].total_frames){ // If - if(blendjob[jobnum].frameset[num2] = 2) + if(blendjob[jobnum].frameset[num2].frame_status = 2) finished_frames++; - if(blendjob[jobnum].frameset[num2] = 1) + if(blendjob[jobnum].frameset[num2].frame_status = 1) pending_frames++; num2++; @@ -369,7 +376,117 @@ void status_report_generator(){ // This function makes the value of the frame 2, which means its completed. void the_finisher(int frame){ - blendjob[jobnum].frameset[frame]++; + blendjob[jobnum].frameset[frame].frame_status++; +} +*/ // --End of saved frameset structure using code -- + +// -- NEW CODE TO USE ARRAYS INSTEAD OF THE FRAMESET STRUCTURE -- +// This function creates frame array based on the total number of frames to be rendered, which will then be parsed by function frame_farmer. +void frame_num_struct_builder(int sframe, int eframe) { + int jobnum_new = highest_jobnum + 1; + int total = (sframe - eframe) +1; // total number of frames + int fcount = sframe; // Used to create all the frames in the structure from sframe to eframe + int x = 0; + + blendjob[jobnum_new].total_frames = total; // sets the total number of frames in animation for status purposes + + while(x < total){ + blendjob[jobnum_new].frame_num[x] = fcount; + x++; + fcount++; + } + + highest_jobnum++; +} + +// matches your computer up with a lovely frame to render +int frame_finder(){ + int your_frame = NULL; // your_frame is an interger value that will be given to the client as the frame number to render + int finder_jobnum = 0; + int frameset_count = 0; // the frameset number, note* frames in an animation don't start at zero + short int done = 0; + int priority = 10; + + while(priority >= 1){ // start the scan for the next job with the highest priority + finder_jobnum = hcfjob + 1; // reset it to start scanning at first uncompleted job for the pass at each priority level + + while(finder_jobnum <= highest_jobnum){ + if(blendjob[finder_jobnum].priority = priority){ // looks for a job with the current priority value + done = 1; // notice it starts by looking at the oldest job first + break; + } + + if((done) = 1) // If it has found a job with the current priority value, it will break out of the loop + break; // If none is found it goes to the next job to see if it is of the current priority value + else + finder_jobnum++; + } + + if(done = 1) // if job has been found, it lets it out of the priority changer loop + break; + + priority--; + } + + while(your_frame < blendjob[finder_jobnum].total_frames){ // Finds the frameset number with a frame that needs to be rendered + if (blendjob[finder_jobnum].frame_status[frameset_count] = 0) // If frame that is not assigned has been found, frameset_count is not changed + break; // and frameset_count is used to give the frame number later in this funciton + + x++; // If frame is assigned or done, it goes to next frame + } + +blendjob[jobnum].frame_status[x]++; // sets the value of the frame to 2, which means its taken + +your_frame = blendjob[jobnum].frame_num[x]; // Takes the frameset found in the while statement above, and extracts the frame number from it and assigns it to the int your_frame + +if(your_frame = null) // If that job had no open frames for some reason, run the status report generator so that + status_report_generator(); //the job priority can be changed to 0 + +return your_frame; // your_frame is returned as the frame to be rendered +} + +// This figures out how much of the job is done, where jobnum corresponds to the job number +// This uses pointers, so when it is run it updates certain values in memory +void status_report_generator(){ + + while(blendjob[(hcfjob+1)].priority = 0) //If the job after the highest consecutively finished job is finished + hcfjob+1; // adds 1 to the highest consecutively finished job and checks the next one, till the job after the hcfjob is not done + + int num1 = hcfjob+1; // to scan through jobs + int num2 = 0; // to scan through frames + + while(num1 <= highest_jobnum){ + if(blendjob[num1].priority != 0){ // If the job is not done, scan it + + float finished_frames = 0; // variable that counts the completed frames + int pending_frames = 0; // variable that counts the assigned frames + float percent = 0; // variable that stores the percent done of the blendjob + + while(num2 <= blendjob[jobnum].total_frames){ // If + if(blendjob[jobnum].frame_status[num2] = 2) + finished_frames++; + + if(blendjob[jobnum].frame_status[num2] = 1) + pending_frames++; + + num2++; + } + + percent = (finished_frames / blendjob[num1].total_frames) * 100; + + blendjob[num1].completed_frames = finished_frames; + blendjob[num1].assigned_frames = pending_frames; + blendjob[num1].percent_done = percent; + } + + num1++; + } + + } + +// This function makes the value of the frame 2, which means its completed. +void the_finisher(int frame){ + blendjob[jobnum].frame_status[frame]++; } // Queuer: this function should add files to the queue