summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/app/scheduler.cxx25
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;