diff options
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/app/scheduler.cxx | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/vcl/source/app/scheduler.cxx b/vcl/source/app/scheduler.cxx index 3ad49f5844c2..0fba128404fa 100644 --- a/vcl/source/app/scheduler.cxx +++ b/vcl/source/app/scheduler.cxx @@ -173,17 +173,11 @@ bool Scheduler::GetDeterministicMode() return g_bDeterministicMode; } -inline bool Scheduler::HasPendingTasks( const ImplSchedulerContext &rSchedCtx, - const sal_uInt64 nTime ) -{ - return ( rSchedCtx.mbNeedsReschedule || ((rSchedCtx.mnTimerPeriod != InfiniteTimeoutMs) - && (nTime >= rSchedCtx.mnTimerStart + rSchedCtx.mnTimerPeriod )) ); -} - bool Scheduler::HasPendingTasks() { - return HasPendingTasks( ImplGetSVData()->maSchedCtx, - tools::Time::GetSystemTicks() ); + const ImplSchedulerContext &rSchedCtx = ImplGetSVData()->maSchedCtx; + return ( rSchedCtx.mbNeedsReschedule || ((rSchedCtx.mnTimerPeriod != InfiniteTimeoutMs) + && (tools::Time::GetSystemTicks() >= rSchedCtx.mnTimerStart + rSchedCtx.mnTimerPeriod )) ); } inline void Scheduler::UpdateMinPeriod( ImplSchedulerData * const pSchedulerData, @@ -250,11 +244,20 @@ bool Scheduler::ProcessTaskScheduling() { ImplSVData *pSVData = ImplGetSVData(); ImplSchedulerContext &rSchedCtx = pSVData->maSchedCtx; - sal_uInt64 nTime = tools::Time::GetSystemTicks(); - if ( pSVData->mbDeInit || !HasPendingTasks( rSchedCtx, nTime ) ) + sal_uInt64 nTime = tools::Time::GetSystemTicks(); + if ( pSVData->mbDeInit || InfiniteTimeoutMs == rSchedCtx.mnTimerPeriod ) return false; rSchedCtx.mbNeedsReschedule = false; + if ( nTime < rSchedCtx.mnTimerStart + rSchedCtx.mnTimerPeriod ) + { + SAL_WARN( "vcl.schedule", "we're too early - restart the timer!" ); + UpdateSystemTimer( rSchedCtx, + rSchedCtx.mnTimerStart + rSchedCtx.mnTimerPeriod - nTime, + true, nTime ); + return false; + } + ImplSchedulerData* pSchedulerData = nullptr; ImplSchedulerData* pPrevSchedulerData = nullptr; ImplSchedulerData *pMostUrgent = nullptr; |