| OLD | NEW |
| 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' show | 7 import 'dart:convert' |
| 8 ChunkedConversionSink, | 8 show ChunkedConversionSink, HtmlEscape, JsonEncoder, StringConversionSink; |
| 9 HtmlEscape, | |
| 10 JsonEncoder, | |
| 11 StringConversionSink; | |
| 12 | 9 |
| 13 import 'package:dart2js_info/info.dart'; | 10 import 'package:dart2js_info/info.dart'; |
| 14 | 11 |
| 15 import 'common.dart'; | 12 import 'common.dart'; |
| 16 import 'common/tasks.dart' show | 13 import 'common/tasks.dart' show CompilerTask; |
| 17 CompilerTask; | 14 import 'constants/values.dart' show ConstantValue, InterceptorConstantValue; |
| 18 import 'constants/values.dart' show | 15 import 'compiler.dart' show Compiler; |
| 19 ConstantValue, | 16 import 'deferred_load.dart' show OutputUnit; |
| 20 InterceptorConstantValue; | |
| 21 import 'compiler.dart' show | |
| 22 Compiler; | |
| 23 import 'deferred_load.dart' show | |
| 24 OutputUnit; | |
| 25 import 'elements/elements.dart'; | 17 import 'elements/elements.dart'; |
| 26 import 'elements/visitor.dart'; | 18 import 'elements/visitor.dart'; |
| 27 import 'info/send_info.dart' show | 19 import 'info/send_info.dart' show collectSendMeasurements; |
| 28 collectSendMeasurements; | 20 import 'js_backend/js_backend.dart' show JavaScriptBackend; |
| 29 import 'js_backend/js_backend.dart' show | 21 import 'js_emitter/full_emitter/emitter.dart' as full show Emitter; |
| 30 JavaScriptBackend; | |
| 31 import 'js_emitter/full_emitter/emitter.dart' as full show | |
| 32 Emitter; | |
| 33 import 'js/js.dart' as jsAst; | 22 import 'js/js.dart' as jsAst; |
| 34 import 'types/types.dart' show | 23 import 'types/types.dart' show TypeMask; |
| 35 TypeMask; | 24 import 'universe/universe.dart' show ReceiverConstraint; |
| 36 import 'universe/universe.dart' show | 25 import 'universe/world_impact.dart' |
| 37 ReceiverConstraint; | 26 show ImpactUseCase, WorldImpact, WorldImpactVisitorImpl; |
| 38 import 'universe/world_impact.dart' show | |
| 39 ImpactUseCase, | |
| 40 WorldImpact, | |
| 41 WorldImpactVisitorImpl; | |
| 42 | 27 |
| 43 class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> { | 28 class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> { |
| 44 final Compiler compiler; | 29 final Compiler compiler; |
| 45 | 30 |
| 46 final AllInfo result = new AllInfo(); | 31 final AllInfo result = new AllInfo(); |
| 47 final Map<Element, Info> _elementToInfo = <Element, Info>{}; | 32 final Map<Element, Info> _elementToInfo = <Element, Info>{}; |
| 48 final Map<ConstantValue, Info> _constantToInfo = <ConstantValue, Info>{}; | 33 final Map<ConstantValue, Info> _constantToInfo = <ConstantValue, Info>{}; |
| 49 final Map<OutputUnit, OutputUnitInfo> _outputToInfo = {}; | 34 final Map<OutputUnit, OutputUnitInfo> _outputToInfo = {}; |
| 50 | 35 |
| 51 ElementInfoCollector(this.compiler); | 36 ElementInfoCollector(this.compiler); |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 * used and the selector that selected the element. | 431 * used and the selector that selected the element. |
| 447 */ | 432 */ |
| 448 Iterable<Selection> getRetaining(Element element) { | 433 Iterable<Selection> getRetaining(Element element) { |
| 449 WorldImpact impact = impacts[element]; | 434 WorldImpact impact = impacts[element]; |
| 450 if (impact == null) return const <Selection>[]; | 435 if (impact == null) return const <Selection>[]; |
| 451 | 436 |
| 452 var selections = <Selection>[]; | 437 var selections = <Selection>[]; |
| 453 compiler.impactStrategy.visitImpact( | 438 compiler.impactStrategy.visitImpact( |
| 454 element, | 439 element, |
| 455 impact, | 440 impact, |
| 456 new WorldImpactVisitorImpl( | 441 new WorldImpactVisitorImpl(visitDynamicUse: (dynamicUse) { |
| 457 visitDynamicUse: (dynamicUse) { | 442 selections.addAll(compiler.world.allFunctions |
| 458 selections.addAll(compiler.world.allFunctions | 443 .filter(dynamicUse.selector, dynamicUse.mask) |
| 459 .filter(dynamicUse.selector, dynamicUse.mask) | 444 .map((e) => new Selection(e, dynamicUse.mask))); |
| 460 .map((e) => new Selection(e, dynamicUse.mask))); | 445 }, visitStaticUse: (staticUse) { |
| 461 }, | 446 selections.add(new Selection(staticUse.element, null)); |
| 462 visitStaticUse: (staticUse) { | 447 }), |
| 463 selections.add(new Selection(staticUse.element, null)); | |
| 464 } | |
| 465 ), | |
| 466 IMPACT_USE); | 448 IMPACT_USE); |
| 467 return selections; | 449 return selections; |
| 468 } | 450 } |
| 469 | 451 |
| 470 // Returns true if we care about tracking the size of | 452 // Returns true if we care about tracking the size of |
| 471 // this node. | 453 // this node. |
| 472 bool isTracking(jsAst.Node code) { | 454 bool isTracking(jsAst.Node code) { |
| 473 if (compiler.options.dumpInfo) { | 455 if (compiler.options.dumpInfo) { |
| 474 return _tracking.contains(code); | 456 return _tracking.contains(code); |
| 475 } else { | 457 } else { |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 605 | 587 |
| 606 ChunkedConversionSink<Object> sink = encoder.startChunkedConversion( | 588 ChunkedConversionSink<Object> sink = encoder.startChunkedConversion( |
| 607 new StringConversionSink.fromStringSink(buffer)); | 589 new StringConversionSink.fromStringSink(buffer)); |
| 608 sink.add(new AllInfoJsonCodec().encode(result)); | 590 sink.add(new AllInfoJsonCodec().encode(result)); |
| 609 reporter.reportInfo(NO_LOCATION_SPANNABLE, MessageKind.GENERIC, { | 591 reporter.reportInfo(NO_LOCATION_SPANNABLE, MessageKind.GENERIC, { |
| 610 'text': "View the dumped .info.json file at " | 592 'text': "View the dumped .info.json file at " |
| 611 "https://dart-lang.github.io/dump-info-visualizer" | 593 "https://dart-lang.github.io/dump-info-visualizer" |
| 612 }); | 594 }); |
| 613 } | 595 } |
| 614 } | 596 } |
| OLD | NEW |