Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Side by Side Diff: src/counters.h

Issue 2313193002: [Tracing] Fix runtime call stats tracing for GC. (Closed)
Patch Set: Remove duplicate runtime call stats in counters Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_COUNTERS_H_ 5 #ifndef V8_COUNTERS_H_
6 #define V8_COUNTERS_H_ 6 #define V8_COUNTERS_H_
7 7
8 #include "include/v8.h" 8 #include "include/v8.h"
9 #include "src/allocation.h" 9 #include "src/allocation.h"
10 #include "src/base/platform/elapsed-timer.h" 10 #include "src/base/platform/elapsed-timer.h"
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 private: 801 private:
802 std::stringstream buffer_; 802 std::stringstream buffer_;
803 std::unique_ptr<char[]> buffer_c_str_; 803 std::unique_ptr<char[]> buffer_c_str_;
804 size_t len_ = 0; 804 size_t len_ = 0;
805 // Counter to track recursive time events. 805 // Counter to track recursive time events.
806 RuntimeCallTimer* current_timer_ = NULL; 806 RuntimeCallTimer* current_timer_ = NULL;
807 // Used to track nested tracing scopes. 807 // Used to track nested tracing scopes.
808 bool in_use_; 808 bool in_use_;
809 }; 809 };
810 810
811 #define TRACE_RUNTIME_CALL_STATS(isolate, counter_name) \ 811 #define TRACE_RUNTIME_CALL_STATS(isolate, counter_name) \
812 do { \ 812 do { \
813 if (FLAG_runtime_call_stats) { \ 813 if (V8_UNLIKELY(TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_ENABLED() || \
814 RuntimeCallStats::CorrectCurrentCounterId( \ 814 FLAG_runtime_call_stats)) { \
815 isolate->counters()->runtime_call_stats(), \ 815 RuntimeCallStats::CorrectCurrentCounterId( \
816 &RuntimeCallStats::counter_name); \ 816 isolate->counters()->runtime_call_stats(), \
817 } \ 817 &RuntimeCallStats::counter_name); \
818 if (V8_UNLIKELY(TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_ENABLED())) { \ 818 } \
819 RuntimeCallStats::CorrectCurrentCounterId( \
820 isolate->counters()->tracing_runtime_call_stats(), \
821 &RuntimeCallStats::counter_name); \
822 } \
823 } while (false) 819 } while (false)
824 820
825 #define TRACE_HANDLER_STATS(isolate, counter_name) \ 821 #define TRACE_HANDLER_STATS(isolate, counter_name) \
826 TRACE_RUNTIME_CALL_STATS(isolate, Handler_##counter_name) 822 TRACE_RUNTIME_CALL_STATS(isolate, Handler_##counter_name)
827 823
828 #define HISTOGRAM_RANGE_LIST(HR) \ 824 #define HISTOGRAM_RANGE_LIST(HR) \
829 /* Generic range histograms */ \ 825 /* Generic range histograms */ \
830 HR(detached_context_age_in_gc, V8.DetachedContextAgeInGC, 0, 20, 21) \ 826 HR(detached_context_age_in_gc, V8.DetachedContextAgeInGC, 0, 20, 21) \
831 HR(gc_idle_time_allotted_in_ms, V8.GCIdleTimeAllottedInMS, 0, 10000, 101) \ 827 HR(gc_idle_time_allotted_in_ms, V8.GCIdleTimeAllottedInMS, 0, 10000, 101) \
832 HR(gc_idle_time_limit_overshot, V8.GCIdleTimeLimit.Overshot, 0, 10000, 101) \ 828 HR(gc_idle_time_limit_overshot, V8.GCIdleTimeLimit.Overshot, 0, 10000, 101) \
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 #define COUNTER_ID(name) kCountOfCODE_AGE__##name, \ 1159 #define COUNTER_ID(name) kCountOfCODE_AGE__##name, \
1164 kSizeOfCODE_AGE__##name, 1160 kSizeOfCODE_AGE__##name,
1165 CODE_AGE_LIST_COMPLETE(COUNTER_ID) 1161 CODE_AGE_LIST_COMPLETE(COUNTER_ID)
1166 #undef COUNTER_ID 1162 #undef COUNTER_ID
1167 stats_counter_count 1163 stats_counter_count
1168 }; 1164 };
1169 1165
1170 void ResetCounters(); 1166 void ResetCounters();
1171 void ResetHistograms(); 1167 void ResetHistograms();
1172 RuntimeCallStats* runtime_call_stats() { return &runtime_call_stats_; } 1168 RuntimeCallStats* runtime_call_stats() { return &runtime_call_stats_; }
1173 RuntimeCallStats* tracing_runtime_call_stats() {
1174 return &tracing_runtime_call_stats_;
1175 }
1176 1169
1177 private: 1170 private:
1178 #define HR(name, caption, min, max, num_buckets) Histogram name##_; 1171 #define HR(name, caption, min, max, num_buckets) Histogram name##_;
1179 HISTOGRAM_RANGE_LIST(HR) 1172 HISTOGRAM_RANGE_LIST(HR)
1180 #undef HR 1173 #undef HR
1181 1174
1182 #define HT(name, caption, max, res) HistogramTimer name##_; 1175 #define HT(name, caption, max, res) HistogramTimer name##_;
1183 HISTOGRAM_TIMER_LIST(HT) 1176 HISTOGRAM_TIMER_LIST(HT)
1184 #undef HT 1177 #undef HT
1185 1178
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC) 1221 FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC)
1229 #undef SC 1222 #undef SC
1230 1223
1231 #define SC(name) \ 1224 #define SC(name) \
1232 StatsCounter size_of_CODE_AGE_##name##_; \ 1225 StatsCounter size_of_CODE_AGE_##name##_; \
1233 StatsCounter count_of_CODE_AGE_##name##_; 1226 StatsCounter count_of_CODE_AGE_##name##_;
1234 CODE_AGE_LIST_COMPLETE(SC) 1227 CODE_AGE_LIST_COMPLETE(SC)
1235 #undef SC 1228 #undef SC
1236 1229
1237 RuntimeCallStats runtime_call_stats_; 1230 RuntimeCallStats runtime_call_stats_;
1238 RuntimeCallStats tracing_runtime_call_stats_;
1239 1231
1240 friend class Isolate; 1232 friend class Isolate;
1241 1233
1242 explicit Counters(Isolate* isolate); 1234 explicit Counters(Isolate* isolate);
1243 1235
1244 DISALLOW_IMPLICIT_CONSTRUCTORS(Counters); 1236 DISALLOW_IMPLICIT_CONSTRUCTORS(Counters);
1245 }; 1237 };
1246 1238
1247 // A RuntimeCallTimerScopes wraps around a RuntimeCallTimer to measure the 1239 // A RuntimeCallTimerScopes wraps around a RuntimeCallTimer to measure the
1248 // the time of C++ scope. 1240 // the time of C++ scope.
1249 class RuntimeCallTimerScope { 1241 class RuntimeCallTimerScope {
1250 public: 1242 public:
1251 inline RuntimeCallTimerScope(Isolate* isolate, 1243 inline RuntimeCallTimerScope(Isolate* isolate,
1252 RuntimeCallStats::CounterId counter_id) { 1244 RuntimeCallStats::CounterId counter_id);
1253 if (V8_UNLIKELY(FLAG_runtime_call_stats)) {
1254 isolate_ = isolate;
1255 RuntimeCallStats::Enter(isolate_->counters()->runtime_call_stats(),
1256 &timer_, counter_id);
1257 }
1258 if (V8_UNLIKELY(TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_ENABLED())) {
1259 isolate_for_tracing_ = isolate;
1260 RuntimeCallStats::Enter(
1261 isolate_for_tracing_->counters()->tracing_runtime_call_stats(),
1262 &trace_event_timer_, counter_id);
1263 }
1264 }
1265 // This constructor is here just to avoid calling GetIsolate() when the 1245 // This constructor is here just to avoid calling GetIsolate() when the
1266 // stats are disabled and the isolate is not directly available. 1246 // stats are disabled and the isolate is not directly available.
1267 inline RuntimeCallTimerScope(HeapObject* heap_object, 1247 inline RuntimeCallTimerScope(HeapObject* heap_object,
1268 RuntimeCallStats::CounterId counter_id); 1248 RuntimeCallStats::CounterId counter_id);
1269 1249
1270 inline ~RuntimeCallTimerScope() { 1250 inline ~RuntimeCallTimerScope() {
1271 if (V8_UNLIKELY(FLAG_runtime_call_stats)) { 1251 if (V8_UNLIKELY(isolate_ != nullptr)) {
1272 RuntimeCallStats::Leave(isolate_->counters()->runtime_call_stats(), 1252 RuntimeCallStats::Leave(isolate_->counters()->runtime_call_stats(),
1273 &timer_); 1253 &timer_);
1274 } 1254 }
1275 if (V8_UNLIKELY(isolate_for_tracing_ != nullptr)) {
1276 RuntimeCallStats::Leave(
1277 isolate_for_tracing_->counters()->tracing_runtime_call_stats(),
1278 &trace_event_timer_);
1279 isolate_for_tracing_ = nullptr;
1280 }
1281 } 1255 }
1282 1256
1283 private: 1257 private:
1284 Isolate* isolate_; 1258 Isolate* isolate_ = nullptr;
1285 // TODO(lpy): --runtime-call-stats and tracing should be mutually exclusive
1286 // with tracing taking precendence. We need to add checks, and use a single
1287 // isolate reference and a timer for both.
1288 Isolate* isolate_for_tracing_ = nullptr;
1289 RuntimeCallTimer timer_; 1259 RuntimeCallTimer timer_;
1290 RuntimeCallTimer trace_event_timer_;
1291 }; 1260 };
1292 1261
1293 } // namespace internal 1262 } // namespace internal
1294 } // namespace v8 1263 } // namespace v8
1295 1264
1296 #endif // V8_COUNTERS_H_ 1265 #endif // V8_COUNTERS_H_
OLDNEW
« no previous file with comments | « src/api.cc ('k') | src/counters-inl.h » ('j') | src/counters-inl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698