OLD | NEW |
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 /// Command-line tool presenting how much each function contributes to the total | 5 /// Command-line tool presenting how much each function contributes to the total |
6 /// code. | 6 /// code. |
7 library compiler.tool.live_code_size_analysis; | 7 library compiler.tool.live_code_size_analysis; |
8 | 8 |
9 import 'dart:convert'; | 9 import 'dart:convert'; |
10 import 'dart:io'; | 10 import 'dart:io'; |
(...skipping 13 matching lines...) Expand all Loading... |
24 {bool filter(Info info), bool showLibrarySizes: false}) { | 24 {bool filter(Info info), bool showLibrarySizes: false}) { |
25 var realTotal = info.program.size; | 25 var realTotal = info.program.size; |
26 if (filter == null) filter = (i) => true; | 26 if (filter == null) filter = (i) => true; |
27 var reported = [] | 27 var reported = [] |
28 ..addAll(info.functions.where(filter)) | 28 ..addAll(info.functions.where(filter)) |
29 ..addAll(info.fields.where(filter)); | 29 ..addAll(info.fields.where(filter)); |
30 | 30 |
31 // Compute a graph from the dependencies in [info]. | 31 // Compute a graph from the dependencies in [info]. |
32 Graph<Info> graph = graphFromInfo(info); | 32 Graph<Info> graph = graphFromInfo(info); |
33 | 33 |
34 // Compute the strongest connected components and calculate their size. | 34 // Compute the strongly connected components and calculate their size. |
35 var components = graph.computeTopologicalSort(); | 35 var components = graph.computeTopologicalSort(); |
36 print('total elements: ${graph.nodes.length}'); | 36 print('total elements: ${graph.nodes.length}'); |
37 print('total strongest connected components: ${components.length}'); | 37 print('total strongly connected components: ${components.length}'); |
38 var maxS = 0; | 38 var maxS = 0; |
39 var totalCount = graph.nodeCount; | 39 var totalCount = graph.nodeCount; |
40 var minS = totalCount; | 40 var minS = totalCount; |
41 var nodeData = {}; | 41 var nodeData = {}; |
42 for (var scc in components) { | 42 for (var scc in components) { |
43 var sccData = new _SccData(); | 43 var sccData = new _SccData(); |
44 maxS = math.max(maxS, scc.length); | 44 maxS = math.max(maxS, scc.length); |
45 minS = math.min(minS, scc.length); | 45 minS = math.min(minS, scc.length); |
46 for (var f in scc) { | 46 for (var f in scc) { |
47 sccData.size += f.size; | 47 sccData.size += f.size; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 | 157 |
158 _showElement(String name, int size, int dominatedSize, int maxSize, int total) { | 158 _showElement(String name, int size, int dominatedSize, int maxSize, int total) { |
159 var percent = (size * 100 / total).toStringAsFixed(2); | 159 var percent = (size * 100 / total).toStringAsFixed(2); |
160 var minPercent = (dominatedSize * 100 / total).toStringAsFixed(2); | 160 var minPercent = (dominatedSize * 100 / total).toStringAsFixed(2); |
161 var maxPercent = (maxSize * 100 / total).toStringAsFixed(2); | 161 var maxPercent = (maxSize * 100 / total).toStringAsFixed(2); |
162 print('${pad(size, 8)} ${pad(percent, 6)}% ' | 162 print('${pad(size, 8)} ${pad(percent, 6)}% ' |
163 '${pad(dominatedSize, 10)} ${pad(minPercent, 6)}% ' | 163 '${pad(dominatedSize, 10)} ${pad(minPercent, 6)}% ' |
164 '${pad(maxSize, 10)} ${pad(maxPercent, 6)}% ' | 164 '${pad(maxSize, 10)} ${pad(maxPercent, 6)}% ' |
165 '$name'); | 165 '$name'); |
166 } | 166 } |
OLD | NEW |