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