[patch][rfa] "active" pin of sid-sched

Dave Brolley <[email protected]>
Newsgroups gmane.comp.emulators.sid.devel
Organization Red Hat Canada, Ltd
Message-ID <[email protected]>
Hi,

This patch modifies the sid-sched compont so that it only drives its 
'active' pin when the threshold from being active to inactive is 
crossed. This is mainly an optimization.

ok to commit?

Dave
sched.ChangeLog (text/plain, 424 B)
2003-08-29  Dave Brolley  <[email protected]>

	* compSched.cxx (operator <<): Stream active_pin.
	(operator >>): Ditto.
	(active_pin): New member of scheduler_component.
	(advance): Drive active_pin with 1 or 0 as the enable
	threshold is crossed.
	(scheduler_component): Add "active_pin".
	(sid-sched.xml): Document "active" pin and interaction between
	"enabled?" and "enable-threshold".
	(sid-sched.txt): Regenerated.
sched.patch.txt (text/plain, 4.3 KB)
Index: sid/component/sched/compSched.cxx
===================================================================
RCS file: /cvs/src/src/sid/component/sched/compSched.cxx,v
retrieving revision 1.11
diff -c -p -r1.11 compSched.cxx
*** sid/component/sched/compSched.cxx	29 Aug 2003 20:22:01 -0000	1.11
--- sid/component/sched/compSched.cxx	21 Oct 2003 17:03:57 -0000
*************** operator << (ostream& o, const scheduler
*** 1215,1220 ****
--- 1215,1221 ----
    o << "scheduler-state "
      << it.enable_threshold << " "
      << it.enable_p << " "
+     << it.active_p << " "
      << it.yield_host_time_threshold << " "
      << it.yield_host_time_p << " "
      << it.sched.step_cycle_limit << " "   // this is a component attribute
*************** operator >> (istream& i, scheduler_compo
*** 1261,1266 ****
--- 1262,1268 ----
      {
        i >> it.enable_threshold
          >> it.enable_p
+         >> it.active_p
  	>> it.yield_host_time_threshold
  	>> it.yield_host_time_p
  	>> it.sched.step_cycle_limit
*************** class scheduler_component: public schedu
*** 1335,1340 ****
--- 1337,1343 ----
    int enable_p;
    int yield_host_time_threshold;
    int yield_host_time_p;
+   bool active_p;
    host_int_8 advance_count;
    callback_pin<this_t> advance_pin;
    callback_pin<this_t> time_query_pin;
*************** protected:
*** 1396,1403 ****
  	       << this->yield_host_time_threshold << endl;
  #endif
  	  // Drive the active pin if the threshold has been crossed.
! 	  if (this->active_pin.recall() != 1)
! 	    this->active_pin.drive(1);
  
            this->advance_count ++;
    	  this->sched.advance (this->yield_host_time_p >= this->yield_host_time_threshold);
--- 1399,1409 ----
  	       << this->yield_host_time_threshold << endl;
  #endif
  	  // Drive the active pin if the threshold has been crossed.
! 	  if (UNLIKELY(! this->active_p))
! 	    {
! 	      this->active_pin.drive (1);
! 	      this->active_p = true;
! 	    }
  
            this->advance_count ++;
    	  this->sched.advance (this->yield_host_time_p >= this->yield_host_time_threshold);
*************** protected:
*** 1405,1412 ****
        else
  	{
  	  // Drive the active pin if the threshold has been crossed.
! 	  if (this->active_pin.recall() != 0)
! 	    this->active_pin.drive(0);
  	}
      }
  
--- 1411,1421 ----
        else
  	{
  	  // Drive the active pin if the threshold has been crossed.
! 	  if (UNLIKELY(this->active_p))
! 	    {
! 	      this->active_pin.drive (0);
! 	      this->active_p = false;
! 	    }
  	}
      }
  
*************** public:
*** 1444,1450 ****
      clients(0),
      num_clients(0),
      enable_threshold(1),
!     enable_p(1),
      yield_host_time_threshold(1), 
      yield_host_time_p(0), 
      advance_count(0),
--- 1453,1459 ----
      clients(0),
      num_clients(0),
      enable_threshold(1),
!     active_p(1),
      yield_host_time_threshold(1), 
      yield_host_time_p(0), 
      advance_count(0),
*************** public:
*** 1452,1457 ****
--- 1461,1467 ----
      time_query_pin(this, & scheduler_component::time_query),
      yield_pin(this, & scheduler_component::yield_step_loop)
      {
+       enable_p = enable_threshold;
        scheduler_component_ctor_1();
        scheduler_component_ctor_2();
        scheduler_component_ctor_3();
Index: sid/component/sched/sid-sched.xml
===================================================================
RCS file: /cvs/src/src/sid/component/sched/sid-sched.xml,v
retrieving revision 1.5
diff -c -p -r1.5 sid-sched.xml
*** sid/component/sched/sid-sched.xml	29 Aug 2003 19:45:10 -0000	1.5
--- sid/component/sched/sid-sched.xml	21 Oct 2003 17:03:57 -0000
***************
*** 137,144 ****
  
      <behavior name="advancing">
        <p> When you have disabled the scheduler by setting the
!       <attribute>enabled?</attribute> attribute to a value less than enable-threshold,
!       advancing as described below, does not occur.
        </p>
  
        <p> Whenever the <pin>advance</pin> input pin is driven, the scheduler
--- 137,144 ----
  
      <behavior name="advancing">
        <p> When you have disabled the scheduler by setting the
!       <attribute>enabled?</attribute> attribute to a value less than the <attribute>enable-threshold</attribute>
!       attribute, advancing as described below, does not occur.
        </p>
  
        <p> Whenever the <pin>advance</pin> input pin is driven, the scheduler
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.