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 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifndef V8_COUNTERS_H_ 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define V8_COUNTERS_H_ 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "include/v8.h" 9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/allocation.h" 105de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/base/platform/elapsed-timer.h" 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/globals.h" 12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/objects.h" 13023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org 1471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 1571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// StatsCounters is an interface for plugging into external 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// counters for monitoring. Counters can be looked up and 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// manipulated by name. 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 21ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgclass StatsTable { 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Register an application-defined function where 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // counters can be looked up. 25ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void SetCounterFunction(CounterLookupCallback f) { 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen lookup_function_ = f; 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 29bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Register an application-defined function to create 30bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // a histogram for passing to the AddHistogramSample function 31ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void SetCreateHistogramFunction(CreateHistogramCallback f) { 32bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org create_histogram_function_ = f; 33bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 34bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 35bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Register an application-defined function to add a sample 36bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // to a histogram created with CreateHistogram function 37ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void SetAddHistogramSampleFunction(AddHistogramSampleCallback f) { 38bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org add_histogram_sample_function_ = f; 39bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 40bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 41ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org bool HasCounterFunction() const { 4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return lookup_function_ != NULL; 4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 4443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Lookup the location of a counter by name. If the lookup 4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // is successful, returns a non-NULL pointer for writing the 4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // value of the counter. Each thread calling this function 4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // may receive a different location to store it's counter. 4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // The return value must not be cached and re-used across 5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // threads, although a single thread is free to cache it. 51ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org int* FindLocation(const char* name) { 5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!lookup_function_) return NULL; 5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return lookup_function_(name); 5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 56bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Create a histogram by name. If the create is successful, 57bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // returns a non-NULL pointer for use with AddHistogramSample 58bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // function. min and max define the expected minimum and maximum 59bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // sample values. buckets is the maximum number of buckets 60bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // that the samples will be grouped into. 61ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void* CreateHistogram(const char* name, 62ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org int min, 63ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org int max, 64ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org size_t buckets) { 65bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org if (!create_histogram_function_) return NULL; 66bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return create_histogram_function_(name, min, max, buckets); 67bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 68bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 69bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Add a sample to a histogram created with the CreateHistogram 70bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // function. 71ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void AddHistogramSample(void* histogram, int sample) { 72bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org if (!add_histogram_sample_function_) return; 73bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return add_histogram_sample_function_(histogram, sample); 74bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 75bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 7643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 77ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org StatsTable(); 78ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 79ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CounterLookupCallback lookup_function_; 80ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org CreateHistogramCallback create_histogram_function_; 81ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org AddHistogramSampleCallback add_histogram_sample_function_; 82ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 83ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org friend class Isolate; 84ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 85ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org DISALLOW_COPY_AND_ASSIGN(StatsTable); 8643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 8743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// StatsCounters are dynamically created values which can be tracked in 8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// the StatsTable. They are designed to be lightweight to create and 9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// easy to use. 9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Internally, a counter represents a value in a row of a StatsTable. 9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// The row has a 32bit value for each process/thread in the table and also 9443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// a name (stored in the table metadata). Since the storage location can be 9543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// thread-specific, this class cannot be shared across threads. 96ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgclass StatsCounter { 97ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org public: 98ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org StatsCounter() { } 99e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org explicit StatsCounter(Isolate* isolate, const char* name) 100e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org : isolate_(isolate), name_(name), ptr_(NULL), lookup_done_(false) { } 10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Sets the counter to a specific value. 10343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Set(int value) { 10443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int* loc = GetPtr(); 10543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (loc) *loc = value; 10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 10743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Increments the counter. 10943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Increment() { 11043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int* loc = GetPtr(); 11143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (loc) (*loc)++; 11243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 11343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Increment(int value) { 11543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int* loc = GetPtr(); 11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (loc) 11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*loc) += value; 11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Decrements the counter. 12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Decrement() { 12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int* loc = GetPtr(); 12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (loc) (*loc)--; 12443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 12543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void Decrement(int value) { 12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int* loc = GetPtr(); 12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (loc) (*loc) -= value; 12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Is this counter enabled? 13243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Returns false if table is full. 13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool Enabled() { 13443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return GetPtr() != NULL; 13543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 13643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Get the internal pointer to the counter. This is used 13843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // by the code generator to emit code that manipulates a 13943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // given counter without calling the runtime system. 14043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int* GetInternalPointer() { 14143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int* loc = GetPtr(); 142e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org DCHECK(loc != NULL); 14343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return loc; 14443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 14543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1466b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org // Reset the cached internal pointer. 1476b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org void Reset() { lookup_done_ = false; } 1486b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org 14943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen protected: 15043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Returns the cached address of this counter location. 15143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int* GetPtr() { 15228583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org if (lookup_done_) return ptr_; 15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen lookup_done_ = true; 154ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ptr_ = FindLocationInStatsTable(); 15543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return ptr_; 15643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 157ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 158ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org private: 159ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org int* FindLocationInStatsTable() const; 16043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 161e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org Isolate* isolate_; 162ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org const char* name_; 163ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int* ptr_; 164ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org bool lookup_done_; 16543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 16643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16728583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org// A Histogram represents a dynamically created histogram in the StatsTable. 168ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org// It will be registered with the histogram system on first use. 169ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgclass Histogram { 170ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org public: 171ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org Histogram() { } 172ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org Histogram(const char* name, 173ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int min, 174ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int max, 175ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int num_buckets, 176ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org Isolate* isolate) 177ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org : name_(name), 178ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org min_(min), 179ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org max_(max), 180ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org num_buckets_(num_buckets), 181ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org histogram_(NULL), 182ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org lookup_done_(false), 183ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org isolate_(isolate) { } 18443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 18528583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org // Add a single sample to this histogram. 18628583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org void AddSample(int sample); 187bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 18828583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org // Returns true if this histogram is enabled. 18928583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org bool Enabled() { 19028583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org return GetHistogram() != NULL; 19143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 19243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 193471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org // Reset the cached internal pointer. 194471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org void Reset() { 195471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org lookup_done_ = false; 196471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org } 197471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 198bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org protected: 199bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org // Returns the handle to the histogram. 200bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org void* GetHistogram() { 201bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org if (!lookup_done_) { 202bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org lookup_done_ = true; 203ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org histogram_ = CreateHistogram(); 20443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 205bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return histogram_; 20643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 207ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 208ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org const char* name() { return name_; } 209ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org Isolate* isolate() const { return isolate_; } 210ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 211ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org private: 212ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org void* CreateHistogram() const; 21343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 214ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org const char* name_; 215ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int min_; 216ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int max_; 217ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int num_buckets_; 218ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org void* histogram_; 219ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org bool lookup_done_; 220ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org Isolate* isolate_; 221ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org}; 22228583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org 223ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org// A HistogramTimer allows distributions of results to be created. 224ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgclass HistogramTimer : public Histogram { 225ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org public: 226ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org HistogramTimer() { } 227ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org HistogramTimer(const char* name, 228ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int min, 229ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int max, 230ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org int num_buckets, 231ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org Isolate* isolate) 232dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org : Histogram(name, min, max, num_buckets, isolate) {} 23328583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org 23428583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org // Start the timer. 23528583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org void Start(); 23628583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org 23728583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org // Stop the timer and record the results. 23828583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org void Stop(); 23928583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org 24028583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org // Returns true if the timer is running. 24128583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org bool Running() { 242dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return Enabled() && timer_.IsStarted(); 24328583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org } 244471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 2454000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org // TODO(bmeurer): Remove this when HistogramTimerScope is fixed. 2464000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#ifdef DEBUG 2475de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org base::ElapsedTimer* timer() { return &timer_; } 2484000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#endif 2494000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org 250ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org private: 2515de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org base::ElapsedTimer timer_; 25228583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org}; 25328583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org 254bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org// Helper class for scoping a HistogramTimer. 2554000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org// TODO(bmeurer): The ifdeffery is an ugly hack around the fact that the 2564000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org// Parser is currently reentrant (when it throws an error, we call back 2574000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org// into JavaScript and all bets are off), but ElapsedTimer is not 2584000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org// reentry-safe. Fix this properly and remove |allow_nesting|. 259bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgclass HistogramTimerScope BASE_EMBEDDED { 26043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen public: 2614000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org explicit HistogramTimerScope(HistogramTimer* timer, 2624000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org bool allow_nesting = false) 2634000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#ifdef DEBUG 2644000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org : timer_(timer), 2654000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org skipped_timer_start_(false) { 2664000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org if (timer_->timer()->IsStarted() && allow_nesting) { 2674000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org skipped_timer_start_ = true; 2684000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org } else { 2694000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org timer_->Start(); 2704000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org } 2713c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org } 2724000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#else 2734000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org : timer_(timer) { 274bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org timer_->Start(); 27543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 2763c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org#endif 277bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org ~HistogramTimerScope() { 2784000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#ifdef DEBUG 2794000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org if (!skipped_timer_start_) { 2804000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org timer_->Stop(); 2814000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org } 2824000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#else 283bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org timer_->Stop(); 2844000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#endif 28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 2863c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org 28743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen private: 288bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org HistogramTimer* timer_; 2894000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#ifdef DEBUG 2904000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org bool skipped_timer_start_; 2914000f228dd279f96628ed845f1e81d01ba7e14d8jkummerow@chromium.org#endif 29243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 29343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 294d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org#define HISTOGRAM_RANGE_LIST(HR) \ 295d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org /* Generic range histograms */ \ 296d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org HR(gc_idle_time_allotted_in_ms, V8.GCIdleTimeAllottedInMS, 0, 10000, 101) \ 297d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org HR(gc_idle_time_limit_overshot, V8.GCIdleTimeLimit.Overshot, 0, 10000, 101) \ 298703303d791f48729b927e5655ee066a3496a734djochen@chromium.org HR(gc_idle_time_limit_undershot, V8.GCIdleTimeLimit.Undershot, 0, 10000, 101) 29943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 300474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org#define HISTOGRAM_TIMER_LIST(HT) \ 301474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org /* Garbage collection timers. */ \ 302474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(gc_compactor, V8.GCCompactor) \ 303474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(gc_scavenger, V8.GCScavenger) \ 304474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(gc_context, V8.GCContext) /* GC context cleanup time */ \ 305474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(gc_idle_notification, V8.GCIdleNotification) \ 306474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(gc_incremental_marking, V8.GCIncrementalMarking) \ 307f2af15a6b44ea6276bdd609ee122babe52842a42machenbach@chromium.org HT(gc_low_memory_notification, V8.GCLowMemoryNotification) \ 308474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org /* Parsing timers. */ \ 309474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(parse, V8.Parse) \ 310474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(parse_lazy, V8.ParseLazy) \ 311474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(pre_parse, V8.PreParse) \ 312474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org /* Total compilation times. */ \ 313474e8b19cf12dc057572a8543864dd6586ee0a65machenbach@chromium.org HT(compile, V8.Compile) \ 31406b2696801712948b665372a38f96b1f10be6997machenbach@chromium.org HT(compile_eval, V8.CompileEval) \ 31506b2696801712948b665372a38f96b1f10be6997machenbach@chromium.org /* Serialization as part of compilation (code caching) */ \ 31606b2696801712948b665372a38f96b1f10be6997machenbach@chromium.org HT(compile_serialize, V8.CompileSerialize) \ 31706b2696801712948b665372a38f96b1f10be6997machenbach@chromium.org HT(compile_deserialize, V8.CompileDeserialize) 31806b2696801712948b665372a38f96b1f10be6997machenbach@chromium.org 3195924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 3205924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HISTOGRAM_PERCENTAGE_LIST(HP) \ 3215924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Heap fragmentation. */ \ 3225924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(external_fragmentation_total, \ 3235924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryExternalFragmentationTotal) \ 3245924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(external_fragmentation_old_pointer_space, \ 3255924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryExternalFragmentationOldPointerSpace) \ 3265924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(external_fragmentation_old_data_space, \ 3275924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryExternalFragmentationOldDataSpace) \ 3285924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(external_fragmentation_code_space, \ 3295924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryExternalFragmentationCodeSpace) \ 3305924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(external_fragmentation_map_space, \ 3315924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryExternalFragmentationMapSpace) \ 3325924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(external_fragmentation_cell_space, \ 3335924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryExternalFragmentationCellSpace) \ 3345924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(external_fragmentation_property_cell_space, \ 3355924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryExternalFragmentationPropertyCellSpace) \ 3365924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(external_fragmentation_lo_space, \ 3375924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryExternalFragmentationLoSpace) \ 3385924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Percentages of heap committed to each space. */ \ 3395924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(heap_fraction_new_space, \ 3405924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapFractionNewSpace) \ 3415924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(heap_fraction_old_pointer_space, \ 3425924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapFractionOldPointerSpace) \ 3435924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(heap_fraction_old_data_space, \ 3445924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapFractionOldDataSpace) \ 3455924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(heap_fraction_code_space, \ 3465924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapFractionCodeSpace) \ 3475924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(heap_fraction_map_space, \ 3485924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapFractionMapSpace) \ 3495924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(heap_fraction_cell_space, \ 3505924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapFractionCellSpace) \ 3515924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(heap_fraction_property_cell_space, \ 3525924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapFractionPropertyCellSpace) \ 3535924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(heap_fraction_lo_space, \ 3545924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapFractionLoSpace) \ 3555924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Percentage of crankshafted codegen. */ \ 3565924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HP(codegen_fraction_crankshaft, \ 3575924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.CodegenFractionCrankshaft) \ 3585924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 3595924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 3605924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HISTOGRAM_MEMORY_LIST(HM) \ 3615924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HM(heap_sample_total_committed, V8.MemoryHeapSampleTotalCommitted) \ 3625924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HM(heap_sample_total_used, V8.MemoryHeapSampleTotalUsed) \ 3635924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HM(heap_sample_map_space_committed, \ 3645924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapSampleMapSpaceCommitted) \ 3655924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HM(heap_sample_cell_space_committed, \ 3665924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapSampleCellSpaceCommitted) \ 3675924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HM(heap_sample_property_cell_space_committed, \ 3685924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapSamplePropertyCellSpaceCommitted) \ 3695924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HM(heap_sample_code_space_committed, \ 3705924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapSampleCodeSpaceCommitted) \ 3715924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HM(heap_sample_maximum_committed, \ 3725924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org V8.MemoryHeapSampleMaximumCommitted) \ 3735924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 3745924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 3755924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org// WARNING: STATS_COUNTER_LIST_* is a very large macro that is causing MSVC 3765924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org// Intellisense to crash. It was broken into two macros (each of length 40 3775924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org// lines) rather than one macro (of length about 80 lines) to work around 3785924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org// this problem. Please avoid using recursive macros of this length when 3795924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org// possible. 3805924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define STATS_COUNTER_LIST_1(SC) \ 3815924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Global Handle Count*/ \ 3825924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(global_handles, V8.GlobalHandles) \ 3835924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* OS Memory allocated */ \ 3845924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(memory_allocated, V8.OsMemoryAllocated) \ 3855924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(normalized_maps, V8.NormalizedMaps) \ 3865924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(props_to_dictionary, V8.ObjectPropertiesToDictionary) \ 3875924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(elements_to_dictionary, V8.ObjectElementsToDictionary) \ 3885924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(alive_after_last_gc, V8.AliveAfterLastGC) \ 3895924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(objs_since_last_young, V8.ObjsSinceLastYoung) \ 3905924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(objs_since_last_full, V8.ObjsSinceLastFull) \ 3915924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(string_table_capacity, V8.StringTableCapacity) \ 3925924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(number_of_symbols, V8.NumberOfSymbols) \ 3935924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(script_wrappers, V8.ScriptWrappers) \ 3945924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(call_initialize_stubs, V8.CallInitializeStubs) \ 3955924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(call_premonomorphic_stubs, V8.CallPreMonomorphicStubs) \ 3965924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(call_normal_stubs, V8.CallNormalStubs) \ 3975924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(call_megamorphic_stubs, V8.CallMegamorphicStubs) \ 398a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org SC(inlined_copied_elements, V8.InlinedCopiedElements) \ 3995924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(arguments_adaptors, V8.ArgumentsAdaptors) \ 4005924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(compilation_cache_hits, V8.CompilationCacheHits) \ 4015924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(compilation_cache_misses, V8.CompilationCacheMisses) \ 4025924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(string_ctor_calls, V8.StringConstructorCalls) \ 4035924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(string_ctor_conversions, V8.StringConstructorConversions) \ 4045924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(string_ctor_cached_number, V8.StringConstructorCachedNumber) \ 4055924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(string_ctor_string_value, V8.StringConstructorStringValue) \ 4065924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(string_ctor_gc_required, V8.StringConstructorGCRequired) \ 4075924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Amount of evaled source code. */ \ 4085924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(total_eval_size, V8.TotalEvalSize) \ 4095924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Amount of loaded source code. */ \ 4105924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(total_load_size, V8.TotalLoadSize) \ 4115924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Amount of parsed source code. */ \ 4125924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(total_parse_size, V8.TotalParseSize) \ 4135924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Amount of source code skipped over using preparsing. */ \ 4145924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(total_preparse_skipped, V8.TotalPreparseSkipped) \ 4155924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Number of symbol lookups skipped using preparsing */ \ 4165924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(total_preparse_symbols_skipped, V8.TotalPreparseSymbolSkipped) \ 4175924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Amount of compiled source code. */ \ 4185924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(total_compile_size, V8.TotalCompileSize) \ 4195924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Amount of source code compiled with the full codegen. */ \ 4205924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(total_full_codegen_source_size, V8.TotalFullCodegenSourceSize) \ 4215924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Number of contexts created from scratch. */ \ 4225924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(contexts_created_from_scratch, V8.ContextsCreatedFromScratch) \ 4235924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Number of contexts created by partial snapshot. */ \ 4245924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(contexts_created_by_snapshot, V8.ContextsCreatedBySnapshot) \ 4255924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* Number of code objects found from pc. */ \ 4265924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(pc_to_code, V8.PcToCode) \ 4275924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(pc_to_code_cached, V8.PcToCodeCached) \ 4285924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org /* The store-buffer implementation of the write barrier. */ \ 4295924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(store_buffer_compactions, V8.StoreBufferCompactions) \ 4305924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(store_buffer_overflows, V8.StoreBufferOverflows) 4315924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 4325924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 4332c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org#define STATS_COUNTER_LIST_2(SC) \ 4342c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org /* Number of code stubs. */ \ 4352c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(code_stubs, V8.CodeStubs) \ 4362c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org /* Amount of stub code. */ \ 4372c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(total_stubs_code_size, V8.TotalStubsCodeSize) \ 4382c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org /* Amount of (JS) compiled code. */ \ 4392c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(total_compiled_code_size, V8.TotalCompiledCodeSize) \ 4402c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(gc_compactor_caused_by_request, V8.GCCompactorCausedByRequest) \ 4412c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(gc_compactor_caused_by_promoted_data, V8.GCCompactorCausedByPromotedData) \ 4422c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(gc_compactor_caused_by_oldspace_exhaustion, \ 4432c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org V8.GCCompactorCausedByOldspaceExhaustion) \ 4442c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(gc_last_resort_from_js, V8.GCLastResortFromJS) \ 4452c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(gc_last_resort_from_handles, V8.GCLastResortFromHandles) \ 4462c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org /* How is the generic keyed-load stub used? */ \ 4472c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_load_generic_smi, V8.KeyedLoadGenericSmi) \ 4482c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_load_generic_symbol, V8.KeyedLoadGenericSymbol) \ 4492c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_load_generic_lookup_cache, V8.KeyedLoadGenericLookupCache) \ 4502c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_load_generic_slow, V8.KeyedLoadGenericSlow) \ 4512c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_load_polymorphic_stubs, V8.KeyedLoadPolymorphicStubs) \ 4522c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_load_external_array_slow, V8.KeyedLoadExternalArraySlow) \ 4532c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org /* How is the generic keyed-call stub used? */ \ 4542c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_call_generic_smi_fast, V8.KeyedCallGenericSmiFast) \ 4552c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_call_generic_smi_dict, V8.KeyedCallGenericSmiDict) \ 4562c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_call_generic_lookup_cache, V8.KeyedCallGenericLookupCache) \ 4572c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_call_generic_lookup_dict, V8.KeyedCallGenericLookupDict) \ 4582c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_call_generic_slow, V8.KeyedCallGenericSlow) \ 4592c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_call_generic_slow_load, V8.KeyedCallGenericSlowLoad) \ 4602c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(named_load_global_stub, V8.NamedLoadGlobalStub) \ 4612c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(named_store_global_inline, V8.NamedStoreGlobalInline) \ 4622c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(named_store_global_inline_miss, V8.NamedStoreGlobalInlineMiss) \ 4632c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_store_polymorphic_stubs, V8.KeyedStorePolymorphicStubs) \ 4642c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_store_external_array_slow, V8.KeyedStoreExternalArraySlow) \ 4652c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(store_normal_miss, V8.StoreNormalMiss) \ 4662c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(store_normal_hit, V8.StoreNormalHit) \ 4672c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(cow_arrays_created_stub, V8.COWArraysCreatedStub) \ 4682c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(cow_arrays_created_runtime, V8.COWArraysCreatedRuntime) \ 4692c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(cow_arrays_converted, V8.COWArraysConverted) \ 4702c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(call_miss, V8.CallMiss) \ 4712c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_call_miss, V8.KeyedCallMiss) \ 4722c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(load_miss, V8.LoadMiss) \ 4732c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(keyed_load_miss, V8.KeyedLoadMiss) \ 4742c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(call_const, V8.CallConst) \ 4752c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(call_const_fast_api, V8.CallConstFastApi) \ 4762c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(call_const_interceptor, V8.CallConstInterceptor) \ 4772c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(call_const_interceptor_fast_api, V8.CallConstInterceptorFastApi) \ 4782c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(call_global_inline, V8.CallGlobalInline) \ 4792c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(call_global_inline_miss, V8.CallGlobalInlineMiss) \ 4802c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(constructed_objects, V8.ConstructedObjects) \ 4812c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(constructed_objects_runtime, V8.ConstructedObjectsRuntime) \ 4822c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(negative_lookups, V8.NegativeLookups) \ 4832c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(negative_lookups_miss, V8.NegativeLookupsMiss) \ 4842c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(megamorphic_stub_cache_probes, V8.MegamorphicStubCacheProbes) \ 4852c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(megamorphic_stub_cache_misses, V8.MegamorphicStubCacheMisses) \ 4862c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(megamorphic_stub_cache_updates, V8.MegamorphicStubCacheUpdates) \ 4872c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(array_function_runtime, V8.ArrayFunctionRuntime) \ 4882c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(array_function_native, V8.ArrayFunctionNative) \ 4892c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(for_in, V8.ForIn) \ 4902c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(enum_cache_hits, V8.EnumCacheHits) \ 4912c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(enum_cache_misses, V8.EnumCacheMisses) \ 4922c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(zone_segment_bytes, V8.ZoneSegmentBytes) \ 4932c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(fast_new_closure_total, V8.FastNewClosureTotal) \ 4942c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(fast_new_closure_try_optimized, V8.FastNewClosureTryOptimized) \ 4952c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(fast_new_closure_install_optimized, V8.FastNewClosureInstallOptimized) \ 4962c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(string_add_runtime, V8.StringAddRuntime) \ 4972c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(string_add_native, V8.StringAddNative) \ 4982c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(string_add_runtime_ext_to_one_byte, V8.StringAddRuntimeExtToOneByte) \ 4992c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(sub_string_runtime, V8.SubStringRuntime) \ 5002c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(sub_string_native, V8.SubStringNative) \ 5012c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(string_add_make_two_char, V8.StringAddMakeTwoChar) \ 5022c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(string_compare_native, V8.StringCompareNative) \ 5032c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(string_compare_runtime, V8.StringCompareRuntime) \ 5042c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(regexp_entry_runtime, V8.RegExpEntryRuntime) \ 5052c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(regexp_entry_native, V8.RegExpEntryNative) \ 5062c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(number_to_string_native, V8.NumberToStringNative) \ 5072c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(number_to_string_runtime, V8.NumberToStringRuntime) \ 5082c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_acos, V8.MathAcos) \ 5092c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_asin, V8.MathAsin) \ 5102c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_atan, V8.MathAtan) \ 5112c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_atan2, V8.MathAtan2) \ 5122c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_exp, V8.MathExp) \ 5132c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_floor, V8.MathFloor) \ 5142c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_log, V8.MathLog) \ 5152c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_pow, V8.MathPow) \ 5162c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_round, V8.MathRound) \ 5172c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(math_sqrt, V8.MathSqrt) \ 5182c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(stack_interrupts, V8.StackInterrupts) \ 5192c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(runtime_profiler_ticks, V8.RuntimeProfilerTicks) \ 5202c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(bounds_checks_eliminated, V8.BoundsChecksEliminated) \ 5212c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(bounds_checks_hoisted, V8.BoundsChecksHoisted) \ 5222c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(soft_deopts_requested, V8.SoftDeoptsRequested) \ 5232c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(soft_deopts_inserted, V8.SoftDeoptsInserted) \ 5242c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(soft_deopts_executed, V8.SoftDeoptsExecuted) \ 5252c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org /* Number of write barriers in generated code. */ \ 5262c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(write_barriers_dynamic, V8.WriteBarriersDynamic) \ 5272c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(write_barriers_static, V8.WriteBarriersStatic) \ 5282c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(new_space_bytes_available, V8.MemoryNewSpaceBytesAvailable) \ 5292c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(new_space_bytes_committed, V8.MemoryNewSpaceBytesCommitted) \ 5302c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(new_space_bytes_used, V8.MemoryNewSpaceBytesUsed) \ 5312c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(old_pointer_space_bytes_available, \ 5322c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org V8.MemoryOldPointerSpaceBytesAvailable) \ 5332c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(old_pointer_space_bytes_committed, \ 5342c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org V8.MemoryOldPointerSpaceBytesCommitted) \ 5352c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(old_pointer_space_bytes_used, V8.MemoryOldPointerSpaceBytesUsed) \ 5362c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(old_data_space_bytes_available, V8.MemoryOldDataSpaceBytesAvailable) \ 5372c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(old_data_space_bytes_committed, V8.MemoryOldDataSpaceBytesCommitted) \ 5382c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(old_data_space_bytes_used, V8.MemoryOldDataSpaceBytesUsed) \ 5392c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(code_space_bytes_available, V8.MemoryCodeSpaceBytesAvailable) \ 5402c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(code_space_bytes_committed, V8.MemoryCodeSpaceBytesCommitted) \ 5412c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(code_space_bytes_used, V8.MemoryCodeSpaceBytesUsed) \ 5422c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(map_space_bytes_available, V8.MemoryMapSpaceBytesAvailable) \ 5432c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(map_space_bytes_committed, V8.MemoryMapSpaceBytesCommitted) \ 5442c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(map_space_bytes_used, V8.MemoryMapSpaceBytesUsed) \ 5452c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(cell_space_bytes_available, V8.MemoryCellSpaceBytesAvailable) \ 5462c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(cell_space_bytes_committed, V8.MemoryCellSpaceBytesCommitted) \ 5472c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(cell_space_bytes_used, V8.MemoryCellSpaceBytesUsed) \ 5482c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(property_cell_space_bytes_available, \ 5492c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org V8.MemoryPropertyCellSpaceBytesAvailable) \ 5502c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(property_cell_space_bytes_committed, \ 5512c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org V8.MemoryPropertyCellSpaceBytesCommitted) \ 5522c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(property_cell_space_bytes_used, V8.MemoryPropertyCellSpaceBytesUsed) \ 5532c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(lo_space_bytes_available, V8.MemoryLoSpaceBytesAvailable) \ 5542c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org SC(lo_space_bytes_committed, V8.MemoryLoSpaceBytesCommitted) \ 5555924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org SC(lo_space_bytes_used, V8.MemoryLoSpaceBytesUsed) 5565924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 5575924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 5585924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org// This file contains all the v8 counters that are in use. 5595924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgclass Counters { 5605924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org public: 5612b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org#define HR(name, caption, min, max, num_buckets) \ 5622b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org Histogram* name() { return &name##_; } 5632b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org HISTOGRAM_RANGE_LIST(HR) 5642b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org#undef HR 5652b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org 5665924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HT(name, caption) \ 5675924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HistogramTimer* name() { return &name##_; } 5685924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_TIMER_LIST(HT) 5695924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HT 5705924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 5715924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HP(name, caption) \ 5725924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org Histogram* name() { return &name##_; } 5735924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_PERCENTAGE_LIST(HP) 5745924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HP 5755924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 5765924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HM(name, caption) \ 5775924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org Histogram* name() { return &name##_; } 5785924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_MEMORY_LIST(HM) 5795924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HM 5805924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 5815924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name, caption) \ 5825924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* name() { return &name##_; } 5835924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org STATS_COUNTER_LIST_1(SC) 5845924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org STATS_COUNTER_LIST_2(SC) 5855924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 5865924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 5875924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \ 5885924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* count_of_##name() { return &count_of_##name##_; } \ 5895924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* size_of_##name() { return &size_of_##name##_; } 5905924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org INSTANCE_TYPE_LIST(SC) 5915924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 5925924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 5935924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \ 5945924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* count_of_CODE_TYPE_##name() \ 5955924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org { return &count_of_CODE_TYPE_##name##_; } \ 5965924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* size_of_CODE_TYPE_##name() \ 5975924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org { return &size_of_CODE_TYPE_##name##_; } 5985924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org CODE_KIND_LIST(SC) 5995924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 6005924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6015924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \ 6025924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* count_of_FIXED_ARRAY_##name() \ 6035924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org { return &count_of_FIXED_ARRAY_##name##_; } \ 6045924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* size_of_FIXED_ARRAY_##name() \ 6055924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org { return &size_of_FIXED_ARRAY_##name##_; } 6065924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC) 6075924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 6085924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6095924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \ 6105924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* count_of_CODE_AGE_##name() \ 6115924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org { return &count_of_CODE_AGE_##name##_; } \ 6125924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter* size_of_CODE_AGE_##name() \ 6135924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org { return &size_of_CODE_AGE_##name##_; } 6145924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org CODE_AGE_LIST_COMPLETE(SC) 6155924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 6165924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6175924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org enum Id { 6185924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define RATE_ID(name, caption) k_##name, 6195924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_TIMER_LIST(RATE_ID) 6205924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef RATE_ID 6215924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define PERCENTAGE_ID(name, caption) k_##name, 6225924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_PERCENTAGE_LIST(PERCENTAGE_ID) 6235924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef PERCENTAGE_ID 6245924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define MEMORY_ID(name, caption) k_##name, 6255924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_MEMORY_LIST(MEMORY_ID) 6265924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef MEMORY_ID 6275924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define COUNTER_ID(name, caption) k_##name, 6285924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org STATS_COUNTER_LIST_1(COUNTER_ID) 6295924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org STATS_COUNTER_LIST_2(COUNTER_ID) 6305924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef COUNTER_ID 6315924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define COUNTER_ID(name) kCountOf##name, kSizeOf##name, 6325924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org INSTANCE_TYPE_LIST(COUNTER_ID) 6335924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef COUNTER_ID 6345924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define COUNTER_ID(name) kCountOfCODE_TYPE_##name, \ 6355924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org kSizeOfCODE_TYPE_##name, 6365924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org CODE_KIND_LIST(COUNTER_ID) 6375924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef COUNTER_ID 6385924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define COUNTER_ID(name) kCountOfFIXED_ARRAY__##name, \ 6395924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org kSizeOfFIXED_ARRAY__##name, 6405924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(COUNTER_ID) 6415924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef COUNTER_ID 6425924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define COUNTER_ID(name) kCountOfCODE_AGE__##name, \ 6435924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org kSizeOfCODE_AGE__##name, 6445924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org CODE_AGE_LIST_COMPLETE(COUNTER_ID) 6455924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef COUNTER_ID 6465924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org stats_counter_count 6475924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org }; 6485924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6496b0d137a5839eff3ce1a98ca9e12310027eff30fmachenbach@chromium.org void ResetCounters(); 6505924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org void ResetHistograms(); 6515924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6525924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org private: 6532b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org#define HR(name, caption, min, max, num_buckets) Histogram name##_; 6542b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org HISTOGRAM_RANGE_LIST(HR) 6552b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org#undef HR 6562b995c4171e67960088466af11110c6f6aeea4fcmachenbach@chromium.org 6575924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HT(name, caption) \ 6585924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HistogramTimer name##_; 6595924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_TIMER_LIST(HT) 6605924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HT 6615924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6625924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HP(name, caption) \ 6635924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org Histogram name##_; 6645924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_PERCENTAGE_LIST(HP) 6655924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HP 6665924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6675924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define HM(name, caption) \ 6685924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org Histogram name##_; 6695924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org HISTOGRAM_MEMORY_LIST(HM) 6705924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef HM 6715924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6725924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name, caption) \ 6735924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter name##_; 6745924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org STATS_COUNTER_LIST_1(SC) 6755924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org STATS_COUNTER_LIST_2(SC) 6765924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 6775924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6785924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \ 6795924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter size_of_##name##_; \ 6805924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter count_of_##name##_; 6815924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org INSTANCE_TYPE_LIST(SC) 6825924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 6835924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6845924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \ 6855924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter size_of_CODE_TYPE_##name##_; \ 6865924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter count_of_CODE_TYPE_##name##_; 6875924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org CODE_KIND_LIST(SC) 6885924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 6895924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6905924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \ 6915924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter size_of_FIXED_ARRAY_##name##_; \ 6925924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter count_of_FIXED_ARRAY_##name##_; 6935924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(SC) 6945924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 6955924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 6965924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#define SC(name) \ 6975924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter size_of_CODE_AGE_##name##_; \ 6985924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org StatsCounter count_of_CODE_AGE_##name##_; 6995924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org CODE_AGE_LIST_COMPLETE(SC) 7005924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org#undef SC 7015924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 7025924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org friend class Isolate; 7035924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 7045924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org explicit Counters(Isolate* isolate); 7055924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 7065924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org DISALLOW_IMPLICIT_CONSTRUCTORS(Counters); 7075924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org}; 7085924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org 70943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} } // namespace v8::internal 71043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif // V8_COUNTERS_H_ 712