Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: src/counters.cc

Issue 1681943002: [counter] Properly measure own-time of runtime counters. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@2016-02-08_builtins_timer_1678973002
Patch Set: fixing type Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/counters.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project 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 #include "src/counters.h" 5 #include "src/counters.h"
6 6
7 #include <iomanip> 7 #include <iomanip>
8 8
9 #include "src/base/platform/platform.h" 9 #include "src/base/platform/platform.h"
10 #include "src/isolate.h" 10 #include "src/isolate.h"
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 << std::string(86, '=') << std::endl; 205 << std::string(86, '=') << std::endl;
206 for (Entry& entry : entries) { 206 for (Entry& entry : entries) {
207 entry.SetTotal(total_time, total_call_count); 207 entry.SetTotal(total_time, total_call_count);
208 entry.Print(os); 208 entry.Print(os);
209 } 209 }
210 os << std::string(86, '-') << std::endl; 210 os << std::string(86, '-') << std::endl;
211 Entry("Total", total_time, total_call_count).Print(os); 211 Entry("Total", total_time, total_call_count).Print(os);
212 } 212 }
213 } 213 }
214 214
215 void Add(const char* name, base::TimeDelta time, uint32_t count) { 215 void Add(const char* name, RuntimeCallCounter counter) {
216 entries.push_back(Entry(name, time, count)); 216 entries.push_back(Entry(name, counter.time, counter.count));
217 total_time += time; 217 total_time += counter.time;
218 total_call_count += count; 218 total_call_count += counter.count;
219 } 219 }
220 220
221 private: 221 private:
222 class Entry { 222 class Entry {
223 public: 223 public:
224 Entry(const char* name, base::TimeDelta time, uint64_t count) 224 Entry(const char* name, base::TimeDelta time, uint64_t count)
225 : name_(name), 225 : name_(name),
226 time_(time.InMilliseconds()), 226 time_(time.InMilliseconds()),
227 count_(count), 227 count_(count),
228 time_percent_(100), 228 time_percent_(100),
(...skipping 27 matching lines...) Expand all
256 uint64_t count_; 256 uint64_t count_;
257 double time_percent_; 257 double time_percent_;
258 double count_percent_; 258 double count_percent_;
259 }; 259 };
260 260
261 uint64_t total_call_count = 0; 261 uint64_t total_call_count = 0;
262 base::TimeDelta total_time; 262 base::TimeDelta total_time;
263 std::vector<Entry> entries; 263 std::vector<Entry> entries;
264 }; 264 };
265 265
266 void RuntimeCallCounter::Reset() {
267 count = 0;
268 time = base::TimeDelta();
269 }
270
271 void RuntimeCallStats::Enter(RuntimeCallCounter* counter) {
272 counter->count++;
273 counter->parent_counter = current_counter;
274 current_counter = counter;
275 }
276 void RuntimeCallStats::Leave(base::TimeDelta time) {
277 RuntimeCallCounter* counter = current_counter;
278 counter->time += time;
279 current_counter = counter->parent_counter;
280 counter->parent_counter = NULL;
281 if (current_counter != NULL) {
282 current_counter->time -= time;
283 }
284 }
285
266 void RuntimeCallStats::Print(std::ostream& os) { 286 void RuntimeCallStats::Print(std::ostream& os) {
267 RuntimeCallStatEntries entries; 287 RuntimeCallStatEntries entries;
268 288
269 #define PRINT_COUNTER(name, nargs, ressize) \ 289 #define PRINT_COUNTER(name, nargs, ressize) \
270 if (this->Count_Runtime_##name > 0) { \ 290 if (this->Runtime_##name.count > 0) { \
271 entries.Add(#name, this->Time_Runtime_##name, this->Count_Runtime_##name); \ 291 entries.Add(#name, this->Runtime_##name); \
272 } 292 }
273 FOR_EACH_INTRINSIC(PRINT_COUNTER) 293 FOR_EACH_INTRINSIC(PRINT_COUNTER)
274 #undef PRINT_COUNTER 294 #undef PRINT_COUNTER
275 #define PRINT_COUNTER(name, type) \ 295 #define PRINT_COUNTER(name, type) \
276 if (this->Count_Builtin_##name > 0) { \ 296 if (this->Builtin_##name.count > 0) { \
277 entries.Add(#name, this->Time_Builtin_##name, this->Count_Builtin_##name); \ 297 entries.Add(#name, this->Builtin_##name); \
278 } 298 }
279 BUILTIN_LIST_C(PRINT_COUNTER) 299 BUILTIN_LIST_C(PRINT_COUNTER)
280 #undef PRINT_COUNTER 300 #undef PRINT_COUNTER
281 entries.Print(os); 301 entries.Print(os);
282 } 302 }
283 303
284 void RuntimeCallStats::Reset() { 304 void RuntimeCallStats::Reset() {
285 #define RESET_COUNTER(name, nargs, ressize) \ 305 #define RESET_COUNTER(name, nargs, ressize) this->Runtime_##name.Reset();
286 Count_Runtime_##name = 0; \
287 Time_Runtime_##name = base::TimeDelta();
288 FOR_EACH_INTRINSIC(RESET_COUNTER) 306 FOR_EACH_INTRINSIC(RESET_COUNTER)
289 #undef RESET_COUNTER 307 #undef RESET_COUNTER
290 #define RESET_COUNTER(name, type) \ 308 #define RESET_COUNTER(name, type) this->Builtin_##name.Reset();
291 Count_Builtin_##name = 0; \
292 Time_Builtin_##name = base::TimeDelta();
293 BUILTIN_LIST_C(RESET_COUNTER) 309 BUILTIN_LIST_C(RESET_COUNTER)
294 #undef RESET_COUNTER 310 #undef RESET_COUNTER
295 } 311 }
296 312
297 } // namespace internal 313 } // namespace internal
298 } // namespace v8 314 } // namespace v8
OLDNEW
« no previous file with comments | « src/counters.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698