#include <ClockedResourceBase.h>
Onikiri::ClockedResourceBaseに対する継承グラフ
Public 型 | |
enum | PHASE { PHASE_BEGIN, PHASE_EVALUATE, PHASE_TRANSITION, PHASE_UPDATE, PHASE_END } |
PHASE_BEGIN | |
PHASE_END | |
PHASE_EVALUATE | |
PHASE_TRANSITION | |
PHASE_UPDATE | |
Public メソッド | |
virtual void | AddChild (ClockedResourceIF *child) |
virtual void | Begin () |
virtual void | BeginStall () |
virtual void | CacnelStallPeriod () |
ClockedResourceBase (const char *name="") | |
virtual void | End () |
virtual void | EndStall () |
virtual void | Evaluate () |
virtual int | GetPriority () const |
bool | IsStalledLastCycle () |
bool | IsStalledThisCycle () |
virtual void | SetParent (ClockedResourceIF *parent) |
virtual void | StallNextCycle (int cycles) |
virtual void | StallThisCycle () |
void | StallThisCycleExcludingChildren () |
virtual void | Tick () |
virtual void | Transition () |
virtual void | TriggerUpdate () |
virtual void | Update () |
virtual const char * | Who () const |
~ClockedResourceBase () | |
Protected 型 | |
typedef std::vector< ClockedResourceIF * > | Children |
Protected メソッド | |
PHASE | GetCurrentPhase () const |
s64 | GetCycles () const |
s64 | GetStalledCycles () const |
void | SetPriority (int priority) |
Protected 変数 | |
Children | m_children |
構成 | |
struct | ComparePriority |
ClockedResourceBase.h の 40 行で定義されています。
typedef std::vector<ClockedResourceIF*> Onikiri::ClockedResourceBase::Children [protected] |
ClockedResourceBase.h の 283 行で定義されています。
ClockedResourceBase.h の 43 行で定義されています。
00044 { 00045 PHASE_BEGIN, 00046 PHASE_EVALUATE, 00047 PHASE_TRANSITION, 00048 PHASE_UPDATE, 00049 PHASE_END 00050 };
Onikiri::ClockedResourceBase::ClockedResourceBase | ( | const char * | name = "" |
) | [inline] |
ClockedResourceBase.h の 58 行で定義されています。
00058 : 00059 m_name( name ), 00060 m_reqStallThisCycle( false ), 00061 m_stallPeriod( 0 ), 00062 m_thisCycleStalled( false ), 00063 m_lastCycleStalled( false ), 00064 m_parent( NULL ), 00065 m_cycles( 0 ), 00066 m_stalledCycles( 0 ), 00067 m_phase( PHASE_BEGIN ), 00068 m_priority( RP_DEFAULT_UPDATE ) 00069 { 00070 }
Onikiri::ClockedResourceBase::~ClockedResourceBase | ( | ) | [inline] |
virtual void Onikiri::ClockedResourceBase::AddChild | ( | ClockedResourceIF * | child | ) | [inline, virtual] |
ClockedResourceBase.h の 245 行で定義されています。
参照先 m_children・Onikiri::ClockedResourceIF::SetParent().
参照元 Onikiri::PipelineNodeBase::AddLowerPipeline()・Onikiri::Scheduler::Initialize()・Onikiri::PipelineNodeBase::PipelineNodeBase().
00246 { 00247 m_children.push_back( child ); 00248 child->SetParent( this ); 00249 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::Begin | ( | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
Onikiri::Schedulerで再定義されています。
ClockedResourceBase.h の 81 行で定義されています。
参照先 ASSERT・m_children・PHASE_BEGIN・PHASE_EVALUATE.
参照元 Onikiri::Scheduler::Begin().
00082 { 00083 ASSERT( m_phase == PHASE_BEGIN ); 00084 00085 m_lastCycleStalled = m_thisCycleStalled; 00086 m_thisCycleStalled = false; 00087 m_reqStallThisCycle = false; 00088 00089 if( m_stallPeriod > 0 ) { 00090 m_reqStallThisCycle = true; 00091 --m_stallPeriod; 00092 } 00093 00094 m_phase = PHASE_EVALUATE; 00095 00096 Children::iterator end = m_children.end(); 00097 for( Children::iterator i = m_children.begin(); i != end; ++i ){ 00098 (*i)->Begin(); 00099 } 00100 00101 m_cycles++; 00102 }
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::BeginStall | ( | ) | [inline, virtual] |
Onikiri::OpBuffer・Onikiri::Pipeline・Onikiri::PipelineLatchで再定義されています。
ClockedResourceBase.h の 282 行で定義されています。
参照元 Onikiri::PipelineLatch::BeginStall()・Transition().
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::CacnelStallPeriod | ( | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
ClockedResourceBase.h の 214 行で定義されています。
参照先 m_children.
00215 { 00216 m_stallPeriod = 0; 00217 00218 Children::iterator end = m_children.end(); 00219 for( Children::iterator i = m_children.begin(); i != end; ++i ){ 00220 (*i)->CacnelStallPeriod(); 00221 } 00222 }
virtual void Onikiri::ClockedResourceBase::End | ( | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
Onikiri::TimeWheelBase・Onikiri::PipelineLatchで再定義されています。
ClockedResourceBase.h の 162 行で定義されています。
参照先 ASSERT・m_children・PHASE_BEGIN・PHASE_END・Tick().
参照元 Onikiri::PipelineLatch::End()・Onikiri::TimeWheelBase::End().
00163 { 00164 ASSERT( m_phase == PHASE_END, "Do you call Process() of a base class?" ); 00165 m_phase = PHASE_BEGIN; 00166 00167 Children::iterator end = m_children.end(); 00168 for( Children::iterator i = m_children.begin(); i != end; ++i ){ 00169 (*i)->End(); 00170 } 00171 00172 if( !m_thisCycleStalled ){ 00173 // Proceed a time tick. 00174 Tick(); 00175 } 00176 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::EndStall | ( | ) | [inline, virtual] |
Onikiri::OpBuffer・Onikiri::Pipeline・Onikiri::PipelineLatchで再定義されています。
ClockedResourceBase.h の 283 行で定義されています。
参照元 Onikiri::PipelineLatch::EndStall()・Transition().
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::Evaluate | ( | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
Onikiri::Core・Onikiri::Dispatcher・Onikiri::Fetcher・Onikiri::Renamer・Onikiri::Retirer・Onikiri::Schedulerで再定義されています。
ClockedResourceBase.h の 105 行で定義されています。
参照先 ASSERT・m_children・PHASE_EVALUATE・PHASE_TRANSITION.
参照元 Onikiri::Scheduler::Evaluate()・Onikiri::Retirer::Evaluate()・Onikiri::Renamer::Evaluate()・Onikiri::Fetcher::Evaluate()・Onikiri::Dispatcher::Evaluate()・Onikiri::Core::Evaluate().
00106 { 00107 ASSERT( m_phase == PHASE_EVALUATE, "Do you call Begin() of a base class?" ); 00108 m_phase = PHASE_TRANSITION; 00109 00110 Children::iterator end = m_children.end(); 00111 for( Children::iterator i = m_children.begin(); i != end; ++i ){ 00112 (*i)->Evaluate(); 00113 } 00114 }
Here is the caller graph for this function:
PHASE Onikiri::ClockedResourceBase::GetCurrentPhase | ( | ) | const [inline, protected] |
ClockedResourceBase.h の 293 行で定義されています。
参照元 Onikiri::TimeWheelBase::AddEvent()・Onikiri::Scheduler::CanSelect()・Onikiri::Scheduler::EvaluateDependency()・Onikiri::TimeWheelBase::GetNow()・Onikiri::Scheduler::ReserveSelect().
Here is the caller graph for this function:
s64 Onikiri::ClockedResourceBase::GetCycles | ( | ) | const [inline, protected] |
virtual int Onikiri::ClockedResourceBase::GetPriority | ( | ) | const [inline, virtual] |
s64 Onikiri::ClockedResourceBase::GetStalledCycles | ( | ) | const [inline, protected] |
ClockedResourceBase.h の 303 行で定義されています。
参照元 Onikiri::Renamer::Finalize()・Onikiri::Fetcher::Finalize().
Here is the caller graph for this function:
bool Onikiri::ClockedResourceBase::IsStalledLastCycle | ( | ) | [inline] |
ClockedResourceBase.h の 235 行で定義されています。
参照先 ASSERT・PHASE_BEGIN.
00236 { 00237 ASSERT( 00238 m_phase != PHASE_BEGIN, 00239 "IsStalledLastCycle() cannot be called in PHASE_BEGIN." 00240 ); 00241 return m_lastCycleStalled; 00242 }
bool Onikiri::ClockedResourceBase::IsStalledThisCycle | ( | ) | [inline] |
ClockedResourceBase.h の 225 行で定義されています。
参照先 ASSERT・PHASE_END・PHASE_UPDATE.
参照元 Onikiri::OpBuffer::CheckAndDumpStallBegin()・Onikiri::PipelineLatch::End()・Onikiri::TimeWheelBase::End()・Onikiri::PipelineLatch::Receive()・Onikiri::Scheduler::Transition()・Onikiri::Retirer::Transition()・Onikiri::PipelineLatch::Transition().
00226 { 00227 ASSERT( 00228 m_phase == PHASE_UPDATE || m_phase == PHASE_END, 00229 "IsStalledThisCycle() can be called only in PHASE_PROCESS/END." 00230 ); 00231 return m_thisCycleStalled; 00232 }
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::SetParent | ( | ClockedResourceIF * | parent | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
ClockedResourceBase.h の 252 行で定義されています。
参照先 Onikiri::String::format()・Onikiri::ClockedResourceIF::Who().
00253 { 00254 m_parent = parent; 00255 00256 m_who = m_name + "(" + typeid(*this).name() + ")"; 00257 if( m_parent ){ 00258 m_who += String().format( " <= %s(Parent) ", m_parent->Who() ); 00259 } 00260 }
関数の呼び出しグラフ:
void Onikiri::ClockedResourceBase::SetPriority | ( | int | priority | ) | [inline, protected] |
ClockedResourceBase.h の 309 行で定義されています。
参照元 Onikiri::Retirer::Initialize().
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::StallNextCycle | ( | int | cycles | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
Onikiri::PipelineNodeBaseで再定義されています。
ClockedResourceBase.h の 203 行で定義されています。
参照先 m_children.
参照元 Onikiri::PipelineNodeBase::StallNextCycle().
00204 { 00205 m_stallPeriod = std::max( cycles, m_stallPeriod ); 00206 00207 Children::iterator end = m_children.end(); 00208 for( Children::iterator i = m_children.begin(); i != end; ++i ){ 00209 (*i)->StallNextCycle( cycles ); 00210 } 00211 }
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::StallThisCycle | ( | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
Onikiri::PipelineNodeBaseで再定義されています。
ClockedResourceBase.h の 179 行で定義されています。
参照先 ASSERT・m_children・PHASE_EVALUATE・PHASE_TRANSITION.
参照元 Onikiri::Core::Evaluate()・Onikiri::PipelineNodeBase::StallThisCycle()・Onikiri::PipelineNodeBase::StallThisNodeAndUpperThisCycle().
00180 { 00181 ASSERT( 00182 m_phase == PHASE_EVALUATE || m_phase == PHASE_TRANSITION, 00183 "IsStalledThisCycle() can be called only in PHASE_EVALUATE/TRANSITION." 00184 ); 00185 m_reqStallThisCycle = true; 00186 00187 Children::iterator end = m_children.end(); 00188 for( Children::iterator i = m_children.begin(); i != end; ++i ){ 00189 (*i)->StallThisCycle(); 00190 } 00191 }
Here is the caller graph for this function:
void Onikiri::ClockedResourceBase::StallThisCycleExcludingChildren | ( | ) | [inline] |
ClockedResourceBase.h の 193 行で定義されています。
参照先 ASSERT・PHASE_EVALUATE・PHASE_TRANSITION.
参照元 Onikiri::PipelineNodeBase::StallThisNodeAndUpperThisCycle().
00194 { 00195 ASSERT( 00196 m_phase == PHASE_EVALUATE || m_phase == PHASE_TRANSITION, 00197 "IsStalledThisCycle() can be called only in PHASE_EVALUATE/TRANSITION." 00198 ); 00199 m_reqStallThisCycle = true; 00200 }
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::Tick | ( | ) | [inline, virtual] |
Onikiri::TimeWheelBaseで再定義されています。
ClockedResourceBase.h の 279 行で定義されています。
参照元 End().
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::Transition | ( | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
Onikiri::PipelineLatch・Onikiri::Retirer・Onikiri::Schedulerで再定義されています。
ClockedResourceBase.h の 118 行で定義されています。
参照先 ASSERT・BeginStall()・EndStall()・m_children・PHASE_TRANSITION・PHASE_UPDATE.
参照元 Onikiri::Scheduler::Transition()・Onikiri::Retirer::Transition()・Onikiri::PipelineLatch::Transition().
00119 { 00120 ASSERT( m_phase == PHASE_TRANSITION, "Do you call Evaluate() of a base class?" ); 00121 00122 // Fix stall state 00123 m_thisCycleStalled = m_reqStallThisCycle; 00124 m_phase = PHASE_UPDATE; 00125 00126 00127 if( m_thisCycleStalled ){ 00128 // Stall this cycle. 00129 m_stalledCycles++; 00130 } 00131 00132 if( !m_lastCycleStalled && m_thisCycleStalled ){ 00133 BeginStall(); 00134 } 00135 else if ( m_lastCycleStalled && !m_thisCycleStalled ){ 00136 EndStall(); 00137 } 00138 00139 Children::iterator end = m_children.end(); 00140 for( Children::iterator i = m_children.begin(); i != end; ++i ){ 00141 (*i)->Transition(); 00142 } 00143 }
関数の呼び出しグラフ:
Here is the caller graph for this function:
virtual void Onikiri::ClockedResourceBase::TriggerUpdate | ( | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
ClockedResourceBase.h の 146 行で定義されています。
参照先 ASSERT・m_children・PHASE_END・PHASE_UPDATE・Update().
00147 { 00148 ASSERT( m_phase == PHASE_UPDATE, "Do you call Event() of a base class?" ); 00149 00150 if( !m_thisCycleStalled ){ 00151 Update(); 00152 } 00153 m_phase = PHASE_END; 00154 00155 Children::iterator end = m_children.end(); 00156 for( Children::iterator i = m_children.begin(); i != end; ++i ){ 00157 (*i)->TriggerUpdate(); 00158 } 00159 }
関数の呼び出しグラフ:
virtual void Onikiri::ClockedResourceBase::Update | ( | ) | [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
Onikiri::Cache・Onikiri::Dispatcher・Onikiri::Fetcher・Onikiri::Renamer・Onikiri::Retirer・Onikiri::Schedulerで再定義されています。
ClockedResourceBase.h の 274 行で定義されています。
参照元 TriggerUpdate().
Here is the caller graph for this function:
virtual const char* Onikiri::ClockedResourceBase::Who | ( | ) | const [inline, virtual] |
Onikiri::ClockedResourceIFを実装しています。
Onikiri::Core・Onikiri::PipelineNodeBaseで再定義されています。
ClockedResourceBase.h の 267 行で定義されています。
Children Onikiri::ClockedResourceBase::m_children [protected] |