Temporarily allow HistogramTimerScopes to be nested
R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/47513015 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17425 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
31865699ac
commit
e8a3044f2d
@ -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
|
||||
};
|
||||
|
||||
|
||||
|
@ -565,7 +565,9 @@ Parser::Parser(CompilationInfo* info)
|
||||
|
||||
|
||||
FunctionLiteral* Parser::ParseProgram() {
|
||||
HistogramTimerScope timer_scope(isolate()->counters()->parse());
|
||||
// TODO(bmeurer): We temporarily need to pass allow_nesting = true here,
|
||||
// see comment for HistogramTimerScope class.
|
||||
HistogramTimerScope timer_scope(isolate()->counters()->parse(), true);
|
||||
Handle<String> source(String::cast(script_->source()));
|
||||
isolate()->counters()->total_parse_size()->Increment(source->length());
|
||||
ElapsedTimer timer;
|
||||
|
Loading…
Reference in New Issue
Block a user