| Index: lib/src/util.dart
|
| diff --git a/lib/src/util.dart b/lib/src/util.dart
|
| index e30ba1799e1e095943a7ef3e7db3d5b78cac5405..1b8a0847b2373b6899b3a791db9c428289b01bd4 100644
|
| --- a/lib/src/util.dart
|
| +++ b/lib/src/util.dart
|
| @@ -1,4 +1,8 @@
|
| -library compiler.tool.util;
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library dart2js_info.src.util;
|
|
|
| import 'package:dart2js_info/info.dart';
|
| import 'graph.dart';
|
| @@ -73,3 +77,50 @@ pad(value, n, {bool right: false}) {
|
| var pad = ' ' * (n - s.length);
|
| return right ? '$s$pad' : '$pad$s';
|
| }
|
| +
|
| +/// Color-highlighted string used mainly to debug invariants.
|
| +String recursiveDiagnosticString(Measurements measurements, Metric metric) {
|
| + var sb = new StringBuffer();
|
| + helper(Metric m) {
|
| + int value = measurements.counters[m];
|
| + if (value == null) value = 0;
|
| + if (m is! GroupedMetric) {
|
| + sb.write(value);
|
| + sb.write(' ${m.name}');
|
| + return;
|
| + }
|
| + GroupedMetric group = m;
|
| +
|
| + int expected = 0;
|
| + for (var sub in group.submetrics) {
|
| + var n = measurements.counters[sub];
|
| + if (n != null) expected += n;
|
| + }
|
| + if (value == expected) {
|
| + sb.write('[32m');
|
| + sb.write(value);
|
| + } else {
|
| + sb.write('[31m');
|
| + sb.write(value);
|
| + sb.write('[33m[');
|
| + sb.write(expected);
|
| + sb.write(']');
|
| + }
|
| + sb.write('[0m');
|
| + sb.write(' ${group.name}');
|
| +
|
| + bool first = true;
|
| + sb.write('(');
|
| + for (var sub in group.submetrics) {
|
| + if (first) {
|
| + first = false;
|
| + } else {
|
| + sb.write(' + ');
|
| + }
|
| + helper(sub);
|
| + }
|
| + sb.write(')');
|
| + }
|
| + helper(metric);
|
| + return sb.toString();
|
| +}
|
|
|