[Libreoffice-commits] core.git: Branch 'feature/priorities' - include/vcl vcl/source
Jennifer Liebel
jliebel94 at gmail.com
Tue Jan 20 04:51:54 PST 2015
include/vcl/idle.hxx | 23 +++++++++++++----------
vcl/source/app/idle.cxx | 29 +++++++++++++++++------------
2 files changed, 30 insertions(+), 22 deletions(-)
New commits:
commit bc637c2096621061d1a5dc37aaebc657f195ac7f
Author: Jennifer Liebel <jliebel94 at gmail.com>
Date: Tue Jan 20 12:42:43 2015 +0000
insert comments and corrected priority values
Change-Id: I2c73bb2b2edd3b830dad5d1f7d8f7bc72622b11c
diff --git a/include/vcl/idle.hxx b/include/vcl/idle.hxx
index 5a46462..0415575 100644
--- a/include/vcl/idle.hxx
+++ b/include/vcl/idle.hxx
@@ -27,18 +27,20 @@
struct ImplIdleData;
struct ImplSVData;
-// The timemarks behind the priorities is the catgorizing of timer to idle
+// The timemarks behind the priorities are need to change timer to idle. It is to convert
+// timeout values to priorities.
enum class IdlePriority {
- VCL_IDLE_PRIORITY_STARVATIONPROTECTION = -1, // Do not use this for normal prioritizing
- VCL_IDLE_PRIORITY_HIGHEST = 0, // -> 0ms
- VCL_IDLE_PRIORITY_HIGH = 1, // -> 1ms
- VCL_IDLE_PRIORITY_DEFAULT = 1, // -> 1ms
- VCL_IDLE_PRIORITY_REPAINT = 2, // -> 30ms
+ VCL_IDLE_PRIORITY_STARVATIONPROTECTION = -1, // Do not use this for normal prioritizing!
+
+ VCL_IDLE_PRIORITY_HIGHEST = 0, // -> 0ms
+ VCL_IDLE_PRIORITY_HIGH = 1, // -> 1ms
+ VCL_IDLE_PRIORITY_DEFAULT = 1, // -> 1ms
+ VCL_IDLE_PRIORITY_REPAINT = 2, // -> 30ms
VCL_IDLE_PRIORITY_RESIZE = 3, // -> 50ms
VCL_IDLE_PRIORITY_MEDIUM = 3, // -> 50ms
- VCL_IDLE_PRIORITY_LOW = 5, // -> 100ms
- VCL_IDLE_PRIORITY_LOWER = 6, // -> 200ms
- VCL_IDLE_PRIORITY_LOWEST = 7 // -> 400ms
+ VCL_IDLE_PRIORITY_LOW = 4, // -> 100ms
+ VCL_IDLE_PRIORITY_LOWER = 5, // -> 200ms
+ VCL_IDLE_PRIORITY_LOWEST = 6 // -> 400ms
};
@@ -65,8 +67,9 @@ public:
/// Make it possible to associate a callback with this idle handler
/// of course, you can also sub-class and override 'DoIdle'
void SetIdleHdl( const Link& rLink ) { maIdleHdl = rLink; }
- const Link& GetIdleHdl() const { return maIdleHdl; }
+ const Link& GetIdleHdl() const { return maIdleHdl; }
+ // Call idle handler
virtual void DoIdle();
void Start();
diff --git a/vcl/source/app/idle.cxx b/vcl/source/app/idle.cxx
index 6ad03d2..37299de 100644
--- a/vcl/source/app/idle.cxx
+++ b/vcl/source/app/idle.cxx
@@ -26,9 +26,9 @@
struct ImplIdleData
{
- ImplIdleData* mpNext; // Pointer to the next Instance
- Idle* mpIdle; // Pointer to VCL Idle instance
- bool mbDelete; // Was Idle deleted during Update()?
+ ImplIdleData* mpNext; // Pointer to the next Instance
+ Idle* mpIdle; // Pointer to VCL Idle instance
+ bool mbDelete; // Was Idle deleted during Update()?
bool mbInIdle; // Are we in a idle handler?
void Invoke()
@@ -60,6 +60,9 @@ struct ImplIdleData
else
{
// Find the highest priority.
+ // If the priority of the current idle is higher (numerical value is lower) than
+ // the priority of the most urgent, the priority of most urgent is increased and
+ // the current is the new most urgent. So starving is impossible.
if ( p->mpIdle->GetPriority() < pMostUrgent->mpIdle->GetPriority() )
{
IncreasePriority(pMostUrgent->mpIdle);
@@ -77,7 +80,8 @@ struct ImplIdleData
{
switch(pIdle->GetPriority())
{
- // Increase priority based on their current priority
+ // Increase priority based on their current priority;
+ // (so don't use VCL_IDLE_PRIORITY_STARVATIONPROTECTION for default-priority!)
case IdlePriority::VCL_IDLE_PRIORITY_STARVATIONPROTECTION:
break;
// If already highest priority -> extra state for starving tasks
@@ -132,10 +136,11 @@ void Idle::ImplDeInitIdle()
void Idle::ProcessAllIdleHandlers()
{
- // process all pending Idle
+ // process all pending idle
ImplIdleData* pIdleData = NULL;
ImplIdleData* pPrevIdleData = NULL;
ImplSVData* pSVData = ImplGetSVData();
+ // timer can interrupt idle
while (!Timer::TimerReady() && (pIdleData = ImplIdleData::GetFirstIdle()))
{
pIdleData->Invoke();
@@ -144,7 +149,7 @@ void Idle::ProcessAllIdleHandlers()
pIdleData = pSVData->mpFirstIdleData;
while ( pIdleData )
{
- // Was Idle destroyed in the meantime?
+ // Was idle destroyed in the meantime?
if ( pIdleData->mbDelete )
{
if ( pPrevIdleData )
@@ -188,8 +193,8 @@ void Idle::Start()
if ( !mpIdleData )
{
// insert Idle
- mpIdleData = new ImplIdleData;
- mpIdleData->mpIdle = this;
+ mpIdleData = new ImplIdleData;
+ mpIdleData->mpIdle = this;
mpIdleData->mbInIdle = false;
// insert last due to SFX!
@@ -222,10 +227,10 @@ Idle& Idle::operator=( const Idle& rIdle )
if ( IsActive() )
Stop();
- mbActive = false;
- mePriority = rIdle.mePriority;
+ mbActive = false;
+ mePriority = rIdle.mePriority;
meDefaultPriority = rIdle.meDefaultPriority;
- maIdleHdl = rIdle.maIdleHdl;
+ maIdleHdl = rIdle.maIdleHdl;
if ( rIdle.IsActive() )
Start();
@@ -260,4 +265,4 @@ Idle::~Idle()
mpIdleData->mpIdle = NULL;
}
}
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
More information about the Libreoffice-commits
mailing list