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

Side by Side Diff: src/counters.cc

Issue 2887193002: Create a thread safe version of StatsCounters and use. (Closed)
Patch Set: fix nits of mtrofin Created 3 years, 7 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
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/builtins/builtins-definitions.h" 10 #include "src/builtins/builtins-definitions.h"
11 #include "src/isolate.h" 11 #include "src/isolate.h"
12 #include "src/log-inl.h" 12 #include "src/log-inl.h"
13 #include "src/log.h" 13 #include "src/log.h"
14 14
15 namespace v8 { 15 namespace v8 {
16 namespace internal { 16 namespace internal {
17 17
18 StatsTable::StatsTable() 18 StatsTable::StatsTable()
19 : lookup_function_(NULL), 19 : lookup_function_(NULL),
20 create_histogram_function_(NULL), 20 create_histogram_function_(NULL),
21 add_histogram_sample_function_(NULL) {} 21 add_histogram_sample_function_(NULL) {}
22 22
23 void StatsTable::SetCounterFunction(CounterLookupCallback f, Isolate* isolate) {
24 lookup_function_ = f;
25 if (!isolate->InitializeCounters()) isolate->counters()->ResetCounters();
26 }
23 27
24 int* StatsCounter::FindLocationInStatsTable() const { 28 int* StatsCounterBase::FindLocationInStatsTable() const {
25 return isolate_->stats_table()->FindLocation(name_); 29 return isolate_->stats_table()->FindLocation(name_);
26 } 30 }
27 31
32 StatsCounterThreadSafe::StatsCounterThreadSafe(Isolate* isolate,
33 const char* name)
34 : StatsCounterBase(isolate, name) {
35 GetPtr();
36 }
37
38 void StatsCounterThreadSafe::Set(int Value) {
39 if (ptr_) {
40 base::LockGuard<base::Mutex> Guard(&mutex_);
41 SetLoc(ptr_, Value);
42 }
43 }
44
45 void StatsCounterThreadSafe::Increment() {
46 if (ptr_) {
47 base::LockGuard<base::Mutex> Guard(&mutex_);
48 IncrementLoc(ptr_);
49 }
50 }
51
52 void StatsCounterThreadSafe::Increment(int value) {
53 if (ptr_) {
54 base::LockGuard<base::Mutex> Guard(&mutex_);
55 IncrementLoc(ptr_, value);
56 }
57 }
58
59 void StatsCounterThreadSafe::Decrement() {
60 if (ptr_) {
61 base::LockGuard<base::Mutex> Guard(&mutex_);
62 DecrementLoc(ptr_);
63 }
64 }
65
66 void StatsCounterThreadSafe::Decrement(int value) {
67 if (ptr_) {
68 base::LockGuard<base::Mutex> Guard(&mutex_);
69 DecrementLoc(ptr_, value);
70 }
71 }
72
73 int* StatsCounterThreadSafe::GetPtr() {
74 base::LockGuard<base::Mutex> Guard(&mutex_);
75 ptr_ = FindLocationInStatsTable();
76 return ptr_;
77 }
28 78
29 void Histogram::AddSample(int sample) { 79 void Histogram::AddSample(int sample) {
30 if (Enabled()) { 80 if (Enabled()) {
31 isolate()->stats_table()->AddHistogramSample(histogram_, sample); 81 isolate()->stats_table()->AddHistogramSample(histogram_, sample);
32 } 82 }
33 } 83 }
34 84
35 void* Histogram::CreateHistogram() const { 85 void* Histogram::CreateHistogram() const {
36 return isolate()->stats_table()-> 86 return isolate()->stats_table()->
37 CreateHistogram(name_, min_, max_, num_buckets_); 87 CreateHistogram(name_, min_, max_, num_buckets_);
(...skipping 15 matching lines...) Expand all
53 int64_t sample = resolution_ == MICROSECOND 103 int64_t sample = resolution_ == MICROSECOND
54 ? timer_.Elapsed().InMicroseconds() 104 ? timer_.Elapsed().InMicroseconds()
55 : timer_.Elapsed().InMilliseconds(); 105 : timer_.Elapsed().InMilliseconds();
56 // Compute the delta between start and stop, in microseconds. 106 // Compute the delta between start and stop, in microseconds.
57 AddSample(static_cast<int>(sample)); 107 AddSample(static_cast<int>(sample));
58 timer_.Stop(); 108 timer_.Stop();
59 } 109 }
60 Logger::CallEventLogger(isolate(), name(), Logger::END, true); 110 Logger::CallEventLogger(isolate(), name(), Logger::END, true);
61 } 111 }
62 112
63 113 Counters::Counters(Isolate* isolate)
64 Counters::Counters(Isolate* isolate) { 114 :
115 // clang format off
116 #define SC(name, caption) name##_(isolate, "c:" #caption),
117 STATS_COUNTER_TS_LIST(SC)
118 #undef SC
119 // clang format on
120 runtime_call_stats_() {
65 static const struct { 121 static const struct {
66 Histogram Counters::*member; 122 Histogram Counters::*member;
67 const char* caption; 123 const char* caption;
68 int min; 124 int min;
69 int max; 125 int max;
70 int num_buckets; 126 int num_buckets;
71 } kHistograms[] = { 127 } kHistograms[] = {
72 #define HR(name, caption, min, max, num_buckets) \ 128 #define HR(name, caption, min, max, num_buckets) \
73 {&Counters::name##_, #caption, min, max, num_buckets}, 129 {&Counters::name##_, #caption, min, max, num_buckets},
74 HISTOGRAM_RANGE_LIST(HR) 130 HISTOGRAM_RANGE_LIST(HR)
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 "c:" "V8.SizeOf_CODE_AGE-" #name}, 249 "c:" "V8.SizeOf_CODE_AGE-" #name},
194 CODE_AGE_LIST_COMPLETE(SC) 250 CODE_AGE_LIST_COMPLETE(SC)
195 #undef SC 251 #undef SC
196 }; 252 };
197 // clang-format on 253 // clang-format on
198 for (const auto& counter : kStatsCounters) { 254 for (const auto& counter : kStatsCounters) {
199 this->*counter.member = StatsCounter(isolate, counter.caption); 255 this->*counter.member = StatsCounter(isolate, counter.caption);
200 } 256 }
201 } 257 }
202 258
203
204 void Counters::ResetCounters() { 259 void Counters::ResetCounters() {
205 #define SC(name, caption) name##_.Reset(); 260 #define SC(name, caption) name##_.Reset();
206 STATS_COUNTER_LIST_1(SC) 261 STATS_COUNTER_LIST_1(SC)
207 STATS_COUNTER_LIST_2(SC) 262 STATS_COUNTER_LIST_2(SC)
208 #undef SC 263 #undef SC
209 264
265 #define SC(name, caption) name##_.Reset();
266 STATS_COUNTER_TS_LIST(SC)
267 #undef SC
268
210 #define SC(name) \ 269 #define SC(name) \
211 count_of_##name##_.Reset(); \ 270 count_of_##name##_.Reset(); \
212 size_of_##name##_.Reset(); 271 size_of_##name##_.Reset();
213 INSTANCE_TYPE_LIST(SC) 272 INSTANCE_TYPE_LIST(SC)
214 #undef SC 273 #undef SC
215 274
216 #define SC(name) \ 275 #define SC(name) \
217 count_of_CODE_TYPE_##name##_.Reset(); \ 276 count_of_CODE_TYPE_##name##_.Reset(); \
218 size_of_CODE_TYPE_##name##_.Reset(); 277 size_of_CODE_TYPE_##name##_.Reset();
219 CODE_KIND_LIST(SC) 278 CODE_KIND_LIST(SC)
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 RuntimeCallStats::counters) { 584 RuntimeCallStats::counters) {
526 RuntimeCallCounter* counter = &(this->*counter_id); 585 RuntimeCallCounter* counter = &(this->*counter_id);
527 if (counter->count() > 0) counter->Dump(value); 586 if (counter->count() > 0) counter->Dump(value);
528 } 587 }
529 588
530 in_use_ = false; 589 in_use_ = false;
531 } 590 }
532 591
533 } // namespace internal 592 } // namespace internal
534 } // namespace v8 593 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698