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

Side by Side Diff: lib/info.dart

Issue 1372333002: Add measurements and send-metrics to dart2js's info. (Closed) Base URL: git@github.com:dart-lang/dart2js_info.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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 /// Data produced by dart2js when run with the `--dump-info` flag. 5 /// Data produced by dart2js when run with the `--dump-info` flag.
6 library dart2js_info.info; 6 library dart2js_info.info;
7 7
8 import 'src/measurements.dart';
9 export 'src/measurements.dart';
10
8 /// Common interface to many pieces of information generated by the dart2js 11 /// Common interface to many pieces of information generated by the dart2js
9 /// compiler. 12 /// compiler that are directly associated with an element (compilation unit,
13 /// library, class, function, or field).
10 abstract class Info { 14 abstract class Info {
11 /// An identifier for the kind of information. 15 /// An identifier for the kind of information.
12 InfoKind get kind; 16 InfoKind get kind;
13 17
14 /// Name of the element associated with this info. 18 /// Name of the element associated with this info.
15 String name; 19 String name;
16 20
17 /// An id to uniquely identify this info among infos of the same [kind]. 21 /// An id to uniquely identify this info among infos of the same [kind].
18 int get id; 22 int get id;
19 23
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 ..coverageId = json['coverageId'] 366 ..coverageId = json['coverageId']
363 ..outputUnit = parseId(json['outputUnit']) 367 ..outputUnit = parseId(json['outputUnit'])
364 ..size = json['size'] 368 ..size = json['size']
365 ..type = json['type'] 369 ..type = json['type']
366 ..returnType = json['returnType'] 370 ..returnType = json['returnType']
367 ..inferredReturnType = json['inferredReturnType'] 371 ..inferredReturnType = json['inferredReturnType']
368 ..parameters = json['parameters'].map(parseParameter).toList() 372 ..parameters = json['parameters'].map(parseParameter).toList()
369 ..code = json['code'] 373 ..code = json['code']
370 ..sideEffects = json['sideEffects'] 374 ..sideEffects = json['sideEffects']
371 ..modifiers = parseModifiers(json['modifiers']) 375 ..modifiers = parseModifiers(json['modifiers'])
372 ..closures = json['children'].map(parseId).toList(); 376 ..closures = json['children'].map(parseId).toList()
377 ..measurements = parseMeasurements(json['measurements']);
373 } 378 }
374 379
375 ParameterInfo parseParameter(Map json) => 380 ParameterInfo parseParameter(Map json) =>
376 new ParameterInfo(json['name'], json['type'], json['declaredType']); 381 new ParameterInfo(json['name'], json['type'], json['declaredType']);
377 382
383 Measurements parseMeasurements(Map json) {
384 if (json == null) return null;
385 var uri = json['sourceFile'];
386 var res = new Measurements(uri == null ? null : Uri.parse(uri));
387 for (var key in json.keys) {
388 var value = json[key];
389 if (value == null) continue;
390 if (key == 'entries') {
391 value.forEach((metricName, entries) {
392 var metric = Metric.fromJson(metricName);
393 for (var i = 0; i < entries.length; i += 2) {
394 res.record(metric, entries[i], entries[i + 1]);
395 }
396 });
397 } else {
398 res.counters[Metric.fromJson(key)] = value;
399 }
400 }
401 return res;
402 }
403
378 FunctionModifiers parseModifiers(Map<String, bool> json) { 404 FunctionModifiers parseModifiers(Map<String, bool> json) {
379 return new FunctionModifiers( 405 return new FunctionModifiers(
380 isStatic: json['static'] == true, 406 isStatic: json['static'] == true,
381 isConst: json['const'] == true, 407 isConst: json['const'] == true,
382 isFactory: json['factory'] == true, 408 isFactory: json['factory'] == true,
383 isExternal: json['external'] == true); 409 isExternal: json['external'] == true);
384 } 410 }
385 411
386 Info parseId(String serializedId) => registry.putIfAbsent(serializedId, () { 412 Info parseId(String serializedId) => registry.putIfAbsent(serializedId, () {
387 if (serializedId == null) { 413 if (serializedId == null) {
(...skipping 27 matching lines...) Expand all
415 441
416 /// Top level fields defined within the library. 442 /// Top level fields defined within the library.
417 final List<FieldInfo> topLevelVariables = <FieldInfo>[]; 443 final List<FieldInfo> topLevelVariables = <FieldInfo>[];
418 444
419 /// Classes defined within the library. 445 /// Classes defined within the library.
420 final List<ClassInfo> classes = <ClassInfo>[]; 446 final List<ClassInfo> classes = <ClassInfo>[];
421 447
422 /// Typedefs defined within the library. 448 /// Typedefs defined within the library.
423 final List<TypedefInfo> typedefs = <TypedefInfo>[]; 449 final List<TypedefInfo> typedefs = <TypedefInfo>[];
424 450
451 // TODO(sigmund): add here a list of parts. That can help us improve how we
452 // encode source-span information in metrics (rather than include the uri on
453 // each function, include an index into this list).
454
425 static int _id = 0; 455 static int _id = 0;
426 456
427 /// Whether there is any information recorded for this library. 457 /// Whether there is any information recorded for this library.
428 bool get isEmpty => 458 bool get isEmpty =>
429 topLevelFunctions.isEmpty && topLevelVariables.isEmpty && classes.isEmpty; 459 topLevelFunctions.isEmpty && topLevelVariables.isEmpty && classes.isEmpty;
430 460
431 LibraryInfo(String name, this.uri, OutputUnitInfo outputUnit, int size) 461 LibraryInfo(String name, this.uri, OutputUnitInfo outputUnit, int size)
432 : super(InfoKind.library, _id++, name, outputUnit, size, null); 462 : super(InfoKind.library, _id++, name, outputUnit, size, null);
433 463
434 LibraryInfo._(String serializedId) : super._fromId(serializedId); 464 LibraryInfo._(String serializedId) : super._fromId(serializedId);
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 /// Side-effects. 641 /// Side-effects.
612 // TODO(sigmund): serialize more precisely, not just a string representation. 642 // TODO(sigmund): serialize more precisely, not just a string representation.
613 String sideEffects; 643 String sideEffects;
614 644
615 /// How many function calls were inlined into this function. 645 /// How many function calls were inlined into this function.
616 int inlinedCount; 646 int inlinedCount;
617 647
618 /// The actual generated code. 648 /// The actual generated code.
619 String code; 649 String code;
620 650
651 /// Measurements collected for this function.
652 Measurements measurements;
653
621 FunctionInfo( 654 FunctionInfo(
622 {String name, 655 {String name,
623 String coverageId, 656 String coverageId,
624 OutputUnitInfo outputUnit, 657 OutputUnitInfo outputUnit,
625 int size: 0, 658 int size: 0,
626 this.functionKind, 659 this.functionKind,
627 this.modifiers, 660 this.modifiers,
628 this.closures, 661 this.closures,
629 this.type, 662 this.type,
630 this.returnType, 663 this.returnType,
631 this.inferredReturnType, 664 this.inferredReturnType,
632 this.parameters, 665 this.parameters,
633 this.sideEffects, 666 this.sideEffects,
634 this.inlinedCount, 667 this.inlinedCount,
635 this.code}) 668 this.code,
669 this.measurements})
636 : super(InfoKind.function, _ids++, name, outputUnit, size, coverageId); 670 : super(InfoKind.function, _ids++, name, outputUnit, size, coverageId);
637 671
638 FunctionInfo._(String serializedId) : super._fromId(serializedId); 672 FunctionInfo._(String serializedId) : super._fromId(serializedId);
639 673
640 Map toJson() => super.toJson() 674 Map toJson() => super.toJson()
641 ..addAll({ 675 ..addAll({
642 'children': closures.map((i) => i.serializedId).toList(), 676 'children': closures.map((i) => i.serializedId).toList(),
643 'modifiers': modifiers.toJson(), 677 'modifiers': modifiers.toJson(),
644 'returnType': returnType, 678 'returnType': returnType,
645 'inferredReturnType': inferredReturnType, 679 'inferredReturnType': inferredReturnType,
646 'parameters': parameters.map((p) => p.toJson()).toList(), 680 'parameters': parameters.map((p) => p.toJson()).toList(),
647 'sideEffects': sideEffects, 681 'sideEffects': sideEffects,
648 'inlinedCount': inlinedCount, 682 'inlinedCount': inlinedCount,
649 'code': code, 683 'code': code,
650 'type': type, 684 'type': type,
685 'measurements': measurements?.toJson(),
651 // Note: version 3.2 of dump-info serializes `uses` in a section called 686 // Note: version 3.2 of dump-info serializes `uses` in a section called
652 // `holding` at the top-level. 687 // `holding` at the top-level.
653 }); 688 });
654 689
655 void accept(InfoVisitor visitor) => visitor.visitFunction(this); 690 void accept(InfoVisitor visitor) => visitor.visitFunction(this);
656 } 691 }
657 692
658 /// Information about how a dependency is used. 693 /// Information about how a dependency is used.
659 class DependencyInfo { 694 class DependencyInfo {
660 /// The dependency, either a FunctionInfo or FieldInfo. 695 /// The dependency, either a FunctionInfo or FieldInfo.
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 } 845 }
811 846
812 visitField(FieldInfo info) { 847 visitField(FieldInfo info) {
813 info.closures.forEach(visitFunction); 848 info.closures.forEach(visitFunction);
814 } 849 }
815 850
816 visitFunction(FunctionInfo info) { 851 visitFunction(FunctionInfo info) {
817 info.closures.forEach(visitFunction); 852 info.closures.forEach(visitFunction);
818 } 853 }
819 } 854 }
OLDNEW
« no previous file with comments | « bin/inference/server.dart ('k') | lib/src/measurements.dart » ('j') | lib/src/table.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698