# HG changeset patch # User ethanzonca # Date 2009-07-11 00:19:31 # Node ID b00c1848c39ddaa422f26e55ed0d35a365ed41a8 # Parent d9e816171b29aef6c16222b2fbfc342a02d393c9 Reorganizing, commenting. Moved functions. diff --git a/src/server/distrend.c b/src/server/distrend.c --- a/src/server/distrend.c +++ b/src/server/distrend.c @@ -68,8 +68,7 @@ struct blendjob { } blendjob[MAX_BLENDJOBS]; -// Matt's code for framesets? I think that the int frame_num is obselete because it will be frameset[framenum] -// struct for storing information on each frame for a particular blender job +// Frameset Structure struct frameset { int frame_num; // frame number to render char slave_name; // user that frame is assigned to @@ -82,7 +81,7 @@ struct frameset { /* ********************** Functions ************************* */ -// **** Finish-Setter: Sets a frame to the "completed" status. Should be modified to set =2 rather than ++ ? +// **** Finish-Setter: Sets a frame to the "completed" status. void finish_frame(int frame){ blendjob[jobnum].frameset[frame].frame_status = 2; } @@ -106,6 +105,112 @@ jobnum++; // Advance the jobnumber for t } +// **** Status Report Generator: 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++; // 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].frameset[num2].frame_status == 2) + finished_frames++; + + if(blendjob[jobnum].frameset[num2].frame_status == 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++; + } + + } + + +// **** Structure Builder: 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].frameset[x].frame_num = fcount; + x++; + fcount++; + } + + highest_jobnum++; +} + + + +// Frame Assigner: matches your computer up with a lovely frame to render +int frame_finder(){ + int your_frame = 0; // 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; + short int priority = 10; + + while(priority >= 1){ // start the scan for the next job with the highest priority, decreases priority before it loops + 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){ // This keeps increasing the finder_jobnum until it is higher than the 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++; + } // End of increasing finder_jobnum + + if(done == 1) // if job has been found, it lets it out of the priority changer loop + break; + + priority--; // end of decreasing 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].frameset[frameset_count].frame_status == 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 + + frameset_count++; // If frame is assigned or done, it goes to next frame + } + +blendjob[jobnum].frameset[frameset_count].frame_status++; // sets the value of the frame to 2, which means its taken + +your_frame = blendjob[jobnum].frameset[frameset_count].frame_num; // 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 == 0) // 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 +} + @@ -186,7 +291,7 @@ int main(int argc, char *argv[]) /* frame[frame] Assignments: "NULL" - don't render me - "0" - cancelled + "0" - canceled "1" - unassigned "2" - assigned to slave "3" - completed by slave and uploaded @@ -198,113 +303,9 @@ int main(int argc, char *argv[]) -// 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].frameset[x].frame_num = fcount; - x++; - fcount++; - } - - highest_jobnum++; -} - -// matches your computer up with a lovely frame to render -int frame_finder(){ - int your_frame = 0; // 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; - short int priority = 10; - - while(priority >= 1){ // start the scan for the next job with the highest priority, decreases priority before it loops - 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){ // This keeps increasing the finder_jobnum until it is higher than the 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++; - } // End of increasing finder_jobnum - - if(done == 1) // if job has been found, it lets it out of the priority changer loop - break; - - priority--; // end of decreasing 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].frameset[frameset_count].frame_status == 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 - - frameset_count++; // If frame is assigned or done, it goes to next frame - } -blendjob[jobnum].frameset[frameset_count].frame_status++; // sets the value of the frame to 2, which means its taken -your_frame = blendjob[jobnum].frameset[frameset_count].frame_num; // 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 == 0) // 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++; // 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].frameset[num2].frame_status == 2) - finished_frames++; - - if(blendjob[jobnum].frameset[num2].frame_status == 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].frameset[frame].frame_status++; -} @@ -404,5 +405,5 @@ void exec_blender(char *input, char *out // OHNOBINKI! ... check this... Its supposed to send a command back to the server and run the_finisher(); function which sets the frame status to complete. /* You can't print the return value of a function that returns nothing (void) */ - the_finisher(frame); + finish_frame(frame); }