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

Side by Side Diff: src/counters.h

Issue 790413004: Implement AggregatableHistogramTimer and use it to measure how much time (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Make windows compiler happy. Created 5 years, 11 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
« no previous file with comments | « src/compiler.cc ('k') | src/counters.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
11 #include "src/base/platform/time.h"
11 #include "src/globals.h" 12 #include "src/globals.h"
12 #include "src/objects.h" 13 #include "src/objects.h"
13 14
14 namespace v8 { 15 namespace v8 {
15 namespace internal { 16 namespace internal {
16 17
17 // StatsCounters is an interface for plugging into external 18 // StatsCounters is an interface for plugging into external
18 // counters for monitoring. Counters can be looked up and 19 // counters for monitoring. Counters can be looked up and
19 // manipulated by name. 20 // manipulated by name.
20 21
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 #endif 285 #endif
285 } 286 }
286 287
287 private: 288 private:
288 HistogramTimer* timer_; 289 HistogramTimer* timer_;
289 #ifdef DEBUG 290 #ifdef DEBUG
290 bool skipped_timer_start_; 291 bool skipped_timer_start_;
291 #endif 292 #endif
292 }; 293 };
293 294
295
296 // A histogram timer that can aggregate events within a larger scope.
297 //
298 // Intended use of this timer is to have an outer (aggregating) and an inner
299 // (to be aggregated) scope, where the inner scope measure the time of events,
300 // and all those inner scope measurements will be summed up by the outer scope.
301 // An example use might be to aggregate the time spent in lazy compilation
302 // while running a script.
303 //
304 // Helpers:
305 // - AggregatingHistogramTimerScope, the "outer" scope within which
306 // times will be summed up.
307 // - AggregatedHistogramTimerScope, the "inner" scope which defines the
308 // events to be timed.
309 class AggregatableHistogramTimer : public Histogram {
310 public:
311 AggregatableHistogramTimer() {}
312 AggregatableHistogramTimer(const char* name, int min, int max,
313 int num_buckets, Isolate* isolate)
314 : Histogram(name, min, max, num_buckets, isolate) {}
315
316 // Start/stop the "outer" scope.
317 void Start() { time_ = base::TimeDelta(); }
318 void Stop() { AddSample(static_cast<int>(time_.InMilliseconds())); }
319
320 // Add a time value ("inner" scope).
321 void Add(base::TimeDelta other) { time_ += other; }
322
323 private:
324 base::TimeDelta time_;
325 };
326
327
328 // A helper class for use with AggregatableHistogramTimer.
329 class AggregatingHistogramTimerScope {
330 public:
331 explicit AggregatingHistogramTimerScope(AggregatableHistogramTimer* histogram)
332 : histogram_(histogram) {
333 histogram_->Start();
334 }
335 ~AggregatingHistogramTimerScope() { histogram_->Stop(); }
336
337 private:
338 AggregatableHistogramTimer* histogram_;
339 };
340
341
342 // A helper class for use with AggregatableHistogramTimer.
343 class AggregatedHistogramTimerScope {
344 public:
345 explicit AggregatedHistogramTimerScope(AggregatableHistogramTimer* histogram)
346 : histogram_(histogram) {
347 timer_.Start();
348 }
349 ~AggregatedHistogramTimerScope() { histogram_->Add(timer_.Elapsed()); }
350
351 private:
352 base::ElapsedTimer timer_;
353 AggregatableHistogramTimer* histogram_;
354 };
355
356
294 #define HISTOGRAM_RANGE_LIST(HR) \ 357 #define HISTOGRAM_RANGE_LIST(HR) \
295 /* Generic range histograms */ \ 358 /* Generic range histograms */ \
296 HR(gc_idle_time_allotted_in_ms, V8.GCIdleTimeAllottedInMS, 0, 10000, 101) \ 359 HR(gc_idle_time_allotted_in_ms, V8.GCIdleTimeAllottedInMS, 0, 10000, 101) \
297 HR(gc_idle_time_limit_overshot, V8.GCIdleTimeLimit.Overshot, 0, 10000, 101) \ 360 HR(gc_idle_time_limit_overshot, V8.GCIdleTimeLimit.Overshot, 0, 10000, 101) \
298 HR(gc_idle_time_limit_undershot, V8.GCIdleTimeLimit.Undershot, 0, 10000, 101) 361 HR(gc_idle_time_limit_undershot, V8.GCIdleTimeLimit.Undershot, 0, 10000, 101)
299 362
300 #define HISTOGRAM_TIMER_LIST(HT) \ 363 #define HISTOGRAM_TIMER_LIST(HT) \
301 /* Garbage collection timers. */ \ 364 /* Garbage collection timers. */ \
302 HT(gc_compactor, V8.GCCompactor) \ 365 HT(gc_compactor, V8.GCCompactor) \
303 HT(gc_scavenger, V8.GCScavenger) \ 366 HT(gc_scavenger, V8.GCScavenger) \
304 HT(gc_context, V8.GCContext) /* GC context cleanup time */ \ 367 HT(gc_context, V8.GCContext) /* GC context cleanup time */ \
305 HT(gc_idle_notification, V8.GCIdleNotification) \ 368 HT(gc_idle_notification, V8.GCIdleNotification) \
306 HT(gc_incremental_marking, V8.GCIncrementalMarking) \ 369 HT(gc_incremental_marking, V8.GCIncrementalMarking) \
307 HT(gc_low_memory_notification, V8.GCLowMemoryNotification) \ 370 HT(gc_low_memory_notification, V8.GCLowMemoryNotification) \
308 /* Parsing timers. */ \ 371 /* Parsing timers. */ \
309 HT(parse, V8.Parse) \ 372 HT(parse, V8.Parse) \
310 HT(parse_lazy, V8.ParseLazy) \ 373 HT(parse_lazy, V8.ParseLazy) \
311 HT(pre_parse, V8.PreParse) \ 374 HT(pre_parse, V8.PreParse) \
312 /* Compilation times. */ \ 375 /* Compilation times. */ \
313 HT(compile, V8.Compile) \ 376 HT(compile, V8.Compile) \
314 HT(compile_eval, V8.CompileEval) \ 377 HT(compile_eval, V8.CompileEval) \
315 /* Serialization as part of compilation (code caching) */ \ 378 /* Serialization as part of compilation (code caching) */ \
316 HT(compile_serialize, V8.CompileSerialize) \ 379 HT(compile_serialize, V8.CompileSerialize) \
317 HT(compile_deserialize, V8.CompileDeserialize) \ 380 HT(compile_deserialize, V8.CompileDeserialize) \
318 /* Total compilation time incl. caching/parsing */ \ 381 /* Total compilation time incl. caching/parsing */ \
319 HT(compile_script, V8.CompileScript) 382 HT(compile_script, V8.CompileScript)
320 383
321 384
385 #define AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT) \
386 AHT(compile_lazy, V8.CompileLazy)
387
388
322 #define HISTOGRAM_PERCENTAGE_LIST(HP) \ 389 #define HISTOGRAM_PERCENTAGE_LIST(HP) \
323 /* Heap fragmentation. */ \ 390 /* Heap fragmentation. */ \
324 HP(external_fragmentation_total, \ 391 HP(external_fragmentation_total, \
325 V8.MemoryExternalFragmentationTotal) \ 392 V8.MemoryExternalFragmentationTotal) \
326 HP(external_fragmentation_old_pointer_space, \ 393 HP(external_fragmentation_old_pointer_space, \
327 V8.MemoryExternalFragmentationOldPointerSpace) \ 394 V8.MemoryExternalFragmentationOldPointerSpace) \
328 HP(external_fragmentation_old_data_space, \ 395 HP(external_fragmentation_old_data_space, \
329 V8.MemoryExternalFragmentationOldDataSpace) \ 396 V8.MemoryExternalFragmentationOldDataSpace) \
330 HP(external_fragmentation_code_space, \ 397 HP(external_fragmentation_code_space, \
331 V8.MemoryExternalFragmentationCodeSpace) \ 398 V8.MemoryExternalFragmentationCodeSpace) \
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 #define HR(name, caption, min, max, num_buckets) \ 629 #define HR(name, caption, min, max, num_buckets) \
563 Histogram* name() { return &name##_; } 630 Histogram* name() { return &name##_; }
564 HISTOGRAM_RANGE_LIST(HR) 631 HISTOGRAM_RANGE_LIST(HR)
565 #undef HR 632 #undef HR
566 633
567 #define HT(name, caption) \ 634 #define HT(name, caption) \
568 HistogramTimer* name() { return &name##_; } 635 HistogramTimer* name() { return &name##_; }
569 HISTOGRAM_TIMER_LIST(HT) 636 HISTOGRAM_TIMER_LIST(HT)
570 #undef HT 637 #undef HT
571 638
639 #define AHT(name, caption) \
640 AggregatableHistogramTimer* name() { return &name##_; }
641 AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT)
642 #undef AHT
643
572 #define HP(name, caption) \ 644 #define HP(name, caption) \
573 Histogram* name() { return &name##_; } 645 Histogram* name() { return &name##_; }
574 HISTOGRAM_PERCENTAGE_LIST(HP) 646 HISTOGRAM_PERCENTAGE_LIST(HP)
575 #undef HP 647 #undef HP
576 648
577 #define HM(name, caption) \ 649 #define HM(name, caption) \
578 Histogram* name() { return &name##_; } 650 Histogram* name() { return &name##_; }
579 HISTOGRAM_MEMORY_LIST(HM) 651 HISTOGRAM_MEMORY_LIST(HM)
580 #undef HM 652 #undef HM
581 653
(...skipping 30 matching lines...) Expand all
612 { return &count_of_CODE_AGE_##name##_; } \ 684 { return &count_of_CODE_AGE_##name##_; } \
613 StatsCounter* size_of_CODE_AGE_##name() \ 685 StatsCounter* size_of_CODE_AGE_##name() \
614 { return &size_of_CODE_AGE_##name##_; } 686 { return &size_of_CODE_AGE_##name##_; }
615 CODE_AGE_LIST_COMPLETE(SC) 687 CODE_AGE_LIST_COMPLETE(SC)
616 #undef SC 688 #undef SC
617 689
618 enum Id { 690 enum Id {
619 #define RATE_ID(name, caption) k_##name, 691 #define RATE_ID(name, caption) k_##name,
620 HISTOGRAM_TIMER_LIST(RATE_ID) 692 HISTOGRAM_TIMER_LIST(RATE_ID)
621 #undef RATE_ID 693 #undef RATE_ID
694 #define AGGREGATABLE_ID(name, caption) k_##name,
695 AGGREGATABLE_HISTOGRAM_TIMER_LIST(AGGREGATABLE_ID)
696 #undef AGGREGATABLE_ID
622 #define PERCENTAGE_ID(name, caption) k_##name, 697 #define PERCENTAGE_ID(name, caption) k_##name,
623 HISTOGRAM_PERCENTAGE_LIST(PERCENTAGE_ID) 698 HISTOGRAM_PERCENTAGE_LIST(PERCENTAGE_ID)
624 #undef PERCENTAGE_ID 699 #undef PERCENTAGE_ID
625 #define MEMORY_ID(name, caption) k_##name, 700 #define MEMORY_ID(name, caption) k_##name,
626 HISTOGRAM_MEMORY_LIST(MEMORY_ID) 701 HISTOGRAM_MEMORY_LIST(MEMORY_ID)
627 #undef MEMORY_ID 702 #undef MEMORY_ID
628 #define COUNTER_ID(name, caption) k_##name, 703 #define COUNTER_ID(name, caption) k_##name,
629 STATS_COUNTER_LIST_1(COUNTER_ID) 704 STATS_COUNTER_LIST_1(COUNTER_ID)
630 STATS_COUNTER_LIST_2(COUNTER_ID) 705 STATS_COUNTER_LIST_2(COUNTER_ID)
631 #undef COUNTER_ID 706 #undef COUNTER_ID
(...skipping 21 matching lines...) Expand all
653 private: 728 private:
654 #define HR(name, caption, min, max, num_buckets) Histogram name##_; 729 #define HR(name, caption, min, max, num_buckets) Histogram name##_;
655 HISTOGRAM_RANGE_LIST(HR) 730 HISTOGRAM_RANGE_LIST(HR)
656 #undef HR 731 #undef HR
657 732
658 #define HT(name, caption) \ 733 #define HT(name, caption) \
659 HistogramTimer name##_; 734 HistogramTimer name##_;
660 HISTOGRAM_TIMER_LIST(HT) 735 HISTOGRAM_TIMER_LIST(HT)
661 #undef HT 736 #undef HT
662 737
738 #define AHT(name, caption) \
739 AggregatableHistogramTimer name##_;
740 AGGREGATABLE_HISTOGRAM_TIMER_LIST(AHT)
741 #undef AHT
742
663 #define HP(name, caption) \ 743 #define HP(name, caption) \
664 Histogram name##_; 744 Histogram name##_;
665 HISTOGRAM_PERCENTAGE_LIST(HP) 745 HISTOGRAM_PERCENTAGE_LIST(HP)
666 #undef HP 746 #undef HP
667 747
668 #define HM(name, caption) \ 748 #define HM(name, caption) \
669 Histogram name##_; 749 Histogram name##_;
670 HISTOGRAM_MEMORY_LIST(HM) 750 HISTOGRAM_MEMORY_LIST(HM)
671 #undef HM 751 #undef HM
672 752
(...skipping 30 matching lines...) Expand all
703 friend class Isolate; 783 friend class Isolate;
704 784
705 explicit Counters(Isolate* isolate); 785 explicit Counters(Isolate* isolate);
706 786
707 DISALLOW_IMPLICIT_CONSTRUCTORS(Counters); 787 DISALLOW_IMPLICIT_CONSTRUCTORS(Counters);
708 }; 788 };
709 789
710 } } // namespace v8::internal 790 } } // namespace v8::internal
711 791
712 #endif // V8_COUNTERS_H_ 792 #endif // V8_COUNTERS_H_
OLDNEW
« no previous file with comments | « src/compiler.cc ('k') | src/counters.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698