scheduler: Update used time when thread yields or sleeps

This commit is contained in:
Pawel Dziepak
2014-01-16 23:26:09 +01:00
parent 082d3c1015
commit 7f212f45c3
@@ -277,6 +277,10 @@ ThreadData::GoesAway()
ASSERT(fReady); ASSERT(fReady);
bigtime_t timeUsed = system_time() - fQuantumStart;
ASSERT(timeUsed >= 0);
fTimeLeft -= timeUsed;
if (!fReceivedPenalty) if (!fReceivedPenalty)
_IncreasePenalty(false); _IncreasePenalty(false);
fHasSlept = true; fHasSlept = true;
@@ -416,15 +420,15 @@ ThreadData::HasQuantumEnded(bool wasPreempted, bool hasYielded)
{ {
SCHEDULER_ENTER_FUNCTION(); SCHEDULER_ENTER_FUNCTION();
bigtime_t timeUsed = system_time() - fQuantumStart;
ASSERT(timeUsed >= 0);
fTimeLeft -= timeUsed;
if (hasYielded) { if (hasYielded) {
fTimeLeft = 0; fTimeLeft = 0;
return true; return true;
} }
bigtime_t timeUsed = system_time() - fQuantumStart;
ASSERT(timeUsed >= 0);
fTimeLeft -= timeUsed;
// too little time left, it's better make the next quantum a bit longer // too little time left, it's better make the next quantum a bit longer
int32 skipTime = gCurrentMode->minimal_quantum / 2; int32 skipTime = gCurrentMode->minimal_quantum / 2;
if (wasPreempted || fTimeLeft <= skipTime) { if (wasPreempted || fTimeLeft <= skipTime) {