editeng/source/editeng/impedit.hxx | 6 - editeng/source/editeng/impedit2.cxx | 6 - editeng/source/editeng/impedit3.cxx | 2 editeng/source/editeng/impedit4.cxx | 4 sc/inc/scmod.hxx | 2 sc/source/ui/app/scmod.cxx | 47 ++++++++-- sd/source/ui/framework/configuration/ConfigurationUpdater.cxx | 20 ++-- sd/source/ui/framework/configuration/ConfigurationUpdater.hxx | 2 sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx | 18 +-- sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx | 2 svtools/source/graphic/grfcache.cxx | 6 - svtools/source/graphic/grfcache.hxx | 2 sw/source/core/doc/DocumentTimerManager.cxx | 18 +-- sw/source/core/inc/DocumentTimerManager.hxx | 2 vcl/source/app/svapp.cxx | 3 vcl/source/app/timer.cxx | 2 16 files changed, 90 insertions(+), 52 deletions(-)
New commits: commit a3b404e21e7ffd74b1456f3e150f6ca361480c1d Author: Tobias Madl <[email protected]> Date: Fri Dec 19 13:02:50 2014 +0000 Timer: first independend idle use Change-Id: I27985e456447ef3d71cae39c2acaf59b3aa60b83 diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index 7c4a76d..17c589e 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -355,8 +355,11 @@ inline void ImplYield( bool i_bWait, bool i_bAllEvents ) // run timers that have timed out if ( !pSVData->mbNoCallTimer ) + { while ( pSVData->mbNotAllTimerCalled ) Timer::ImplTimerCallbackProc(); + Timer::Timer::ProcessAllIdleHandlers(); + } pSVData->maAppData.mnDispatchLevel++; // do not wait for events if application was already quit; in that diff --git a/vcl/source/app/timer.cxx b/vcl/source/app/timer.cxx index 529c8b5..0dea56d 100644 --- a/vcl/source/app/timer.cxx +++ b/vcl/source/app/timer.cxx @@ -151,7 +151,7 @@ void Timer::ImplTimerCallbackProc() // If the timer is not new, was not deleted, and if it is not in the timeout handler, then // call the handler as soon as the time is up. if ( (pTimerData->mnTimerUpdate < pSVData->mnTimerUpdate) && - !pTimerData->mbDelete && !pTimerData->mbInTimeout ) + !pTimerData->mbDelete && !pTimerData->mbInTimeout && !pTimerData->mpTimer->mbIdle) { // time has expired if ( pTimerData->GetDeadline() <= nTime ) commit 256d5241f1a242f2e20608a0ded2554bfece9ac5 Author: Tobias Madl <[email protected]> Date: Fri Dec 19 13:01:46 2014 +0000 Timer: Reversed some Idles to Timer Change-Id: I213722cc98490430378014290cb09cca9e469bbb diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx index f98f943..c6e41d4 100644 --- a/editeng/source/editeng/impedit.hxx +++ b/editeng/source/editeng/impedit.hxx @@ -465,7 +465,7 @@ private: IdleFormattter aIdleFormatter; - Idle aOnlineSpellIdle; + Timer aOnlineSpellTimer; // If it is detected at one point that the StatusHdl has to be called, but // this should not happen immediately (critical section): @@ -979,8 +979,8 @@ public: inline EditEngine* GetEditEnginePtr() const { return pEditEngine; } - void StartOnlineSpellTimer() { aOnlineSpellIdle.Start(); } - void StopOnlineSpellTimer() { aOnlineSpellIdle.Stop(); } + void StartOnlineSpellTimer() { aOnlineSpellTimer.Start(); } + void StopOnlineSpellTimer() { aOnlineSpellTimer.Stop(); } const OUString& GetAutoCompleteText() const { return aAutoCompleteText; } void SetAutoCompleteText(const OUString& rStr, bool bUpdateTipWindow); diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx index f4b48b8..fcc9c24 100644 --- a/editeng/source/editeng/impedit2.cxx +++ b/editeng/source/editeng/impedit2.cxx @@ -148,8 +148,8 @@ ImpEditEngine::ImpEditEngine( EditEngine* pEE, SfxItemPool* pItemPool ) : aIdleFormatter.SetPriority( VCL_IDLE_PRIORITY_REPAINT ); aIdleFormatter.SetIdleHdl( LINK( this, ImpEditEngine, IdleFormatHdl ) ); - aOnlineSpellIdle.SetPriority( VCL_IDLE_PRIORITY_LOW ); - aOnlineSpellIdle.SetIdleHdl( LINK( this, ImpEditEngine, OnlineSpellHdl ) ); + aOnlineSpellTimer.SetTimeout( 100 ); + aOnlineSpellTimer.SetTimeoutHdl( LINK( this, ImpEditEngine, OnlineSpellHdl ) ); // Access data already from here on! SetRefDevice( NULL ); @@ -163,7 +163,7 @@ ImpEditEngine::ImpEditEngine( EditEngine* pEE, SfxItemPool* pItemPool ) : ImpEditEngine::~ImpEditEngine() { aStatusTimer.Stop(); - aOnlineSpellIdle.Stop(); + aOnlineSpellTimer.Stop(); aIdleFormatter.Stop(); // Destroying templates may otherwise cause unnecessary formatting, diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index 39db002..e4af131 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -312,7 +312,7 @@ IMPL_LINK_NOARG(ImpEditEngine, OnlineSpellHdl) if ( !Application::AnyInput( VCL_INPUT_KEYBOARD ) && GetUpdateMode() && IsFormatted() ) DoOnlineSpelling(); else - aOnlineSpellIdle.Start(); + aOnlineSpellTimer.Start(); return 0; } diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx index dd5c2f0..5d17194 100644 --- a/editeng/source/editeng/impedit4.cxx +++ b/editeng/source/editeng/impedit4.cxx @@ -1478,7 +1478,7 @@ EESpellState ImpEditEngine::Spell( EditView* pEditView, bool bMultipleDoc ) if ( !xSpeller.is() ) return EE_SPELL_NOSPELLER; - aOnlineSpellIdle.Stop(); + aOnlineSpellTimer.Stop(); // In MultipleDoc always from the front / rear ... if ( bMultipleDoc ) @@ -2447,7 +2447,7 @@ void ImpEditEngine::DoOnlineSpelling( ContentNode* pThisNodeOnly, bool bSpellAtC break; } if ( bRestartTimer ) - aOnlineSpellIdle.Start(); + aOnlineSpellTimer.Start(); } diff --git a/sc/inc/scmod.hxx b/sc/inc/scmod.hxx index 7d23cc7..2c513a9 100644 --- a/sc/inc/scmod.hxx +++ b/sc/inc/scmod.hxx @@ -81,7 +81,7 @@ class ScAnyRefModalDlg; class ScModule: public SfxModule, public SfxListener, utl::ConfigurationListener { - Idle aIdle; + Timer aIdleTimer; Idle aSpellIdle; ScDragData* mpDragData; ScClipData* mpClipData; diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx index bfb85ca..0f3f80f 100644 --- a/sc/source/ui/app/scmod.cxx +++ b/sc/source/ui/app/scmod.cxx @@ -112,6 +112,13 @@ #include "formulagroup.hxx" #include <documentlinkmgr.hxx> +#define SC_IDLE_MIN 150 +#define SC_IDLE_MAX 3000 +#define SC_IDLE_STEP 75 +#define SC_IDLE_COUNT 50 + +static sal_uInt16 nIdleCount = 0; + SFX_IMPL_INTERFACE(ScModule, SfxShell) void ScModule::InitInterface_Impl() @@ -169,9 +176,9 @@ ScModule::ScModule( SfxObjectFactory* pFact ) : aSpellIdle.SetPriority(VCL_IDLE_PRIORITY_REPAINT); aSpellIdle.SetIdleHdl( LINK( this, ScModule, SpellTimerHdl ) ); - aIdle.SetPriority(VCL_IDLE_PRIORITY_LOWER); - aIdle.SetIdleHdl( LINK( this, ScModule, IdleHandler ) ); - aIdle.Start(); + aIdleTimer.SetTimeout(SC_IDLE_MIN); + aIdleTimer.SetTimeoutHdl( LINK( this, ScModule, IdleHandler ) ); + aIdleTimer.Start(); pMessagePool = new ScMessagePool; pMessagePool->FreezeIdRanges(); @@ -1844,7 +1851,11 @@ void ScModule::EndReference() */ void ScModule::AnythingChanged() { - aIdle.SetPriority(VCL_IDLE_PRIORITY_LOWER); + sal_uLong nOldTime = aIdleTimer.GetTimeout(); + if ( nOldTime != SC_IDLE_MIN ) + aIdleTimer.SetTimeout( SC_IDLE_MIN ); + + nIdleCount = 0; } static void lcl_CheckNeedsRepaint( ScDocShell* pDocShell ) @@ -1864,7 +1875,7 @@ IMPL_LINK_NOARG(ScModule, IdleHandler) { if ( Application::AnyInput( VCL_INPUT_MOUSEANDKEYBOARD ) ) { - aIdle.Start(); // Timeout unchanged + aIdleTimer.Start(); // Timeout unchanged return 0; } @@ -1905,12 +1916,30 @@ IMPL_LINK_NOARG(ScModule, IdleHandler) } } - if (bMore) - aIdle.SetPriority(VCL_IDLE_PRIORITY_LOW); + sal_uLong nOldTime = aIdleTimer.GetTimeout(); + sal_uLong nNewTime = nOldTime; + if ( bMore ) + { + nNewTime = SC_IDLE_MIN; + nIdleCount = 0; + } else - aIdle.SetPriority(VCL_IDLE_PRIORITY_LOWEST); + { + // Set SC_IDLE_COUNT to initial Timeout - increase afterwards + if ( nIdleCount < SC_IDLE_COUNT ) + ++nIdleCount; + else + { + nNewTime += SC_IDLE_STEP; + if ( nNewTime > SC_IDLE_MAX ) + nNewTime = SC_IDLE_MAX; + } + } + if ( nNewTime != nOldTime ) + aIdleTimer.SetTimeout( nNewTime ); + - aIdle.Start(); + aIdleTimer.Start(); return 0; } diff --git a/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx b/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx index 42b2eb7..10ea920 100644 --- a/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx +++ b/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx @@ -36,7 +36,11 @@ using ::sd::framework::FrameworkHelper; using ::std::vector; namespace { +static const sal_Int32 snShortTimeout (100); +static const sal_Int32 snNormalTimeout (1000); +static const sal_Int32 snLongTimeout (10000); static const sal_Int32 snShortTimeoutCountThreshold (1); +static const sal_Int32 snNormalTimeoutCountThreshold (5); } namespace sd { namespace framework { @@ -66,21 +70,21 @@ ConfigurationUpdater::ConfigurationUpdater ( mbUpdatePending(false), mbUpdateBeingProcessed(false), mnLockCount(0), - maUpdateIdle(), + maUpdateTimer(), mnFailedUpdateCount(0), mpResourceManager(rpResourceManager) { // Prepare the timer that is started when after an update the current // and the requested configuration differ. With the timer we try // updates until the two configurations are the same. - maUpdateIdle.SetPriority(VCL_IDLE_PRIORITY_LOWEST); - maUpdateIdle.SetIdleHdl(LINK(this,ConfigurationUpdater,TimeoutHandler)); + maUpdateTimer.SetTimeout(snNormalTimeout); + maUpdateTimer.SetTimeoutHdl(LINK(this,ConfigurationUpdater,TimeoutHandler)); SetControllerManager(rxControllerManager); } ConfigurationUpdater::~ConfigurationUpdater (void) { - maUpdateIdle.Stop(); + maUpdateTimer.Stop(); } void ConfigurationUpdater::SetControllerManager( @@ -214,11 +218,13 @@ void ConfigurationUpdater::CheckUpdateSuccess (void) if ( ! AreConfigurationsEquivalent(mxCurrentConfiguration, mxRequestedConfiguration)) { if (mnFailedUpdateCount <= snShortTimeoutCountThreshold) - maUpdateIdle.SetPriority(VCL_IDLE_PRIORITY_LOW); + maUpdateTimer.SetTimeout(snShortTimeout); + else if (mnFailedUpdateCount < snNormalTimeoutCountThreshold) + maUpdateTimer.SetTimeout(snNormalTimeout); else - maUpdateIdle.SetPriority(VCL_IDLE_PRIORITY_LOWEST); + maUpdateTimer.SetTimeout(snLongTimeout); ++mnFailedUpdateCount; - maUpdateIdle.Start(); + maUpdateTimer.Start(); } else { diff --git a/sd/source/ui/framework/configuration/ConfigurationUpdater.hxx b/sd/source/ui/framework/configuration/ConfigurationUpdater.hxx index 382fac6..bde705f 100644 --- a/sd/source/ui/framework/configuration/ConfigurationUpdater.hxx +++ b/sd/source/ui/framework/configuration/ConfigurationUpdater.hxx @@ -131,7 +131,7 @@ private: This is used to overcome problems with resources that become available asynchronously. */ - Idle maUpdateIdle; + Timer maUpdateTimer; /** The number of failed updates (those after which the current configuration is not equivalent to the requested configuration) is diff --git a/sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx b/sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx index 1364bee..dcbdff7 100644 --- a/sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx +++ b/sd/source/ui/slidesorter/cache/SlsQueueProcessor.cxx @@ -32,7 +32,7 @@ QueueProcessor::QueueProcessor ( const bool bDoSuperSampling, const SharedCacheContext& rpCacheContext) : maMutex(), - maIdle(), + maTimer(), mnTimeBetweenHighPriorityRequests (10/*ms*/), mnTimeBetweenLowPriorityRequests (100/*ms*/), mnTimeBetweenRequestsWhenNotIdle (1000/*ms*/), @@ -58,8 +58,8 @@ QueueProcessor::QueueProcessor ( if (aTimeBetweenReqeusts.has<sal_Int32>()) aTimeBetweenReqeusts >>= mnTimeBetweenRequestsWhenNotIdle; - maIdle.SetIdleHdl (LINK(this,QueueProcessor,ProcessRequestHdl)); - maIdle.SetPriority (VCL_IDLE_PRIORITY_REPAINT); + maTimer.SetTimeoutHdl (LINK(this,QueueProcessor,ProcessRequestHdl)); + maTimer.SetTimeout (10); } QueueProcessor::~QueueProcessor (void) @@ -70,20 +70,20 @@ void QueueProcessor::Start (int nPriorityClass) { if (mbIsPaused) return; - if ( ! maIdle.IsActive()) + if ( ! maTimer.IsActive()) { if (nPriorityClass == 0) - maIdle.SetPriority (VCL_IDLE_PRIORITY_REPAINT); + maTimer.SetTimeout (10); else - maIdle.SetPriority (VCL_IDLE_PRIORITY_LOW); - maIdle.Start(); + maTimer.SetTimeout (100); + maTimer.Start(); } } void QueueProcessor::Stop (void) { - if (maIdle.IsActive()) - maIdle.Stop(); + if (maTimer.IsActive()) + maTimer.Stop(); } void QueueProcessor::Pause (void) diff --git a/sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx b/sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx index 6993d5c..df65ffa 100644 --- a/sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx +++ b/sd/source/ui/slidesorter/cache/SlsQueueProcessor.hxx @@ -92,7 +92,7 @@ private: */ ::osl::Mutex maMutex; - Idle maIdle; + Timer maTimer; DECL_LINK(ProcessRequestHdl, void *); sal_uInt32 mnTimeBetweenHighPriorityRequests; sal_uInt32 mnTimeBetweenLowPriorityRequests; diff --git a/svtools/source/graphic/grfcache.cxx b/svtools/source/graphic/grfcache.cxx index f5baadb..4d28574 100644 --- a/svtools/source/graphic/grfcache.cxx +++ b/svtools/source/graphic/grfcache.cxx @@ -824,9 +824,9 @@ GraphicCache::GraphicCache( sal_uLong nDisplayCacheSize, sal_uLong nMaxObjDispla mnMaxObjDisplaySize ( nMaxObjDisplayCacheSize ), mnUsedDisplaySize ( 0UL ) { - maReleaseIdle.SetIdleHdl( LINK( this, GraphicCache, ReleaseTimeoutHdl ) ); - maReleaseIdle.SetPriority( VCL_IDLE_PRIORITY_LOWEST ); - maReleaseIdle.Start(); + maReleaseTimer.SetTimeoutHdl( LINK( this, GraphicCache, ReleaseTimeoutHdl ) ); + maReleaseTimer.SetTimeout( 10000 ); + maReleaseTimer.Start(); } GraphicCache::~GraphicCache() diff --git a/svtools/source/graphic/grfcache.hxx b/svtools/source/graphic/grfcache.hxx index e8259e7..ddb6f6b 100644 --- a/svtools/source/graphic/grfcache.hxx +++ b/svtools/source/graphic/grfcache.hxx @@ -39,7 +39,7 @@ private: typedef std::list< GraphicCacheEntry* > GraphicCacheEntryList; typedef std::list< GraphicDisplayCacheEntry* > GraphicDisplayCacheEntryList; - Idle maReleaseIdle; + Timer maReleaseTimer; GraphicCacheEntryList maGraphicCache; GraphicDisplayCacheEntryList maDisplayCache; sal_uLong mnReleaseTimeoutSeconds; diff --git a/sw/source/core/doc/DocumentTimerManager.cxx b/sw/source/core/doc/DocumentTimerManager.cxx index 5c97d2c..d65c24a 100644 --- a/sw/source/core/doc/DocumentTimerManager.cxx +++ b/sw/source/core/doc/DocumentTimerManager.cxx @@ -42,42 +42,42 @@ DocumentTimerManager::DocumentTimerManager( SwDoc& i_rSwdoc ) : m_rDoc( i_rSwdoc mbStartIdleTimer( false ), mIdleBlockCount( 0 ) { - maIdle.SetPriority( VCL_IDLE_PRIORITY_LOWEST ); - maIdle.SetIdleHdl( LINK( this, DocumentTimerManager, DoIdleJobs) ); + maIdleTimer.SetTimeout( 600 ); + maIdleTimer.SetTimeoutHdl( LINK( this, DocumentTimerManager, DoIdleJobs) ); } void DocumentTimerManager::StartIdling() { mbStartIdleTimer = true; if( !mIdleBlockCount ) - maIdle.Start(); + maIdleTimer.Start(); } void DocumentTimerManager::StopIdling() { mbStartIdleTimer = false; - maIdle.Stop(); + maIdleTimer.Stop(); } void DocumentTimerManager::BlockIdling() { - maIdle.Stop(); + maIdleTimer.Stop(); ++mIdleBlockCount; } void DocumentTimerManager::UnblockIdling() { --mIdleBlockCount; - if( !mIdleBlockCount && mbStartIdleTimer && !maIdle.IsActive() ) - maIdle.Start(); + if( !mIdleBlockCount && mbStartIdleTimer && !maIdleTimer.IsActive() ) + maIdleTimer.Start(); } void DocumentTimerManager::StartBackgroundJobs() { // Trigger DoIdleJobs(), asynchronously. - maIdle.Start(); + maIdleTimer.Start(); } -IMPL_LINK( DocumentTimerManager, DoIdleJobs, Timer *, pTimer ) +IMPL_LINK( DocumentTimerManager, DoIdleJobs, Timer*, pTimer ) { #ifdef TIMELOG static ::rtl::Logfile* pModLogFile = 0; diff --git a/sw/source/core/inc/DocumentTimerManager.hxx b/sw/source/core/inc/DocumentTimerManager.hxx index 878c39b..42351cc 100644 --- a/sw/source/core/inc/DocumentTimerManager.hxx +++ b/sw/source/core/inc/DocumentTimerManager.hxx @@ -60,7 +60,7 @@ private: bool mbStartIdleTimer; //< idle timer mode start/stop sal_Int32 mIdleBlockCount; - Idle maIdle; + Timer maIdleTimer; }; } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
