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

Side by Side Diff: src/counters.h

Issue 2464973002: [profiler] Make certain Runtime Call Stats fields atomic. (Closed)
Patch Set: Created 4 years, 1 month 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 | « no previous file | src/counters.cc » ('j') | 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 #ifndef V8_COUNTERS_H_ 5 #ifndef V8_COUNTERS_H_
6 #define V8_COUNTERS_H_ 6 #define V8_COUNTERS_H_
7 7
8 #include "include/v8.h" 8 #include "include/v8.h"
9 #include "src/allocation.h" 9 #include "src/allocation.h"
10 #include "src/base/atomic-utils.h"
10 #include "src/base/platform/elapsed-timer.h" 11 #include "src/base/platform/elapsed-timer.h"
11 #include "src/base/platform/time.h" 12 #include "src/base/platform/time.h"
12 #include "src/builtins/builtins.h" 13 #include "src/builtins/builtins.h"
13 #include "src/globals.h" 14 #include "src/globals.h"
14 #include "src/isolate.h" 15 #include "src/isolate.h"
15 #include "src/objects.h" 16 #include "src/objects.h"
16 #include "src/runtime/runtime.h" 17 #include "src/runtime/runtime.h"
17 #include "src/tracing/trace-event.h" 18 #include "src/tracing/trace-event.h"
18 #include "src/tracing/traced-value.h" 19 #include "src/tracing/traced-value.h"
19 20
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 490
490 const char* name; 491 const char* name;
491 int64_t count = 0; 492 int64_t count = 0;
492 base::TimeDelta time; 493 base::TimeDelta time;
493 }; 494 };
494 495
495 // RuntimeCallTimer is used to keep track of the stack of currently active 496 // RuntimeCallTimer is used to keep track of the stack of currently active
496 // timers used for properly measuring the own time of a RuntimeCallCounter. 497 // timers used for properly measuring the own time of a RuntimeCallCounter.
497 class RuntimeCallTimer { 498 class RuntimeCallTimer {
498 public: 499 public:
499 RuntimeCallTimer() {}
500 RuntimeCallCounter* counter() { return counter_; } 500 RuntimeCallCounter* counter() { return counter_; }
501 base::ElapsedTimer timer() { return timer_; } 501 base::ElapsedTimer timer() { return timer_; }
502 RuntimeCallTimer* parent() const { return parent_; } 502 RuntimeCallTimer* parent() const { return parent_.Value(); }
503 503
504 private: 504 private:
505 friend class RuntimeCallStats; 505 friend class RuntimeCallStats;
506 506
507 inline void Start(RuntimeCallCounter* counter, RuntimeCallTimer* parent) { 507 inline void Start(RuntimeCallCounter* counter, RuntimeCallTimer* parent) {
508 counter_ = counter; 508 counter_ = counter;
509 parent_ = parent; 509 parent_.SetValue(parent);
510 timer_.Start(); 510 timer_.Start();
511 } 511 }
512 512
513 inline RuntimeCallTimer* Stop() { 513 inline RuntimeCallTimer* Stop() {
514 base::TimeDelta delta = timer_.Elapsed(); 514 base::TimeDelta delta = timer_.Elapsed();
515 timer_.Stop(); 515 timer_.Stop();
516 counter_->count++; 516 counter_->count++;
517 counter_->time += delta; 517 counter_->time += delta;
518 if (parent_ != NULL) { 518 if (parent()) {
519 // Adjust parent timer so that it does not include sub timer's time. 519 // Adjust parent timer so that it does not include sub timer's time.
520 parent_->counter_->time -= delta; 520 parent()->counter_->time -= delta;
521 } 521 }
522 return parent_; 522 return parent();
523 } 523 }
524 524
525 inline void Elapsed() { 525 inline void Elapsed() {
526 base::TimeDelta delta = timer_.Elapsed(); 526 base::TimeDelta delta = timer_.Elapsed();
527 counter_->time += delta; 527 counter_->time += delta;
528 if (parent_ != nullptr) { 528 if (parent()) {
529 parent_->counter_->time -= delta; 529 parent()->counter_->time -= delta;
530 parent_->Elapsed(); 530 parent()->Elapsed();
531 } 531 }
532 timer_.Restart(); 532 timer_.Restart();
533 } 533 }
534 534
535 RuntimeCallCounter* counter_ = nullptr; 535 RuntimeCallCounter* counter_ = nullptr;
536 RuntimeCallTimer* parent_ = nullptr; 536 base::AtomicValue<RuntimeCallTimer*> parent_;
537 base::ElapsedTimer timer_; 537 base::ElapsedTimer timer_;
538 }; 538 };
539 539
540 #define FOR_EACH_API_COUNTER(V) \ 540 #define FOR_EACH_API_COUNTER(V) \
541 V(ArrayBuffer_Cast) \ 541 V(ArrayBuffer_Cast) \
542 V(ArrayBuffer_Neuter) \ 542 V(ArrayBuffer_Neuter) \
543 V(ArrayBuffer_New) \ 543 V(ArrayBuffer_New) \
544 V(Array_CloneElementAt) \ 544 V(Array_CloneElementAt) \
545 V(Array_New) \ 545 V(Array_New) \
546 V(BooleanObject_BooleanValue) \ 546 V(BooleanObject_BooleanValue) \
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 824
825 void Reset(); 825 void Reset();
826 void Print(std::ostream& os); 826 void Print(std::ostream& os);
827 V8_NOINLINE void Dump(v8::tracing::TracedValue* value); 827 V8_NOINLINE void Dump(v8::tracing::TracedValue* value);
828 828
829 RuntimeCallStats() { 829 RuntimeCallStats() {
830 Reset(); 830 Reset();
831 in_use_ = false; 831 in_use_ = false;
832 } 832 }
833 833
834 RuntimeCallTimer* current_timer() { return current_timer_; } 834 RuntimeCallTimer* current_timer() { return current_timer_.Value(); }
835 bool InUse() { return in_use_; } 835 bool InUse() { return in_use_; }
836 836
837 private: 837 private:
838 // Counter to track recursive time events. 838 // Counter to track recursive time events.
839 RuntimeCallTimer* current_timer_ = NULL; 839 base::AtomicValue<RuntimeCallTimer*> current_timer_;
840 // Used to track nested tracing scopes. 840 // Used to track nested tracing scopes.
841 bool in_use_; 841 bool in_use_;
842 }; 842 };
843 843
844 #define TRACE_RUNTIME_CALL_STATS(isolate, counter_name) \ 844 #define TRACE_RUNTIME_CALL_STATS(isolate, counter_name) \
845 do { \ 845 do { \
846 if (RuntimeCallStats::IsEnabled()) { \ 846 if (RuntimeCallStats::IsEnabled()) { \
847 RuntimeCallStats::CorrectCurrentCounterId( \ 847 RuntimeCallStats::CorrectCurrentCounterId( \
848 isolate->counters()->runtime_call_stats(), \ 848 isolate->counters()->runtime_call_stats(), \
849 &RuntimeCallStats::counter_name); \ 849 &RuntimeCallStats::counter_name); \
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 } 1291 }
1292 1292
1293 Isolate* isolate_ = nullptr; 1293 Isolate* isolate_ = nullptr;
1294 RuntimeCallTimer timer_; 1294 RuntimeCallTimer timer_;
1295 }; 1295 };
1296 1296
1297 } // namespace internal 1297 } // namespace internal
1298 } // namespace v8 1298 } // namespace v8
1299 1299
1300 #endif // V8_COUNTERS_H_ 1300 #endif // V8_COUNTERS_H_
OLDNEW
« no previous file with comments | « no previous file | src/counters.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698