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

Side by Side Diff: runtime/vm/compiler_stats.cc

Issue 1348383002: Fix compiler stats (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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 | « runtime/vm/benchmark_test.cc ('k') | runtime/vm/isolate.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 (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/compiler_stats.h" 5 #include "vm/compiler_stats.h"
6 6
7 #include "vm/flags.h" 7 #include "vm/flags.h"
8 #include "vm/log.h" 8 #include "vm/log.h"
9 #include "vm/object_graph.h" 9 #include "vm/object_graph.h"
10 #include "vm/timer.h" 10 #include "vm/timer.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 use_benchmark_output = true; 130 use_benchmark_output = true;
131 } 131 }
132 132
133 133
134 // Generate output for Golem benchmark harness. If the output format 134 // Generate output for Golem benchmark harness. If the output format
135 // changes, the parsing function in Golem must be updated. 135 // changes, the parsing function in Golem must be updated.
136 char* CompilerStats::BenchmarkOutput() { 136 char* CompilerStats::BenchmarkOutput() {
137 Update(); 137 Update();
138 Log log(PrintToStats); 138 Log log(PrintToStats);
139 LogBlock lb(Thread::Current(), &log); 139 LogBlock lb(Thread::Current(), &log);
140 log.Print("==== Compiler Stats for isolate '%s' ====\n",
141 isolate_->debugger_name());
142
140 log.Print("NumberOfTokens: %" Pd64 "\n", num_tokens_total); 143 log.Print("NumberOfTokens: %" Pd64 "\n", num_tokens_total);
141 log.Print("NumClassesParsed: %" Pd64 "\n", num_classes_parsed); 144 log.Print("NumClassesParsed: %" Pd64 "\n", num_classes_parsed);
142 log.Print("NumFunctionsCompiled: %" Pd64 "\n", num_functions_compiled); 145 log.Print("NumFunctionsCompiled: %" Pd64 "\n", num_functions_compiled);
143 log.Print("NumFunctionsOptimized: %" Pd64 "\n", num_functions_optimized); 146 log.Print("NumFunctionsOptimized: %" Pd64 "\n", num_functions_optimized);
144 log.Print("NumFunctionsParsed: %" Pd64 "\n", num_functions_parsed); 147 log.Print("NumFunctionsParsed: %" Pd64 "\n", num_functions_parsed);
145 148
146 // Scanner stats. 149 // Scanner stats.
147 int64_t scan_usecs = scanner_timer.TotalElapsedTime(); 150 int64_t scan_usecs = scanner_timer.TotalElapsedTime();
148 int64_t scan_speed = 151 int64_t scan_speed =
149 scan_usecs > 0 ? 1000 * num_tokens_scanned / scan_usecs : 0; 152 scan_usecs > 0 ? 1000 * num_tokens_scanned / scan_usecs : 0;
150 log.Print("NumTokensScanned: %" Pd64 " tokens\n", num_tokens_scanned); 153 log.Print("NumTokensScanned: %" Pd64 " tokens\n", num_tokens_scanned);
151 log.Print("ScannerTime: %" Pd64 " ms\n", scan_usecs / 1000); 154 log.Print("ScannerTime: %" Pd64 " ms\n", scan_usecs / 1000);
152 log.Print("ScannerSpeed: %" Pd64 " tokens/ms\n", scan_speed); 155 log.Print("ScannerSpeed: %" Pd64 " tokens/ms\n", scan_speed);
153 156
154 // Parser stats. 157 // Parser stats.
155 int64_t parse_usecs = parser_timer.TotalElapsedTime(); 158 int64_t parse_usecs = parser_timer.TotalElapsedTime();
156 int64_t parse_speed = 159 int64_t parse_speed =
157 parse_usecs > 0 ? 1000 * num_tokens_consumed / parse_usecs : 0; 160 parse_usecs > 0 ? 1000 * num_tokens_consumed / parse_usecs : 0;
158 log.Print("NumTokensParsed: %" Pd64 " tokens\n", num_tokens_consumed); 161 log.Print("NumTokensParsed: %" Pd64 " tokens\n", num_tokens_consumed);
159 log.Print("ParserTime: %" Pd64 " ms\n", parse_usecs / 1000); 162 log.Print("ParserTime: %" Pd64 " ms\n", parse_usecs / 1000);
160 log.Print("ParserSpeed: %" Pd64 " tokens/ms\n", parse_speed); 163 log.Print("ParserSpeed: %" Pd64 " tokens/ms\n", parse_speed);
161 164
162 // Compiler stats. 165 // Compiler stats.
163 int64_t codegen_usecs = codegen_timer.TotalElapsedTime(); 166 int64_t codegen_usecs = codegen_timer.TotalElapsedTime();
164 int64_t compile_usecs = scan_usecs+ parse_usecs + codegen_usecs; 167 int64_t compile_usecs = scan_usecs + parse_usecs + codegen_usecs;
168 int64_t compile_speed =
169 compile_usecs > 0 ? (1000 * num_func_tokens_compiled / compile_usecs) : 0;
165 log.Print("NumTokensCompiled: %" Pd64 " tokens\n", num_func_tokens_compiled); 170 log.Print("NumTokensCompiled: %" Pd64 " tokens\n", num_func_tokens_compiled);
166 log.Print("CompilerTime: %" Pd64 " ms\n", compile_usecs / 1000); 171 log.Print("CompilerTime: %" Pd64 " ms\n", compile_usecs / 1000);
167 172
168 log.Print("CompilerSpeed: %" Pd64 " tokens/ms\n", 173 log.Print("CompilerSpeed: %" Pd64 " tokens/ms\n", compile_speed);
169 compile_usecs > 0 ?
170 (1000 * num_func_tokens_compiled / compile_usecs) : 0);
171 log.Print("CodeSize: %" Pd64 " KB\n", total_code_size / 1024); 174 log.Print("CodeSize: %" Pd64 " KB\n", total_code_size / 1024);
172 log.Print("CodeDensity: %" Pd64 " tokens/KB\n", 175 int64_t code_density = total_instr_size > 0 ?
173 (1024 * num_func_tokens_compiled) / total_instr_size); 176 (num_func_tokens_compiled * 1024) / total_instr_size : 0;
177
178 log.Print("CodeDensity: %" Pd64 " tokens/KB\n", code_density);
174 log.Print("InstrSize: %" Pd64 " KB\n", total_instr_size / 1024); 179 log.Print("InstrSize: %" Pd64 " KB\n", total_instr_size / 1024);
175 log.Flush(); 180 log.Flush();
176 char* benchmark_text = text; 181 char* benchmark_text = text;
177 text = NULL; 182 text = NULL;
178 return benchmark_text; 183 return benchmark_text;
179 } 184 }
180 185
181 186
182 char* CompilerStats::PrintToZone() { 187 char* CompilerStats::PrintToZone() {
183 if (!FLAG_compiler_stats) { 188 if (!FLAG_compiler_stats) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 int64_t parse_usecs = parser_timer.TotalElapsedTime(); 223 int64_t parse_usecs = parser_timer.TotalElapsedTime();
219 int64_t parse_speed = 224 int64_t parse_speed =
220 parse_usecs > 0 ? 1000 * num_tokens_consumed / parse_usecs : 0; 225 parse_usecs > 0 ? 1000 * num_tokens_consumed / parse_usecs : 0;
221 log.Print("Parser time: %" Pd64 " ms\n", parse_usecs / 1000); 226 log.Print("Parser time: %" Pd64 " ms\n", parse_usecs / 1000);
222 log.Print("Parser speed: %" Pd64 " tokens/ms\n", 227 log.Print("Parser speed: %" Pd64 " tokens/ms\n",
223 parse_speed); 228 parse_speed);
224 229
225 int64_t codegen_usecs = codegen_timer.TotalElapsedTime(); 230 int64_t codegen_usecs = codegen_timer.TotalElapsedTime();
226 231
227 log.Print("==== Backend stats:\n"); 232 log.Print("==== Backend stats:\n");
228 log.Print("Code gen. time: %" Pd64 " ms\n", 233 log.Print("Code gen. time: %" Pd64 " ms\n", codegen_usecs / 1000);
229 codegen_usecs / 1000);
230 int64_t graphbuilder_usecs = graphbuilder_timer.TotalElapsedTime(); 234 int64_t graphbuilder_usecs = graphbuilder_timer.TotalElapsedTime();
231 log.Print(" Graph builder: %" Pd64 " ms\n", 235 log.Print(" Graph builder: %" Pd64 " ms\n",
232 graphbuilder_usecs / 1000); 236 graphbuilder_usecs / 1000);
233 int64_t ssa_usecs = ssa_timer.TotalElapsedTime(); 237 int64_t ssa_usecs = ssa_timer.TotalElapsedTime();
234 log.Print(" Graph SSA: %" Pd64 " ms\n", ssa_usecs / 1000); 238 log.Print(" Graph SSA: %" Pd64 " ms\n", ssa_usecs / 1000);
235 239
236 int64_t graphinliner_usecs = graphinliner_timer.TotalElapsedTime(); 240 int64_t graphinliner_usecs = graphinliner_timer.TotalElapsedTime();
237 log.Print(" Graph inliner: %" Pd64 " ms\n", 241 log.Print(" Graph inliner: %" Pd64 " ms\n",
238 graphinliner_usecs / 1000); 242 graphinliner_usecs / 1000);
239 int64_t graphinliner_parse_usecs = 243 int64_t graphinliner_parse_usecs =
(...skipping 19 matching lines...) Expand all
259 (graphoptimizer_usecs - graphinliner_usecs) / 1000); 263 (graphoptimizer_usecs - graphinliner_usecs) / 1000);
260 int64_t graphcompiler_usecs = graphcompiler_timer.TotalElapsedTime(); 264 int64_t graphcompiler_usecs = graphcompiler_timer.TotalElapsedTime();
261 log.Print(" Graph compiler: %" Pd64 " ms\n", 265 log.Print(" Graph compiler: %" Pd64 " ms\n",
262 graphcompiler_usecs / 1000); 266 graphcompiler_usecs / 1000);
263 int64_t codefinalizer_usecs = codefinalizer_timer.TotalElapsedTime(); 267 int64_t codefinalizer_usecs = codefinalizer_timer.TotalElapsedTime();
264 log.Print(" Code finalizer: %" Pd64 " ms\n", 268 log.Print(" Code finalizer: %" Pd64 " ms\n",
265 codefinalizer_usecs / 1000); 269 codefinalizer_usecs / 1000);
266 270
267 log.Print("==== Compiled code stats:\n"); 271 log.Print("==== Compiled code stats:\n");
268 int64_t compile_usecs = scan_usecs + parse_usecs + codegen_usecs; 272 int64_t compile_usecs = scan_usecs + parse_usecs + codegen_usecs;
273 int64_t compile_speed = compile_usecs > 0 ?
274 (1000 * num_func_tokens_compiled / compile_usecs) : 0;
269 log.Print("Functions parsed: %" Pd64 "\n", num_functions_parsed); 275 log.Print("Functions parsed: %" Pd64 "\n", num_functions_parsed);
270 log.Print("Functions compiled: %" Pd64 "\n", num_functions_compiled); 276 log.Print("Functions compiled: %" Pd64 "\n", num_functions_compiled);
271 log.Print(" optimized: %" Pd64 "\n", num_functions_optimized); 277 log.Print(" optimized: %" Pd64 "\n", num_functions_optimized);
272 log.Print("Compiler time: %" Pd64 " ms\n", compile_usecs / 1000); 278 log.Print("Compiler time: %" Pd64 " ms\n", compile_usecs / 1000);
273 log.Print("Tokens compiled: %" Pd64 "\n", num_func_tokens_compiled); 279 log.Print("Tokens compiled: %" Pd64 "\n", num_func_tokens_compiled);
274 log.Print("Compilation speed: %" Pd64 " tokens/ms\n", 280 log.Print("Compilation speed: %" Pd64 " tokens/ms\n", compile_speed);
275 (1000 * num_func_tokens_compiled) / compile_usecs); 281 int64_t code_density = total_instr_size > 0 ?
276 log.Print("Code density: %" Pd64 " tokens per KB\n", 282 (num_func_tokens_compiled * 1024) / total_instr_size : 0;
277 (num_func_tokens_compiled * 1024) / total_instr_size); 283 log.Print("Code density: %" Pd64 " tokens per KB\n", code_density);
278 log.Print("Code size: %" Pd64 " KB\n", total_code_size / 1024); 284 log.Print("Code size: %" Pd64 " KB\n", total_code_size / 1024);
279 log.Print(" Instr size: %" Pd64 " KB\n", 285 log.Print(" Instr size: %" Pd64 " KB\n",
280 total_instr_size / 1024); 286 total_instr_size / 1024);
281 log.Print(" Pc Desc size: %" Pd64 " KB\n", pc_desc_size / 1024); 287 log.Print(" Pc Desc size: %" Pd64 " KB\n", pc_desc_size / 1024);
282 log.Print(" VarDesc size: %" Pd64 " KB\n", vardesc_size / 1024); 288 log.Print(" VarDesc size: %" Pd64 " KB\n", vardesc_size / 1024);
283 log.Flush(); 289 log.Flush();
284 char* stats_text = text; 290 char* stats_text = text;
285 text = NULL; 291 text = NULL;
286 return stats_text; 292 return stats_text;
287 } 293 }
288 294
289 } // namespace dart 295 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/benchmark_test.cc ('k') | runtime/vm/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698