scheudler: Cache ThreadData::IsCPUBound() result
This commit is contained in:
@@ -18,6 +18,7 @@ ThreadData::_InitBase()
|
|||||||
fPriorityPenalty = 0;
|
fPriorityPenalty = 0;
|
||||||
fAdditionalPenalty = 0;
|
fAdditionalPenalty = 0;
|
||||||
fEffectivePriority = GetPriority();
|
fEffectivePriority = GetPriority();
|
||||||
|
fCPUBound = false;
|
||||||
|
|
||||||
fTimeUsed = 0;
|
fTimeUsed = 0;
|
||||||
fStolenTime = 0;
|
fStolenTime = 0;
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public:
|
|||||||
|
|
||||||
inline int32 GetEffectivePriority() const;
|
inline int32 GetEffectivePriority() const;
|
||||||
|
|
||||||
inline bool IsCPUBound() const;
|
inline bool IsCPUBound() const { return fCPUBound; }
|
||||||
|
|
||||||
inline void CancelPenalty();
|
inline void CancelPenalty();
|
||||||
inline bool ShouldCancelPenalty() const;
|
inline bool ShouldCancelPenalty() const;
|
||||||
@@ -116,6 +116,7 @@ private:
|
|||||||
|
|
||||||
Thread* fThread;
|
Thread* fThread;
|
||||||
|
|
||||||
|
bool fCPUBound;
|
||||||
int32 fPriorityPenalty;
|
int32 fPriorityPenalty;
|
||||||
int32 fAdditionalPenalty;
|
int32 fAdditionalPenalty;
|
||||||
|
|
||||||
@@ -207,21 +208,15 @@ ThreadData::_IncreasePenalty()
|
|||||||
|
|
||||||
int32 oldPenalty = fPriorityPenalty++;
|
int32 oldPenalty = fPriorityPenalty++;
|
||||||
const int kMinimalPriority = _GetMinimalPriority();
|
const int kMinimalPriority = _GetMinimalPriority();
|
||||||
if (GetPriority() - oldPenalty <= kMinimalPriority)
|
if (GetPriority() - oldPenalty <= kMinimalPriority) {
|
||||||
fPriorityPenalty = oldPenalty;
|
fPriorityPenalty = oldPenalty;
|
||||||
|
fCPUBound = true;
|
||||||
|
}
|
||||||
|
|
||||||
_ComputeEffectivePriority();
|
_ComputeEffectivePriority();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool
|
|
||||||
ThreadData::IsCPUBound() const
|
|
||||||
{
|
|
||||||
SCHEDULER_ENTER_FUNCTION();
|
|
||||||
return GetPriority() - fPriorityPenalty == _GetMinimalPriority();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
ThreadData::CancelPenalty()
|
ThreadData::CancelPenalty()
|
||||||
{
|
{
|
||||||
@@ -229,6 +224,7 @@ ThreadData::CancelPenalty()
|
|||||||
|
|
||||||
int32 oldPenalty = fPriorityPenalty;
|
int32 oldPenalty = fPriorityPenalty;
|
||||||
fPriorityPenalty = 0;
|
fPriorityPenalty = 0;
|
||||||
|
fCPUBound = false;
|
||||||
|
|
||||||
if (oldPenalty != 0) {
|
if (oldPenalty != 0) {
|
||||||
TRACE("cancelling thread %ld penalty\n", fThread->id);
|
TRACE("cancelling thread %ld penalty\n", fThread->id);
|
||||||
|
|||||||
Reference in New Issue
Block a user