diff --git a/src/kits/tracker/TaskLoop.cpp b/src/kits/tracker/TaskLoop.cpp index c87fdc310f..1027faf8af 100644 --- a/src/kits/tracker/TaskLoop.cpp +++ b/src/kits/tracker/TaskLoop.cpp @@ -39,19 +39,104 @@ All rights reserved. #include "TaskLoop.h" +const float kTaskOverhead = 0.01f; + // this should really be specified by the task itself +const float kIdleTreshold = 0.15f; + +const bigtime_t kInfinity = B_INFINITE_TIMEOUT; + + +static bigtime_t +ActivityLevel() +{ + // stolen from roster server + bigtime_t time = 0; + system_info sinfo; + get_system_info(&sinfo); + + cpu_info* cpuInfos = new cpu_info[sinfo.cpu_count]; + get_cpu_info(0, sinfo.cpu_count, cpuInfos); + + for (uint32 index = 0; index < sinfo.cpu_count; index++) + time += cpuInfos[index].active_time; + + delete[] cpuInfos; + return time / ((bigtime_t) sinfo.cpu_count); +} + + +class AccumulatedOneShotDelayedTask : public OneShotDelayedTask { + // supports accumulating functors +public: + AccumulatedOneShotDelayedTask(AccumulatingFunctionObject* functor, + bigtime_t delay, bigtime_t maxAccumulatingTime = 0, + int32 maxAccumulateCount = 0) + : + OneShotDelayedTask(functor, delay), + maxAccumulateCount(maxAccumulateCount), + accumulateCount(1), + maxAccumulatingTime(maxAccumulatingTime), + initialTime(system_time()) + { + } + + bool CanAccumulate(const AccumulatingFunctionObject* accumulateThis) const + { + if (maxAccumulateCount && accumulateCount > maxAccumulateCount) + // don't accumulate if too may accumulated already + return false; + + if (maxAccumulatingTime && system_time() > initialTime + + maxAccumulatingTime) { + // don't accumulate if too late past initial task + return false; + } + + return static_cast(fFunctor)-> + CanAccumulate(accumulateThis); + } + + virtual void Accumulate(AccumulatingFunctionObject* accumulateThis, + bigtime_t delay) + { + fRunAfter = system_time() + delay; + // reset fRunAfter + accumulateCount++; + static_cast(fFunctor)-> + Accumulate(accumulateThis); + } + +private: + int32 maxAccumulateCount; + int32 accumulateCount; + bigtime_t maxAccumulatingTime; + bigtime_t initialTime; +}; + + +// #pragma mark - DelayedTask + + DelayedTask::DelayedTask(bigtime_t delay) - : fRunAfter(system_time() + delay) + : + fRunAfter(system_time() + delay) { } + DelayedTask::~DelayedTask() { } + +// #pragma mark - OneShotDelayedTask + + OneShotDelayedTask::OneShotDelayedTask(FunctionObject* functor, bigtime_t delay) - : DelayedTask(delay), - fFunctor(functor) + : + DelayedTask(delay), + fFunctor(functor) { } @@ -73,12 +158,16 @@ OneShotDelayedTask::RunIfNeeded(bigtime_t currentTime) } +// #pragma mark - PeriodicDelayedTask + + PeriodicDelayedTask::PeriodicDelayedTask( FunctionObjectWithResult* functor, bigtime_t initialDelay, bigtime_t period) - : DelayedTask(initialDelay), - fPeriod(period), - fFunctor(functor) + : + DelayedTask(initialDelay), + fPeriod(period), + fFunctor(functor) { } @@ -104,8 +193,9 @@ PeriodicDelayedTask::RunIfNeeded(bigtime_t currentTime) PeriodicDelayedTaskWithTimeout::PeriodicDelayedTaskWithTimeout( FunctionObjectWithResult* functor, bigtime_t initialDelay, bigtime_t period, bigtime_t timeout) - : PeriodicDelayedTask(functor, initialDelay, period), - fTimeoutAfter(system_time() + timeout) + : + PeriodicDelayedTask(functor, initialDelay, period), + fTimeoutAfter(system_time() + timeout) { } @@ -128,13 +218,17 @@ PeriodicDelayedTaskWithTimeout::RunIfNeeded(bigtime_t currentTime) RunWhenIdleTask::RunWhenIdleTask(FunctionObjectWithResult* functor, bigtime_t initialDelay, bigtime_t idleFor, bigtime_t heartBeat) - : PeriodicDelayedTask(functor, initialDelay, heartBeat), - fIdleFor(idleFor), - fState(kInitialDelay) + : + PeriodicDelayedTask(functor, initialDelay, heartBeat), + fIdleFor(idleFor), + fState(kInitialDelay) { } +// #pragma mark - RunWhenIdleTask + + RunWhenIdleTask::~RunWhenIdleTask() { } @@ -147,8 +241,8 @@ RunWhenIdleTask::RunIfNeeded(bigtime_t currentTime) return false; fRunAfter = currentTime + fPeriod; - // PRINT(("runWhenIdle: runAfter %Ld, current time %Ld, period %Ld\n", - // fRunAfter, currentTime, fPeriod)); +// PRINT(("runWhenIdle: runAfter %Ld, current time %Ld, period %Ld\n", +// fRunAfter, currentTime, fPeriod)); if (fState == kInitialDelay) { // PRINT(("run when idle task - past intial delay\n")); @@ -161,29 +255,11 @@ RunWhenIdleTask::RunIfNeeded(bigtime_t currentTime) (*fFunctor)(); return fFunctor->Result(); } + return false; } -static bigtime_t -ActivityLevel() -{ - // stolen from roster server - bigtime_t time = 0; - system_info sinfo; - get_system_info(&sinfo); - - cpu_info* cpuInfos = new cpu_info[sinfo.cpu_count]; - get_cpu_info(0, sinfo.cpu_count, cpuInfos); - - for (uint32 index = 0; index < sinfo.cpu_count; index++) - time += cpuInfos[index].active_time; - - delete[] cpuInfos; - return time / ((bigtime_t) sinfo.cpu_count); -} - - void RunWhenIdleTask::ResetIdleTimer(bigtime_t currentTime) { @@ -193,9 +269,6 @@ RunWhenIdleTask::ResetIdleTimer(bigtime_t currentTime) fState = kInitialIdleWait; } -const float kTaskOverhead = 0.01f; - // this should really be specified by the task itself -const float kIdleTreshold = 0.15f; bool RunWhenIdleTask::IsIdle(bigtime_t currentTime, float taskOverhead) @@ -246,9 +319,13 @@ RunWhenIdleTask::StillIdle(bigtime_t currentTime) } +// #pragma mark - TaskLoop + + TaskLoop::TaskLoop(bigtime_t heartBeat) - : fTaskList(10, true), - fHeartBeat(heartBeat) + : + fTaskList(10, true), + fHeartBeat(heartBeat) { } @@ -297,51 +374,8 @@ TaskLoop::RunWhenIdle(FunctionObjectWithResult* functor, } -class AccumulatedOneShotDelayedTask : public OneShotDelayedTask { - // supports accumulating functors -public: - AccumulatedOneShotDelayedTask(AccumulatingFunctionObject* functor, - bigtime_t delay, bigtime_t maxAccumulatingTime = 0, - int32 maxAccumulateCount = 0) - : OneShotDelayedTask(functor, delay), - maxAccumulateCount(maxAccumulateCount), - accumulateCount(1), - maxAccumulatingTime(maxAccumulatingTime), - initialTime(system_time()) - {} +// #pragma mark - TaskLoop - bool CanAccumulate(const AccumulatingFunctionObject* accumulateThis) const - { - if (maxAccumulateCount && accumulateCount > maxAccumulateCount) - // don't accumulate if too may accumulated already - return false; - - if (maxAccumulatingTime && system_time() > initialTime - + maxAccumulatingTime) { - // don't accumulate if too late past initial task - return false; - } - - return static_cast(fFunctor)-> - CanAccumulate(accumulateThis); - } - - virtual void Accumulate(AccumulatingFunctionObject* accumulateThis, - bigtime_t delay) - { - fRunAfter = system_time() + delay; - // reset fRunAfter - accumulateCount++; - static_cast(fFunctor)-> - Accumulate(accumulateThis); - } - -private: - int32 maxAccumulateCount; - int32 accumulateCount; - bigtime_t maxAccumulatingTime; - bigtime_t initialTime; -}; void TaskLoop::AccumulatedRunLater(AccumulatingFunctionObject* functor, @@ -391,7 +425,6 @@ TaskLoop::Pulse() return count == 0 && !KeepPulsingWhenEmpty(); } -const bigtime_t kInfinity = B_INFINITE_TIMEOUT; bigtime_t TaskLoop::LatestRunTime() const @@ -448,11 +481,15 @@ TaskLoop::AddTask(DelayedTask* task) } +// #pragma mark - StandAloneTaskLoop + + StandAloneTaskLoop::StandAloneTaskLoop(bool keepThread, bigtime_t heartBeat) - : TaskLoop(heartBeat), - fNeedToQuit(false), - fScanThread(-1), - fKeepThread(keepThread) + : + TaskLoop(heartBeat), + fNeedToQuit(false), + fScanThread(-1), + fKeepThread(keepThread) { } @@ -486,6 +523,7 @@ StandAloneTaskLoop::~StandAloneTaskLoop() } } + void StandAloneTaskLoop::StartPulsingIfNeeded() { @@ -498,12 +536,14 @@ StandAloneTaskLoop::StartPulsingIfNeeded() } } + bool StandAloneTaskLoop::KeepPulsingWhenEmpty() const { return fKeepThread; } + status_t StandAloneTaskLoop::RunBinder(void* castToThis) { @@ -512,6 +552,7 @@ StandAloneTaskLoop::RunBinder(void* castToThis) return B_OK; } + void StandAloneTaskLoop::Run() { @@ -550,6 +591,7 @@ StandAloneTaskLoop::Run() } } + void StandAloneTaskLoop::AddTask(DelayedTask* delayedTask) { @@ -567,10 +609,15 @@ StandAloneTaskLoop::AddTask(DelayedTask* delayedTask) } } + +// #pragma mark - PiggybackTaskLoop + + PiggybackTaskLoop::PiggybackTaskLoop(bigtime_t heartBeat) - : TaskLoop(heartBeat), - fNextHeartBeatTime(0), - fPulseMe(false) + : + TaskLoop(heartBeat), + fNextHeartBeatTime(0), + fPulseMe(false) { } @@ -579,6 +626,7 @@ PiggybackTaskLoop::~PiggybackTaskLoop() { } + void PiggybackTaskLoop::PulseMe() { @@ -594,12 +642,14 @@ PiggybackTaskLoop::PulseMe() } } + bool PiggybackTaskLoop::KeepPulsingWhenEmpty() const { return false; } + void PiggybackTaskLoop::StartPulsingIfNeeded() { diff --git a/src/kits/tracker/TaskLoop.h b/src/kits/tracker/TaskLoop.h index e5c0014d19..cca285273e 100644 --- a/src/kits/tracker/TaskLoop.h +++ b/src/kits/tracker/TaskLoop.h @@ -31,8 +31,8 @@ of Be Incorporated in the United States and other countries. Other brand product names are registered trademarks or trademarks of their respective holders. All rights reserved. */ -#ifndef __TASK_LOOP__ -#define __TASK_LOOP__ +#ifndef _TASK_LOOP_H +#define _TASK_LOOP_H // Delayed Tasks, Periodic Delayed Tasks, Periodic Delayed Tasks with timeout, @@ -40,9 +40,9 @@ All rights reserved. #include +#include #include "FunctionObject.h" -#include "ObjectList.h" namespace BPrivate { @@ -259,4 +259,5 @@ DelayedTask::RunAfterTime() const using namespace BPrivate; -#endif // __TASK_LOOP__ + +#endif // _TASK_LOOP_H diff --git a/src/kits/tracker/TemplatesMenu.cpp b/src/kits/tracker/TemplatesMenu.cpp index eda9cedc97..4501195963 100644 --- a/src/kits/tracker/TemplatesMenu.cpp +++ b/src/kits/tracker/TemplatesMenu.cpp @@ -64,10 +64,15 @@ const char* kTemplatesDirectory = "Tracker/Tracker New Templates"; } // namespace BPrivate + +// #pragma mark - TemplatesMenu + + TemplatesMenu::TemplatesMenu(const BMessenger &target, const char* label) - : BMenu(label), - fTarget(target), - fOpenItem(NULL) + : + BMenu(label), + fTarget(target), + fOpenItem(NULL) { } @@ -118,19 +123,19 @@ TemplatesMenu::UpdateMenuState() bool TemplatesMenu::BuildMenu(bool addItems) { - // Clear everything... + // clear everything... fOpenItem = NULL; int32 count = CountItems(); while (count--) delete RemoveItem((int32)0); - // Add the Folder + // add the folder IconMenuItem* menuItem = new IconMenuItem(B_TRANSLATE("New folder"), new BMessage(kNewFolder), B_DIR_MIMETYPE, B_MINI_ICON); AddItem(menuItem); menuItem->SetShortcut('N', 0); - // The Templates folder + // the templates folder BPath path; find_directory (B_USER_SETTINGS_DIRECTORY, &path, true); path.Append(kTemplatesDirectory); @@ -176,16 +181,17 @@ TemplatesMenu::BuildMenu(bool addItems) AddSeparatorItem(); - // This is the message sent to open the templates folder. + // this is the message sent to open the templates folder BMessage* message = new BMessage(B_REFS_RECEIVED); entry_ref dirRef; if (templatesDir.GetEntry(&entry) == B_OK) entry.GetRef(&dirRef); + message->AddRef("refs", &dirRef); - // Add item to show templates folder. - fOpenItem = new BMenuItem(B_TRANSLATE("Edit templates" B_UTF8_ELLIPSIS), - message); + // add item to show templates folder + fOpenItem = new BMenuItem(B_TRANSLATE("Edit templates" B_UTF8_ELLIPSIS), + message); AddItem(fOpenItem); if (dirRef == entry_ref()) fOpenItem->SetEnabled(false); diff --git a/src/kits/tracker/TemplatesMenu.h b/src/kits/tracker/TemplatesMenu.h index 5f453ccb93..66fb328c3c 100644 --- a/src/kits/tracker/TemplatesMenu.h +++ b/src/kits/tracker/TemplatesMenu.h @@ -31,8 +31,8 @@ of Be Incorporated in the United States and other countries. Other brand product names are registered trademarks or trademarks of their respective holders. All rights reserved. */ -#ifndef __TEMPLATES_MENU__ -#define __TEMPLATES_MENU__ +#ifndef _TEMPLATES_MENU_H +#define _TEMPLATES_MENU_H #include @@ -45,13 +45,13 @@ extern const char* kTemplatesMenuName; class TemplatesMenu : public BMenu { public: - TemplatesMenu(const BMessenger& target, const char* label); - virtual ~TemplatesMenu(); + TemplatesMenu(const BMessenger& target, const char* label); + virtual ~TemplatesMenu(); - virtual void AttachedToWindow(); + virtual void AttachedToWindow(); - virtual status_t SetTargetForItems(BHandler*); - virtual status_t SetTargetForItems(BMessenger); + virtual status_t SetTargetForItems(BHandler*); + virtual status_t SetTargetForItems(BMessenger); void UpdateMenuState(); @@ -66,4 +66,5 @@ private: using namespace BPrivate; -#endif // __TEMPLATES_MENU__ + +#endif // _TEMPLATES_MENU_H