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
75de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/base/platform/platform.h"
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/counters.h"
9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/isolate.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) {
582b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org#define HR(name, caption, min, max, num_buckets) \
592b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org  name##_ = Histogram(#caption, min, max, num_buckets, isolate);
602b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org  HISTOGRAM_RANGE_LIST(HR)
612b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org#undef HR
622b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org
635924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HT(name, caption) \
645924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name##_ = HistogramTimer(#caption, 0, 10000, 50, isolate);
655924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_TIMER_LIST(HT)
665924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HT
675924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
685924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HP(name, caption) \
695924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name##_ = Histogram(#caption, 0, 101, 100, isolate);
705924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_PERCENTAGE_LIST(HP)
715924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HP
725924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
735924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HM(name, caption) \
745924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name##_ = Histogram(#caption, 1000, 500000, 50, isolate);
755924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_MEMORY_LIST(HM)
765924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HM
775924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
785924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name, caption) \
795924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name##_ = StatsCounter(isolate, "c:" #caption);
805924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
815924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    STATS_COUNTER_LIST_1(SC)
825924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    STATS_COUNTER_LIST_2(SC)
835924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
845924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
855924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \
865924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    count_of_##name##_ = StatsCounter(isolate, "c:" "V8.CountOf_" #name); \
875924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    size_of_##name##_ = StatsCounter(isolate, "c:" "V8.SizeOf_" #name);
885924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    INSTANCE_TYPE_LIST(SC)
895924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
905924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
915924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \
925924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    count_of_CODE_TYPE_##name##_ = \
935924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.CountOf_CODE_TYPE-" #name); \
945924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    size_of_CODE_TYPE_##name##_ = \
955924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.SizeOf_CODE_TYPE-" #name);
965924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    CODE_KIND_LIST(SC)
975924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
985924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
995924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \
1005924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    count_of_FIXED_ARRAY_##name##_ = \
1015924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.CountOf_FIXED_ARRAY-" #name); \
1025924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    size_of_FIXED_ARRAY_##name##_ = \
1035924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.SizeOf_FIXED_ARRAY-" #name);
1045924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC)
1055924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
1065924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1075924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \
1085924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    count_of_CODE_AGE_##name##_ = \
1095924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.CountOf_CODE_AGE-" #name); \
1105924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    size_of_CODE_AGE_##name##_ = \
1115924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        StatsCounter(isolate, "c:" "V8.SizeOf_CODE_AGE-" #name);
1125924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    CODE_AGE_LIST_COMPLETE(SC)
1135924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC
1145924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org}
1155924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1165924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1176b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.orgvoid Counters::ResetCounters() {
1186b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#define SC(name, caption) name##_.Reset();
1196b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  STATS_COUNTER_LIST_1(SC)
1206b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  STATS_COUNTER_LIST_2(SC)
1216b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#undef SC
1226b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org
1236b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#define SC(name)              \
1246b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  count_of_##name##_.Reset(); \
1256b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  size_of_##name##_.Reset();
1266b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  INSTANCE_TYPE_LIST(SC)
1276b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#undef SC
1286b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org
1296b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#define SC(name)                        \
1306b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  count_of_CODE_TYPE_##name##_.Reset(); \
1316b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  size_of_CODE_TYPE_##name##_.Reset();
1326b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  CODE_KIND_LIST(SC)
1336b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#undef SC
1346b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org
1356b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#define SC(name)                          \
1366b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  count_of_FIXED_ARRAY_##name##_.Reset(); \
1376b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  size_of_FIXED_ARRAY_##name##_.Reset();
1386b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC)
1396b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#undef SC
1406b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org
1416b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#define SC(name)                       \
1426b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  count_of_CODE_AGE_##name##_.Reset(); \
1436b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  size_of_CODE_AGE_##name##_.Reset();
1446b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org  CODE_AGE_LIST_COMPLETE(SC)
1456b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org#undef SC
1466b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org}
1476b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org
1486b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org
1495924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgvoid Counters::ResetHistograms() {
1502b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org#define HR(name, caption, min, max, num_buckets) name##_.Reset();
1512b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org  HISTOGRAM_RANGE_LIST(HR)
1522b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org#undef HR
1532b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org
1545924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HT(name, caption) name##_.Reset();
1555924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_TIMER_LIST(HT)
1565924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HT
1575924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1585924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HP(name, caption) name##_.Reset();
1595924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_PERCENTAGE_LIST(HP)
1605924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HP
1615924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
1625924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HM(name, caption) name##_.Reset();
1635924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    HISTOGRAM_MEMORY_LIST(HM)
1645924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HM
1655924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org}
1665924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
16743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} }  // namespace v8::internal
168