OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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/compiler-dispatcher/compiler-dispatcher-tracer.h" | 5 #include "src/compiler-dispatcher/compiler-dispatcher-tracer.h" |
6 | 6 |
7 #include "src/isolate.h" | 7 #include "src/isolate.h" |
8 #include "src/utils.h" | 8 #include "src/utils.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 21 matching lines...) Expand all Loading... |
32 switch (scope_id_) { | 32 switch (scope_id_) { |
33 case ScopeID::kPrepareToParse: | 33 case ScopeID::kPrepareToParse: |
34 tracer_->RecordPrepareToParse(elapsed); | 34 tracer_->RecordPrepareToParse(elapsed); |
35 break; | 35 break; |
36 case ScopeID::kParse: | 36 case ScopeID::kParse: |
37 tracer_->RecordParse(elapsed, num_); | 37 tracer_->RecordParse(elapsed, num_); |
38 break; | 38 break; |
39 case ScopeID::kFinalizeParsing: | 39 case ScopeID::kFinalizeParsing: |
40 tracer_->RecordFinalizeParsing(elapsed); | 40 tracer_->RecordFinalizeParsing(elapsed); |
41 break; | 41 break; |
42 case ScopeID::kAnalyze: | |
43 tracer_->RecordAnalyze(elapsed); | |
44 break; | |
45 case ScopeID::kPrepareToCompile: | 42 case ScopeID::kPrepareToCompile: |
46 tracer_->RecordPrepareToCompile(elapsed); | 43 tracer_->RecordPrepareToCompile(elapsed); |
47 break; | 44 break; |
48 case ScopeID::kCompile: | 45 case ScopeID::kCompile: |
49 tracer_->RecordCompile(elapsed, num_); | 46 tracer_->RecordCompile(elapsed, num_); |
50 break; | 47 break; |
51 case ScopeID::kFinalizeCompiling: | 48 case ScopeID::kFinalizeCompiling: |
52 tracer_->RecordFinalizeCompiling(elapsed); | 49 tracer_->RecordFinalizeCompiling(elapsed); |
53 break; | 50 break; |
54 } | 51 } |
55 } | 52 } |
56 | 53 |
57 // static | 54 // static |
58 const char* CompilerDispatcherTracer::Scope::Name(ScopeID scope_id) { | 55 const char* CompilerDispatcherTracer::Scope::Name(ScopeID scope_id) { |
59 switch (scope_id) { | 56 switch (scope_id) { |
60 case ScopeID::kPrepareToParse: | 57 case ScopeID::kPrepareToParse: |
61 return "V8.BackgroundCompile_PrepareToParse"; | 58 return "V8.BackgroundCompile_PrepareToParse"; |
62 case ScopeID::kParse: | 59 case ScopeID::kParse: |
63 return "V8.BackgroundCompile_Parse"; | 60 return "V8.BackgroundCompile_Parse"; |
64 case ScopeID::kFinalizeParsing: | 61 case ScopeID::kFinalizeParsing: |
65 return "V8.BackgroundCompile_FinalizeParsing"; | 62 return "V8.BackgroundCompile_FinalizeParsing"; |
66 case ScopeID::kAnalyze: | |
67 return "V8.BackgroundCompile_Analyze"; | |
68 case ScopeID::kPrepareToCompile: | 63 case ScopeID::kPrepareToCompile: |
69 return "V8.BackgroundCompile_PrepareToCompile"; | 64 return "V8.BackgroundCompile_PrepareToCompile"; |
70 case ScopeID::kCompile: | 65 case ScopeID::kCompile: |
71 return "V8.BackgroundCompile_Compile"; | 66 return "V8.BackgroundCompile_Compile"; |
72 case ScopeID::kFinalizeCompiling: | 67 case ScopeID::kFinalizeCompiling: |
73 return "V8.BackgroundCompile_FinalizeCompiling"; | 68 return "V8.BackgroundCompile_FinalizeCompiling"; |
74 } | 69 } |
75 UNREACHABLE(); | 70 UNREACHABLE(); |
76 return nullptr; | 71 return nullptr; |
77 } | 72 } |
(...skipping 17 matching lines...) Expand all Loading... |
95 size_t source_length) { | 90 size_t source_length) { |
96 base::LockGuard<base::Mutex> lock(&mutex_); | 91 base::LockGuard<base::Mutex> lock(&mutex_); |
97 parse_events_.Push(std::make_pair(source_length, duration_ms)); | 92 parse_events_.Push(std::make_pair(source_length, duration_ms)); |
98 } | 93 } |
99 | 94 |
100 void CompilerDispatcherTracer::RecordFinalizeParsing(double duration_ms) { | 95 void CompilerDispatcherTracer::RecordFinalizeParsing(double duration_ms) { |
101 base::LockGuard<base::Mutex> lock(&mutex_); | 96 base::LockGuard<base::Mutex> lock(&mutex_); |
102 finalize_parsing_events_.Push(duration_ms); | 97 finalize_parsing_events_.Push(duration_ms); |
103 } | 98 } |
104 | 99 |
105 void CompilerDispatcherTracer::RecordAnalyze(double duration_ms) { | |
106 base::LockGuard<base::Mutex> lock(&mutex_); | |
107 analyze_events_.Push(duration_ms); | |
108 } | |
109 | |
110 void CompilerDispatcherTracer::RecordPrepareToCompile(double duration_ms) { | 100 void CompilerDispatcherTracer::RecordPrepareToCompile(double duration_ms) { |
111 base::LockGuard<base::Mutex> lock(&mutex_); | 101 base::LockGuard<base::Mutex> lock(&mutex_); |
112 prepare_compile_events_.Push(duration_ms); | 102 prepare_compile_events_.Push(duration_ms); |
113 } | 103 } |
114 | 104 |
115 void CompilerDispatcherTracer::RecordCompile(double duration_ms, | 105 void CompilerDispatcherTracer::RecordCompile(double duration_ms, |
116 size_t ast_size_in_bytes) { | 106 size_t ast_size_in_bytes) { |
117 base::LockGuard<base::Mutex> lock(&mutex_); | 107 base::LockGuard<base::Mutex> lock(&mutex_); |
118 compile_events_.Push(std::make_pair(ast_size_in_bytes, duration_ms)); | 108 compile_events_.Push(std::make_pair(ast_size_in_bytes, duration_ms)); |
119 } | 109 } |
(...skipping 11 matching lines...) Expand all Loading... |
131 double CompilerDispatcherTracer::EstimateParseInMs(size_t source_length) const { | 121 double CompilerDispatcherTracer::EstimateParseInMs(size_t source_length) const { |
132 base::LockGuard<base::Mutex> lock(&mutex_); | 122 base::LockGuard<base::Mutex> lock(&mutex_); |
133 return Estimate(parse_events_, source_length); | 123 return Estimate(parse_events_, source_length); |
134 } | 124 } |
135 | 125 |
136 double CompilerDispatcherTracer::EstimateFinalizeParsingInMs() const { | 126 double CompilerDispatcherTracer::EstimateFinalizeParsingInMs() const { |
137 base::LockGuard<base::Mutex> lock(&mutex_); | 127 base::LockGuard<base::Mutex> lock(&mutex_); |
138 return Average(finalize_parsing_events_); | 128 return Average(finalize_parsing_events_); |
139 } | 129 } |
140 | 130 |
141 double CompilerDispatcherTracer::EstimateAnalyzeInMs() const { | |
142 base::LockGuard<base::Mutex> lock(&mutex_); | |
143 return Average(analyze_events_); | |
144 } | |
145 | |
146 double CompilerDispatcherTracer::EstimatePrepareToCompileInMs() const { | 131 double CompilerDispatcherTracer::EstimatePrepareToCompileInMs() const { |
147 base::LockGuard<base::Mutex> lock(&mutex_); | 132 base::LockGuard<base::Mutex> lock(&mutex_); |
148 return Average(prepare_compile_events_); | 133 return Average(prepare_compile_events_); |
149 } | 134 } |
150 | 135 |
151 double CompilerDispatcherTracer::EstimateCompileInMs( | 136 double CompilerDispatcherTracer::EstimateCompileInMs( |
152 size_t ast_size_in_bytes) const { | 137 size_t ast_size_in_bytes) const { |
153 base::LockGuard<base::Mutex> lock(&mutex_); | 138 base::LockGuard<base::Mutex> lock(&mutex_); |
154 return Estimate(compile_events_, ast_size_in_bytes); | 139 return Estimate(compile_events_, ast_size_in_bytes); |
155 } | 140 } |
156 | 141 |
157 double CompilerDispatcherTracer::EstimateFinalizeCompilingInMs() const { | 142 double CompilerDispatcherTracer::EstimateFinalizeCompilingInMs() const { |
158 base::LockGuard<base::Mutex> lock(&mutex_); | 143 base::LockGuard<base::Mutex> lock(&mutex_); |
159 return Average(finalize_compiling_events_); | 144 return Average(finalize_compiling_events_); |
160 } | 145 } |
161 | 146 |
162 void CompilerDispatcherTracer::DumpStatistics() const { | 147 void CompilerDispatcherTracer::DumpStatistics() const { |
163 PrintF( | 148 PrintF( |
164 "CompilerDispatcherTracer: " | 149 "CompilerDispatcherTracer: " |
165 "prepare_parsing=%.2lfms parsing=%.2lfms/kb finalize_parsing=%.2lfms " | 150 "prepare_parsing=%.2lfms parsing=%.2lfms/kb finalize_parsing=%.2lfms " |
166 "analyze=%.2lfms prepare_compiling=%.2lfms compiling=%.2lfms/kb " | 151 "prepare_compiling=%.2lfms compiling=%.2lfms/kb " |
167 "finalize_compiling=%.2lfms\n", | 152 "finalize_compilig=%.2lfms\n", |
168 EstimatePrepareToParseInMs(), EstimateParseInMs(1 * KB), | 153 EstimatePrepareToParseInMs(), EstimateParseInMs(1 * KB), |
169 EstimateFinalizeParsingInMs(), EstimateAnalyzeInMs(), | 154 EstimateFinalizeParsingInMs(), EstimatePrepareToCompileInMs(), |
170 EstimatePrepareToCompileInMs(), EstimateCompileInMs(1 * KB), | 155 EstimateCompileInMs(1 * KB), EstimateFinalizeCompilingInMs()); |
171 EstimateFinalizeCompilingInMs()); | |
172 } | 156 } |
173 | 157 |
174 double CompilerDispatcherTracer::Average( | 158 double CompilerDispatcherTracer::Average( |
175 const base::RingBuffer<double>& buffer) { | 159 const base::RingBuffer<double>& buffer) { |
176 if (buffer.Count() == 0) return 0.0; | 160 if (buffer.Count() == 0) return 0.0; |
177 double sum = buffer.Sum([](double a, double b) { return a + b; }, 0.0); | 161 double sum = buffer.Sum([](double a, double b) { return a + b; }, 0.0); |
178 return sum / buffer.Count(); | 162 return sum / buffer.Count(); |
179 } | 163 } |
180 | 164 |
181 double CompilerDispatcherTracer::Estimate( | 165 double CompilerDispatcherTracer::Estimate( |
182 const base::RingBuffer<std::pair<size_t, double>>& buffer, size_t num) { | 166 const base::RingBuffer<std::pair<size_t, double>>& buffer, size_t num) { |
183 if (buffer.Count() == 0) return kEstimatedRuntimeWithoutData; | 167 if (buffer.Count() == 0) return kEstimatedRuntimeWithoutData; |
184 std::pair<size_t, double> sum = buffer.Sum( | 168 std::pair<size_t, double> sum = buffer.Sum( |
185 [](std::pair<size_t, double> a, std::pair<size_t, double> b) { | 169 [](std::pair<size_t, double> a, std::pair<size_t, double> b) { |
186 return std::make_pair(a.first + b.first, a.second + b.second); | 170 return std::make_pair(a.first + b.first, a.second + b.second); |
187 }, | 171 }, |
188 std::make_pair(0, 0.0)); | 172 std::make_pair(0, 0.0)); |
189 return num * (sum.second / sum.first); | 173 return num * (sum.second / sum.first); |
190 } | 174 } |
191 | 175 |
192 } // namespace internal | 176 } // namespace internal |
193 } // namespace v8 | 177 } // namespace v8 |
OLD | NEW |