| Index: runtime/vm/timer.h
|
| ===================================================================
|
| --- runtime/vm/timer.h (revision 33660)
|
| +++ runtime/vm/timer.h (working copy)
|
| @@ -109,18 +109,10 @@
|
| DISALLOW_COPY_AND_ASSIGN(TimerList);
|
| };
|
|
|
| -// Timer Usage.
|
| -#define START_TIMER(name) \
|
| - Isolate::Current()->timer_list().name().Start();
|
| -
|
| -#define STOP_TIMER(name) \
|
| - Isolate::Current()->timer_list().name().Stop();
|
| -
|
| // The class TimerScope is used to start and stop a timer within a scope.
|
| // It is used as follows:
|
| // {
|
| -// TIMERSCOPE(name_of_timer);
|
| -// ....
|
| +// TimerScope timer(FLAG_name_of_flag, timer, isolate);
|
| // .....
|
| // code that needs to be timed.
|
| // ....
|
| @@ -146,16 +138,60 @@
|
| }
|
|
|
| private:
|
| - bool flag_;
|
| + const bool flag_;
|
| bool nested_;
|
| - Timer* timer_;
|
| + Timer* const timer_;
|
| +
|
| + DISALLOW_ALLOCATION();
|
| DISALLOW_COPY_AND_ASSIGN(TimerScope);
|
| };
|
|
|
| -#define TIMERSCOPE(name) \
|
| - TimerScope vm_internal_timer_(true, \
|
| - &(Isolate::Current()->timer_list().name()))
|
|
|
| +class PauseTimerScope : public StackResource {
|
| + public:
|
| + PauseTimerScope(bool flag, Timer* timer, BaseIsolate* isolate = NULL)
|
| + : StackResource(isolate), flag_(flag), nested_(false), timer_(timer) {
|
| + if (flag_) {
|
| + if (timer_->running()) {
|
| + timer_->Stop();
|
| + } else {
|
| + nested_ = true;
|
| + }
|
| + }
|
| + }
|
| + ~PauseTimerScope() {
|
| + if (flag_) {
|
| + if (!nested_) {
|
| + timer_->Start();
|
| + }
|
| + }
|
| + }
|
| +
|
| + private:
|
| + const bool flag_;
|
| + bool nested_;
|
| + Timer* const timer_;
|
| +
|
| + DISALLOW_ALLOCATION();
|
| + DISALLOW_COPY_AND_ASSIGN(PauseTimerScope);
|
| +};
|
| +
|
| +
|
| +// Macros to deal with named timers in the isolate.
|
| +#define START_TIMER(isolate, name) \
|
| +isolate->timer_list().name().Start();
|
| +
|
| +#define STOP_TIMER(isolate, name) \
|
| +isolate->timer_list().name().Stop();
|
| +
|
| +#define TIMERSCOPE(isolate, name) \
|
| + TimerScope vm_internal_timer_(true, &(isolate->timer_list().name()), isolate)
|
| +
|
| +#define PAUSETIMERSCOPE(isolate, name) \
|
| +PauseTimerScope vm_internal_timer_(true, \
|
| + &(isolate->timer_list().name()), \
|
| + isolate)
|
| +
|
| } // namespace dart
|
|
|
| #endif // VM_TIMER_H_
|
|
|