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

Side by Side Diff: pkg/compiler/lib/src/dump_info.dart

Issue 1220043005: dart2js send stats, includes: (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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 | « DEPS ('k') | pkg/compiler/lib/src/resolution/tree_elements.dart » ('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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library dump_info; 5 library dump_info;
6 6
7 import 'dart:convert' 7 import 'dart:convert'
8 show HtmlEscape, JsonEncoder, StringConversionSink, ChunkedConversionSink; 8 show HtmlEscape, JsonEncoder, StringConversionSink, ChunkedConversionSink;
9 9
10 import 'package:dart2js_info/info.dart'; 10 import 'package:dart2js_info/info.dart';
(...skipping 13 matching lines...) Expand all
24 TypeMask; 24 TypeMask;
25 import 'deferred_load.dart' show 25 import 'deferred_load.dart' show
26 OutputUnit; 26 OutputUnit;
27 import 'js_backend/js_backend.dart' show 27 import 'js_backend/js_backend.dart' show
28 JavaScriptBackend; 28 JavaScriptBackend;
29 import 'js_emitter/full_emitter/emitter.dart' as full show 29 import 'js_emitter/full_emitter/emitter.dart' as full show
30 Emitter; 30 Emitter;
31 import 'js/js.dart' as jsAst; 31 import 'js/js.dart' as jsAst;
32 import 'universe/universe.dart' show 32 import 'universe/universe.dart' show
33 UniverseSelector; 33 UniverseSelector;
34 import 'stats/builder.dart';
34 35
35 class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> { 36 class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> {
36 final Compiler compiler; 37 final Compiler compiler;
37 38
38 final AllInfo result = new AllInfo(); 39 final AllInfo result = new AllInfo();
39 final Map<Element, Info> _elementToInfo = <Element, Info>{}; 40 final Map<Element, Info> _elementToInfo = <Element, Info>{};
40 final Map<ConstantValue, Info> _constantToInfo = <ConstantValue, Info>{}; 41 final Map<ConstantValue, Info> _constantToInfo = <ConstantValue, Info>{};
41 final Map<OutputUnit, OutputUnitInfo> _outputToInfo = {}; 42 final Map<OutputUnit, OutputUnitInfo> _outputToInfo = {};
42 43
43 ElementInfoCollector(this.compiler); 44 ElementInfoCollector(this.compiler);
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 classInfo.fields.isEmpty && 220 classInfo.fields.isEmpty &&
220 classInfo.functions.isEmpty) { 221 classInfo.functions.isEmpty) {
221 return null; 222 return null;
222 } 223 }
223 result.classes.add(classInfo); 224 result.classes.add(classInfo);
224 return classInfo; 225 return classInfo;
225 } 226 }
226 227
227 FunctionInfo visitFunctionElement(FunctionElement element, _) { 228 FunctionInfo visitFunctionElement(FunctionElement element, _) {
228 int size = compiler.dumpInfoTask.sizeOf(element); 229 int size = compiler.dumpInfoTask.sizeOf(element);
230 // TODO(sigmund): consider adding a small info to represent unreachable
231 // code here.
229 if (size == 0 && !shouldKeep(element)) return null; 232 if (size == 0 && !shouldKeep(element)) return null;
230 233
231 String name = element.name; 234 String name = element.name;
232 int kind = FunctionInfo.TOP_LEVEL_FUNCTION_KIND; 235 int kind = FunctionInfo.TOP_LEVEL_FUNCTION_KIND;
233 var enclosingElement = element.enclosingElement; 236 var enclosingElement = element.enclosingElement;
234 if (enclosingElement.isField || 237 if (enclosingElement.isField ||
235 enclosingElement.isFunction || 238 enclosingElement.isFunction ||
236 element.isClosure || 239 element.isClosure ||
237 enclosingElement.isConstructor) { 240 enclosingElement.isConstructor) {
238 kind = FunctionInfo.CLOSURE_FUNCTION_KIND; 241 kind = FunctionInfo.CLOSURE_FUNCTION_KIND;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 child.name = "${parent.name}.${child.name}"; 313 child.name = "${parent.name}.${child.name}";
311 } 314 }
312 nestedClosures.add(child); 315 nestedClosures.add(child);
313 child.parent = parent; 316 child.parent = parent;
314 size += child.size; 317 size += child.size;
315 } 318 }
316 } 319 }
317 } 320 }
318 info.closures = nestedClosures; 321 info.closures = nestedClosures;
319 result.functions.add(info); 322 result.functions.add(info);
323 if (const bool.fromEnvironment('send_stats')) {
324 info.measurements = collectSendMeasurements(element, compiler);
325 }
320 return info; 326 return info;
321 } 327 }
322 328
323 OutputUnitInfo _unitInfoForElement(Element element) { 329 OutputUnitInfo _unitInfoForElement(Element element) {
324 OutputUnit outputUnit = 330 OutputUnit outputUnit =
325 compiler.deferredLoadTask.outputUnitForElement(element); 331 compiler.deferredLoadTask.outputUnitForElement(element);
326 return _outputToInfo.putIfAbsent(outputUnit, () { 332 return _outputToInfo.putIfAbsent(outputUnit, () {
327 // Dump-info currently only works with the full emitter. If another 333 // Dump-info currently only works with the full emitter. If another
328 // emitter is used it will fail here. 334 // emitter is used it will fail here.
329 JavaScriptBackend backend = compiler.backend; 335 JavaScriptBackend backend = compiler.backend;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 List<jsAst.Node> code = _elementToNodes[element]; 485 List<jsAst.Node> code = _elementToNodes[element];
480 if (code == null) return null; 486 if (code == null) return null;
481 // Concatenate rendered ASTs. 487 // Concatenate rendered ASTs.
482 StringBuffer sb = new StringBuffer(); 488 StringBuffer sb = new StringBuffer();
483 for (jsAst.Node ast in code) { 489 for (jsAst.Node ast in code) {
484 sb.writeln(jsAst.prettyPrint(ast, compiler).getText()); 490 sb.writeln(jsAst.prettyPrint(ast, compiler).getText());
485 } 491 }
486 return sb.toString(); 492 return sb.toString();
487 } 493 }
488 494
489 void collectInfo() {
490 infoCollector = new ElementInfoCollector(compiler)..run();
491 }
492
493 void dumpInfo() { 495 void dumpInfo() {
494 measure(() { 496 measure(() {
495 if (infoCollector == null) { 497 infoCollector = new ElementInfoCollector(compiler)..run();
496 collectInfo();
497 }
498
499 StringBuffer jsonBuffer = new StringBuffer(); 498 StringBuffer jsonBuffer = new StringBuffer();
500 dumpInfoJson(jsonBuffer); 499 dumpInfoJson(jsonBuffer);
501 compiler.outputProvider('', 'info.json') 500 compiler.outputProvider('', 'info.json')
502 ..add(jsonBuffer.toString()) 501 ..add(jsonBuffer.toString())
503 ..close(); 502 ..close();
504 }); 503 });
505 } 504 }
506 505
507 void dumpInfoJson(StringSink buffer) { 506 void dumpInfoJson(StringSink buffer) {
508 JsonEncoder encoder = const JsonEncoder.withIndent(' '); 507 JsonEncoder encoder = const JsonEncoder.withIndent(' ');
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 559
561 ChunkedConversionSink<Object> sink = encoder.startChunkedConversion( 560 ChunkedConversionSink<Object> sink = encoder.startChunkedConversion(
562 new StringConversionSink.fromStringSink(buffer)); 561 new StringConversionSink.fromStringSink(buffer));
563 sink.add(result.toJson()); 562 sink.add(result.toJson());
564 compiler.reportInfo(NO_LOCATION_SPANNABLE, MessageKind.GENERIC, { 563 compiler.reportInfo(NO_LOCATION_SPANNABLE, MessageKind.GENERIC, {
565 'text': "View the dumped .info.json file at " 564 'text': "View the dumped .info.json file at "
566 "https://dart-lang.github.io/dump-info-visualizer" 565 "https://dart-lang.github.io/dump-info-visualizer"
567 }); 566 });
568 } 567 }
569 } 568 }
OLDNEW
« no previous file with comments | « DEPS ('k') | pkg/compiler/lib/src/resolution/tree_elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698