| Index: src/counters.h
|
| diff --git a/src/counters.h b/src/counters.h
|
| index 93911d721615dfd81e3198cd70074927a4cfa01f..821c25f8cec1c2a3391ddcc297a22e731b6552fb 100644
|
| --- a/src/counters.h
|
| +++ b/src/counters.h
|
| @@ -259,22 +259,51 @@ class HistogramTimer : public Histogram {
|
| return Enabled() && timer_.IsStarted();
|
| }
|
|
|
| + // TODO(bmeurer): Remove this when HistogramTimerScope is fixed.
|
| +#ifdef DEBUG
|
| + ElapsedTimer* timer() { return &timer_; }
|
| +#endif
|
| +
|
| private:
|
| ElapsedTimer timer_;
|
| };
|
|
|
| // Helper class for scoping a HistogramTimer.
|
| +// TODO(bmeurer): The ifdeffery is an ugly hack around the fact that the
|
| +// Parser is currently reentrant (when it throws an error, we call back
|
| +// into JavaScript and all bets are off), but ElapsedTimer is not
|
| +// reentry-safe. Fix this properly and remove |allow_nesting|.
|
| class HistogramTimerScope BASE_EMBEDDED {
|
| public:
|
| - explicit HistogramTimerScope(HistogramTimer* timer) :
|
| - timer_(timer) {
|
| + explicit HistogramTimerScope(HistogramTimer* timer,
|
| + bool allow_nesting = false)
|
| +#ifdef DEBUG
|
| + : timer_(timer),
|
| + skipped_timer_start_(false) {
|
| + if (timer_->timer()->IsStarted() && allow_nesting) {
|
| + skipped_timer_start_ = true;
|
| + } else {
|
| + timer_->Start();
|
| + }
|
| +#else
|
| + : timer_(timer) {
|
| timer_->Start();
|
| +#endif
|
| }
|
| ~HistogramTimerScope() {
|
| +#ifdef DEBUG
|
| + if (!skipped_timer_start_) {
|
| + timer_->Stop();
|
| + }
|
| +#else
|
| timer_->Stop();
|
| +#endif
|
| }
|
| private:
|
| HistogramTimer* timer_;
|
| +#ifdef DEBUG
|
| + bool skipped_timer_start_;
|
| +#endif
|
| };
|
|
|
|
|
|
|