| Index: src/counters.h
|
| diff --git a/src/counters.h b/src/counters.h
|
| index 91ad1edf15ccfb8ba03e9b87f20fd3bfcb7e3617..4415250b24803719f8b324711ca6d4ec8cfc696b 100644
|
| --- a/src/counters.h
|
| +++ b/src/counters.h
|
| @@ -488,6 +488,7 @@ struct RuntimeCallCounter {
|
| explicit RuntimeCallCounter(const char* name) : name(name) {}
|
| V8_NOINLINE void Reset();
|
| V8_NOINLINE void Dump(v8::tracing::TracedValue* value);
|
| + void Add(RuntimeCallCounter* other);
|
|
|
| const char* name;
|
| int64_t count = 0;
|
| @@ -537,6 +538,8 @@ class RuntimeCallTimer {
|
| timer_.Restart();
|
| }
|
|
|
| + const char* name() { return counter_->name; }
|
| +
|
| RuntimeCallCounter* counter_ = nullptr;
|
| base::AtomicValue<RuntimeCallTimer*> parent_;
|
| base::ElapsedTimer timer_;
|
| @@ -724,8 +727,14 @@ class RuntimeCallTimer {
|
| V(Map_TransitionToDataProperty) \
|
| V(Object_DeleteProperty) \
|
| V(OptimizeCode) \
|
| - V(ParseProgram) \
|
| + V(ParseArrowFunctionLiteral) \
|
| + V(ParseEval) \
|
| V(ParseFunction) \
|
| + V(ParseFunctionLiteral) \
|
| + V(ParseProgram) \
|
| + V(PreParseArrowFunctionLiteral) \
|
| + V(PreParseNoVariableResolution) \
|
| + V(PreParseWithVariableResolution) \
|
| V(PropertyCallback) \
|
| V(PrototypeMap_TransitionToAccessorProperty) \
|
| V(PrototypeMap_TransitionToDataProperty) \
|
| @@ -803,7 +812,7 @@ class RuntimeCallTimer {
|
| V(StoreIC_StoreTransitionDH) \
|
| V(StoreIC_StoreViaSetter)
|
|
|
| -class RuntimeCallStats {
|
| +class RuntimeCallStats : public ZoneObject {
|
| public:
|
| typedef RuntimeCallCounter RuntimeCallStats::*CounterId;
|
|
|
| @@ -828,6 +837,8 @@ class RuntimeCallStats {
|
| FOR_EACH_HANDLER_COUNTER(CALL_BUILTIN_COUNTER)
|
| #undef CALL_BUILTIN_COUNTER
|
|
|
| + static const CounterId counters[];
|
| +
|
| // Starting measuring the time for a function. This will establish the
|
| // connection to the parent counter for properly calculating the own times.
|
| static void Enter(RuntimeCallStats* stats, RuntimeCallTimer* timer,
|
| @@ -844,6 +855,8 @@ class RuntimeCallStats {
|
| CounterId counter_id);
|
|
|
| void Reset();
|
| + // Add all entries from another stats object.
|
| + void Add(RuntimeCallStats* other);
|
| void Print(std::ostream& os);
|
| V8_NOINLINE void Dump(v8::tracing::TracedValue* value);
|
|
|
| @@ -862,17 +875,17 @@ class RuntimeCallStats {
|
| bool in_use_;
|
| };
|
|
|
| -#define TRACE_RUNTIME_CALL_STATS(isolate, counter_name) \
|
| - do { \
|
| - if (V8_UNLIKELY(FLAG_runtime_stats)) { \
|
| - RuntimeCallStats::CorrectCurrentCounterId( \
|
| - isolate->counters()->runtime_call_stats(), \
|
| - &RuntimeCallStats::counter_name); \
|
| - } \
|
| +#define CHANGE_CURRENT_RUNTIME_COUNTER(runtime_call_stats, counter_name) \
|
| + do { \
|
| + if (V8_UNLIKELY(FLAG_runtime_stats)) { \
|
| + RuntimeCallStats::CorrectCurrentCounterId( \
|
| + runtime_call_stats, &RuntimeCallStats::counter_name); \
|
| + } \
|
| } while (false)
|
|
|
| -#define TRACE_HANDLER_STATS(isolate, counter_name) \
|
| - TRACE_RUNTIME_CALL_STATS(isolate, Handler_##counter_name)
|
| +#define TRACE_HANDLER_STATS(isolate, counter_name) \
|
| + CHANGE_CURRENT_RUNTIME_COUNTER(isolate->counters()->runtime_call_stats(), \
|
| + Handler_##counter_name)
|
|
|
| #define HISTOGRAM_RANGE_LIST(HR) \
|
| /* Generic range histograms */ \
|
| @@ -1295,23 +1308,23 @@ class RuntimeCallTimerScope {
|
| // stats are disabled and the isolate is not directly available.
|
| inline RuntimeCallTimerScope(HeapObject* heap_object,
|
| RuntimeCallStats::CounterId counter_id);
|
| + inline RuntimeCallTimerScope(RuntimeCallStats* stats,
|
| + RuntimeCallStats::CounterId counter_id);
|
|
|
| inline ~RuntimeCallTimerScope() {
|
| - if (V8_UNLIKELY(isolate_ != nullptr)) {
|
| - RuntimeCallStats::Leave(isolate_->counters()->runtime_call_stats(),
|
| - &timer_);
|
| + if (V8_UNLIKELY(stats_ != nullptr)) {
|
| + RuntimeCallStats::Leave(stats_, &timer_);
|
| }
|
| }
|
|
|
| private:
|
| - V8_INLINE void Initialize(Isolate* isolate,
|
| + V8_INLINE void Initialize(RuntimeCallStats* stats,
|
| RuntimeCallStats::CounterId counter_id) {
|
| - isolate_ = isolate;
|
| - RuntimeCallStats::Enter(isolate_->counters()->runtime_call_stats(), &timer_,
|
| - counter_id);
|
| + stats_ = stats;
|
| + RuntimeCallStats::Enter(stats_, &timer_, counter_id);
|
| }
|
|
|
| - Isolate* isolate_ = nullptr;
|
| + RuntimeCallStats* stats_ = nullptr;
|
| RuntimeCallTimer timer_;
|
| };
|
|
|
|
|