128583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org// Copyright 2012 the V8 project authors. All rights reserved.
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file.
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/counters.h"
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/isolate.h"
9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/platform.h"
1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
1171affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 {
1271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal {
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
14ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgStatsTable::StatsTable()
15ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org    : lookup_function_(NULL),
16ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org      create_histogram_function_(NULL),
17ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org      add_histogram_sample_function_(NULL) {}
18ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
19ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
20ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgint* StatsCounter::FindLocationInStatsTable() const {
21e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org  return isolate_->stats_table()->FindLocation(name_);
22ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org}
23ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2528583c92ca8f528df625800519088ac88996d504jkummerow@chromium.orgvoid Histogram::AddSample(int sample) {
2628583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org  if (Enabled()) {
27ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org    isolate()->stats_table()->AddHistogramSample(histogram_, sample);
2828583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org  }
2928583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org}
3028583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org
3128583c92ca8f528df625800519088ac88996d504jkummerow@chromium.orgvoid* Histogram::CreateHistogram() const {
32ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org  return isolate()->stats_table()->
3328583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org      CreateHistogram(name_, min_, max_, num_buckets_);
3428583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org}
3528583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org
36e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
37bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org// Start the timer.
38bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgvoid HistogramTimer::Start() {
39ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org  if (Enabled()) {
40dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org    timer_.Start();
41bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org  }
42ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  isolate()->event_logger()(name(), Logger::START);
43bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org}
44bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org
45e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
46bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org// Stop the timer and record the results.
47bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgvoid HistogramTimer::Stop() {
48ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org  if (Enabled()) {
49bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org    // Compute the delta between start and stop, in milliseconds.
50dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org    AddSample(static_cast<int>(timer_.Elapsed().InMilliseconds()));
51dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org    timer_.Stop();
52bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org  }
53ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org  isolate()->event_logger()(name(), Logger::END);
54bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org}
55bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org
565924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
575924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgCounters::Counters(Isolate* isolate) {
585924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HT(name, caption) \
595924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name##_ = HistogramTimer(#caption, 0, 10000, 50, isolate);
605924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_TIMER_LIST(HT)
615924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HT
625924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
635924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HP(name, caption) \
645924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name##_ = Histogram(#caption, 0, 101, 100, isolate);
655924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_PERCENTAGE_LIST(HP)
665924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HP
675924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
685924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HM(name, caption) \
695924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name##_ = Histogram(#caption, 1000, 500000, 50, isolate);
705924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_MEMORY_LIST(HM)
715924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HM
725924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
735924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name, caption) \
745924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name##_ = StatsCounter(isolate, "c:" #caption);
755924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
765924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    STATS_COUNTER_LIST_1(SC)
775924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    STATS_COUNTER_LIST_2(SC)
785924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
795924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
805924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \
815924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    count_of_##name##_ = StatsCounter(isolate, "c:" "V8.CountOf_" #name); \
825924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    size_of_##name##_ = StatsCounter(isolate, "c:" "V8.SizeOf_" #name);
835924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    INSTANCE_TYPE_LIST(SC)
845924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
855924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
865924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \
875924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    count_of_CODE_TYPE_##name##_ = \
885924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.CountOf_CODE_TYPE-" #name); \
895924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    size_of_CODE_TYPE_##name##_ = \
905924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.SizeOf_CODE_TYPE-" #name);
915924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    CODE_KIND_LIST(SC)
925924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
935924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
945924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \
955924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    count_of_FIXED_ARRAY_##name##_ = \
965924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.CountOf_FIXED_ARRAY-" #name); \
975924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    size_of_FIXED_ARRAY_##name##_ = \
985924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.SizeOf_FIXED_ARRAY-" #name);
995924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC)
1005924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
1015924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1025924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \
1035924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    count_of_CODE_AGE_##name##_ = \
1045924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.CountOf_CODE_AGE-" #name); \
1055924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    size_of_CODE_AGE_##name##_ = \
1065924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.SizeOf_CODE_AGE-" #name);
1075924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    CODE_AGE_LIST_COMPLETE(SC)
1085924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
1095924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org}
1105924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1115924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
112fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.orgvoid Counters::ResetCounters() {
113fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#define SC(name, caption) name##_.Reset();
114fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  STATS_COUNTER_LIST_1(SC)
115fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  STATS_COUNTER_LIST_2(SC)
116fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#undef SC
117fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org
118fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#define SC(name)              \
119fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  count_of_##name##_.Reset(); \
120fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  size_of_##name##_.Reset();
121fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  INSTANCE_TYPE_LIST(SC)
122fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#undef SC
123fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org
124fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#define SC(name)                        \
125fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  count_of_CODE_TYPE_##name##_.Reset(); \
126fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  size_of_CODE_TYPE_##name##_.Reset();
127fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  CODE_KIND_LIST(SC)
128fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#undef SC
129fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org
130fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#define SC(name)                          \
131fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  count_of_FIXED_ARRAY_##name##_.Reset(); \
132fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  size_of_FIXED_ARRAY_##name##_.Reset();
133fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC)
134fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#undef SC
135fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org
136fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#define SC(name)                       \
137fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  count_of_CODE_AGE_##name##_.Reset(); \
138fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  size_of_CODE_AGE_##name##_.Reset();
139fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org  CODE_AGE_LIST_COMPLETE(SC)
140fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org#undef SC
141fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org}
142fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org
143fdc3c5570b34908e22f3fe48be77846ca995a64fjochen@chromium.org
1445924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgvoid Counters::ResetHistograms() {
1455924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HT(name, caption) name##_.Reset();
1465924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_TIMER_LIST(HT)
1475924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HT
1485924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1495924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HP(name, caption) name##_.Reset();
1505924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_PERCENTAGE_LIST(HP)
1515924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HP
1525924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1535924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HM(name, caption) name##_.Reset();
1545924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_MEMORY_LIST(HM)
1555924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HM
1565924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org}
1575924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
15843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
159