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