| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 #ifndef BASE_STATS_COUNTERS_H__ | 6 #ifndef BASE_STATS_COUNTERS_H__ |
| 7 #define BASE_STATS_COUNTERS_H__ | 7 #define BASE_STATS_COUNTERS_H__ |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include "base/stats_table.h" | 10 #include "base/stats_table.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 #define DSIMPLE_STATS_COUNTER(name) do {} while (0) | 67 #define DSIMPLE_STATS_COUNTER(name) do {} while (0) |
| 68 #define DRATE_COUNTER(name, duration) do {} while (0) | 68 #define DRATE_COUNTER(name, duration) do {} while (0) |
| 69 | 69 |
| 70 #endif // NDEBUG | 70 #endif // NDEBUG |
| 71 | 71 |
| 72 //------------------------------------------------------------------------------ | 72 //------------------------------------------------------------------------------ |
| 73 // StatsCounter represents a counter in the StatsTable class. | 73 // StatsCounter represents a counter in the StatsTable class. |
| 74 class StatsCounter { | 74 class StatsCounter { |
| 75 public: | 75 public: |
| 76 // Create a StatsCounter object. | 76 // Create a StatsCounter object. |
| 77 explicit StatsCounter(const std::wstring& name) | 77 explicit StatsCounter(const std::string& name) |
| 78 : counter_id_(-1) { | 78 : counter_id_(-1) { |
| 79 // We prepend the name with 'c:' to indicate that it is a counter. | 79 // We prepend the name with 'c:' to indicate that it is a counter. |
| 80 name_ = L"c:"; | 80 name_ = "c:"; |
| 81 name_.append(name); | 81 name_.append(name); |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 virtual ~StatsCounter() {} | 84 virtual ~StatsCounter() {} |
| 85 | 85 |
| 86 // Sets the counter to a specific value. | 86 // Sets the counter to a specific value. |
| 87 void Set(int value) { | 87 void Set(int value) { |
| 88 int* loc = GetPtr(); | 88 int* loc = GetPtr(); |
| 89 if (loc) *loc = value; | 89 if (loc) *loc = value; |
| 90 } | 90 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 // Returns the cached address of this counter location. | 139 // Returns the cached address of this counter location. |
| 140 int* GetPtr() { | 140 int* GetPtr() { |
| 141 StatsTable* table = StatsTable::current(); | 141 StatsTable* table = StatsTable::current(); |
| 142 if (!table) | 142 if (!table) |
| 143 return NULL; | 143 return NULL; |
| 144 | 144 |
| 145 // If counter_id_ is -1, then we haven't looked it up yet. | 145 // If counter_id_ is -1, then we haven't looked it up yet. |
| 146 if (counter_id_ == -1) { | 146 if (counter_id_ == -1) { |
| 147 counter_id_ = table->FindCounter(name_); | 147 counter_id_ = table->FindCounter(name_); |
| 148 if (table->GetSlot() == 0) { | 148 if (table->GetSlot() == 0) { |
| 149 if (!table->RegisterThread(L"")) { | 149 if (!table->RegisterThread("")) { |
| 150 // There is no room for this thread. This thread | 150 // There is no room for this thread. This thread |
| 151 // cannot use counters. | 151 // cannot use counters. |
| 152 counter_id_ = 0; | 152 counter_id_ = 0; |
| 153 return NULL; | 153 return NULL; |
| 154 } | 154 } |
| 155 } | 155 } |
| 156 } | 156 } |
| 157 | 157 |
| 158 // If counter_id_ is > 0, then we have a valid counter. | 158 // If counter_id_ is > 0, then we have a valid counter. |
| 159 if (counter_id_ > 0) | 159 if (counter_id_ > 0) |
| 160 return table->GetLocation(counter_id_, table->GetSlot()); | 160 return table->GetLocation(counter_id_, table->GetSlot()); |
| 161 | 161 |
| 162 // counter_id_ was zero, which means the table is full. | 162 // counter_id_ was zero, which means the table is full. |
| 163 return NULL; | 163 return NULL; |
| 164 } | 164 } |
| 165 | 165 |
| 166 std::wstring name_; | 166 std::string name_; |
| 167 // The counter id in the table. We initialize to -1 (an invalid value) | 167 // The counter id in the table. We initialize to -1 (an invalid value) |
| 168 // and then cache it once it has been looked up. The counter_id is | 168 // and then cache it once it has been looked up. The counter_id is |
| 169 // valid across all threads and processes. | 169 // valid across all threads and processes. |
| 170 int32 counter_id_; | 170 int32 counter_id_; |
| 171 }; | 171 }; |
| 172 | 172 |
| 173 | 173 |
| 174 // A StatsCounterTimer is a StatsCounter which keeps a timer during | 174 // A StatsCounterTimer is a StatsCounter which keeps a timer during |
| 175 // the scope of the StatsCounterTimer. On destruction, it will record | 175 // the scope of the StatsCounterTimer. On destruction, it will record |
| 176 // its time measurement. | 176 // its time measurement. |
| 177 class StatsCounterTimer : protected StatsCounter { | 177 class StatsCounterTimer : protected StatsCounter { |
| 178 public: | 178 public: |
| 179 // Constructs and starts the timer. | 179 // Constructs and starts the timer. |
| 180 explicit StatsCounterTimer(const std::wstring& name) { | 180 explicit StatsCounterTimer(const std::string& name) { |
| 181 // we prepend the name with 't:' to indicate that it is a timer. | 181 // we prepend the name with 't:' to indicate that it is a timer. |
| 182 name_ = L"t:"; | 182 name_ = "t:"; |
| 183 name_.append(name); | 183 name_.append(name); |
| 184 } | 184 } |
| 185 | 185 |
| 186 // Start the timer. | 186 // Start the timer. |
| 187 void Start() { | 187 void Start() { |
| 188 if (!Enabled()) | 188 if (!Enabled()) |
| 189 return; | 189 return; |
| 190 start_time_ = base::TimeTicks::Now(); | 190 start_time_ = base::TimeTicks::Now(); |
| 191 stop_time_ = base::TimeTicks(); | 191 stop_time_ = base::TimeTicks(); |
| 192 } | 192 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 223 base::TimeTicks start_time_; | 223 base::TimeTicks start_time_; |
| 224 base::TimeTicks stop_time_; | 224 base::TimeTicks stop_time_; |
| 225 }; | 225 }; |
| 226 | 226 |
| 227 // A StatsRate is a timer that keeps a count of the number of intervals added so | 227 // A StatsRate is a timer that keeps a count of the number of intervals added so |
| 228 // that several statistics can be produced: | 228 // that several statistics can be produced: |
| 229 // min, max, avg, count, total | 229 // min, max, avg, count, total |
| 230 class StatsRate : public StatsCounterTimer { | 230 class StatsRate : public StatsCounterTimer { |
| 231 public: | 231 public: |
| 232 // Constructs and starts the timer. | 232 // Constructs and starts the timer. |
| 233 explicit StatsRate(const wchar_t* name) | 233 explicit StatsRate(const char* name) |
| 234 : StatsCounterTimer(name), | 234 : StatsCounterTimer(name), |
| 235 counter_(name), | 235 counter_(name), |
| 236 largest_add_(std::wstring(L" ").append(name).append(L"MAX").c_str()) { | 236 largest_add_(std::string(" ").append(name).append("MAX").c_str()) { |
| 237 } | 237 } |
| 238 | 238 |
| 239 virtual void Add(int value) { | 239 virtual void Add(int value) { |
| 240 counter_.Increment(); | 240 counter_.Increment(); |
| 241 StatsCounterTimer::Add(value); | 241 StatsCounterTimer::Add(value); |
| 242 if (value > largest_add_.value()) | 242 if (value > largest_add_.value()) |
| 243 largest_add_.Set(value); | 243 largest_add_.Set(value); |
| 244 } | 244 } |
| 245 | 245 |
| 246 private: | 246 private: |
| (...skipping 17 matching lines...) Expand all Loading... |
| 264 void Stop() { | 264 void Stop() { |
| 265 timer_.Stop(); | 265 timer_.Stop(); |
| 266 } | 266 } |
| 267 | 267 |
| 268 private: | 268 private: |
| 269 T& timer_; | 269 T& timer_; |
| 270 }; | 270 }; |
| 271 | 271 |
| 272 #endif // BASE_STATS_COUNTERS_H__ | 272 #endif // BASE_STATS_COUNTERS_H__ |
| 273 | 273 |
| OLD | NEW |