blob: 30331ed58f9e1c8867a407c75c1535127be74d92 [file] [log] [blame]
// Copyright (c) 2022, 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.
import 'dart:math';
bool enabled = false;
final _counts = <String, int>{};
void count(String name, [String? subname]) {
if (!enabled) return;
_counts.putIfAbsent(name, () => 0);
_counts[name] = _counts[name]! + 1;
if (subname != null) {
count('$name/$subname');
}
}
void log() {
List<String> names = _counts.keys.toList();
names.sort();
int nameLength = names.fold<int>(
0,
(length, name) => max(length, name.length),
);
int countLength = _counts.values.fold<int>(
0,
(length, count) => max(length, count.toString().length),
);
for (String name in names) {
print(
'${name.padRight(nameLength)} = '
'${_counts[name].toString().padLeft(countLength)}',
);
}
}
void reset() {
_counts.clear();
}
void run(void Function() callback) {
reset();
try {
callback();
} finally {
log();
reset();
}
}