Changeset - 92b51bd6668b
[Not reviewed]
default
0 1 0
LordOfWar - 16 years ago 2009-10-24 20:12:52

added some more code to the complex frame finder
1 file changed with 21 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/server/distrend.c
Show inline comments
 
@@ -69,6 +69,7 @@ struct general_info {
 
  short int hibernate;
 
  unsigned int timestamp;
 
  unsigned long int total_render_power;
 
  unsigned long int total_priority_pieces;
 
} general_info;
 

	
 

	
 
@@ -419,7 +420,7 @@ int find_jobframe(struct distrenjob *hea
 
  return 0;
 
}
 

	
 
int find_jobframe_from_job(struct distrenjob *head, struct distrenjob *distrenjob_ptr, struct distrenjob **job, struct frameset **frame)
 
int find_jobframe_from_job(struct distrenjob *distrenjob_ptr, struct distrenjob **job, struct frameset **frame)
 
{
 
  unsigned int frame_counter;
 
  unsigned short int found;
 
@@ -461,20 +462,31 @@ int find_jobframe_new(struct distrenjob 
 
  if(general_info.hibernate)
 
    return 1;
 

	
 
  int power_difference;
 
  int greatest_power_difference;
 
  unsigned short int found;
 
  struct distrenjob *job_to_render;
 

	
 
  struct distrenjob *distrenjob_ptr;
 

	
 
  greatest_power_difference = 0;
 
  found = 0;
 
  /* iterate through jobs from first to last */
 
  for(distrenjob_ptr = head->next; distrenjob_ptr && !distrenjob_ptr->hibernate; distrenjob_ptr = distrenjob_ptr->next)
 
  for(distrenjob_ptr = head->next;
 
  distrenjob_ptr && !distrenjob_ptr->hibernate && distrenjob_ptr->prev_frame_index < distrenjob_ptr->total_frames;
 
  distrenjob_ptr = distrenjob_ptr->next)
 
  {
 
	  power_difference = (general_info.total_render_power / general_info.total_priority_pieces)*distrenjob_ptr->priority;
 
	  power_difference = power_difference - distrenjob_ptr->assigned_render_power;
 

	
 
	  if(power_difference > greatest_power_difference)
 
	  {
 
	  job_to_render = distrenjob_ptr;
 
		  greatest_power_difference = power_difference;
 
	  }
 
  }
 

	
 
  find_jobframe_from_job(head, job_to_render, job, frame);
 
  find_jobframe_from_job(job_to_render, job, frame);
 

	
 
  if(!found)
 
    {
 
@@ -491,7 +503,7 @@ int find_jobframe_again(struct distrenjo
 
{
 
  if(general_info.hibernate)
 
    return 1;
 

	
 
  short int found;
 
  struct distrenjob *distrenjob_ptr;
 

	
 
  distrenjob_ptr = distrenjob_get(head, jobnum);
 
@@ -499,10 +511,15 @@ int find_jobframe_again(struct distrenjo
 
  if(!distrenjob_ptr)
 
    {
 
      fprintf(stderr, "Job number %d has been finished, finding new job\n", jobnum);
 
      find_jobframe_new(head, rend_pwr, job, frame);
 
      sleep(1); /*< @todo eliminate the need for this line*/
 
      return 1;
 
    }
 

	
 
  found = 0;
 
  found = find_jobframe_from_job(distrenjob_ptr, job, frame);
 

	
 
  if(found)
 
  find_jobframe_new(head, rend_pwr, job, frame);
 

	
 
  return 0;
0 comments (0 inline, 0 general)