| Index: sdk/lib/_internal/compiler/implementation/helpers/track_map.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/helpers/track_map.dart b/sdk/lib/_internal/compiler/implementation/helpers/track_map.dart
|
| deleted file mode 100644
|
| index 5f827a6cb5e70cc815a005bf6ce1a8bad1387c3d..0000000000000000000000000000000000000000
|
| --- a/sdk/lib/_internal/compiler/implementation/helpers/track_map.dart
|
| +++ /dev/null
|
| @@ -1,113 +0,0 @@
|
| -// Copyright (c) 2014, 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.
|
| -
|
| -part of dart2js.helpers;
|
| -
|
| -/**
|
| - * The track map is a simple wrapper around a map that keeps track
|
| - * of the 'final' size of maps grouped by description. It allows
|
| - * determining the distribution of sizes for a specific allocation
|
| - * site and it can be used like this:
|
| - *
|
| - * Map<String, int> map = new TrackMap<String, int>("my-map");
|
| - *
|
| - * After finishing the compilaton, the histogram of track map sizes
|
| - * is printed but only when running in verbose mode.
|
| - */
|
| -class TrackMap<K, V> implements Map<K, V> {
|
| - final Map _map;
|
| - final List _counts;
|
| - static final Map<String, List<int>> _countsMap = {};
|
| -
|
| - TrackMap._internal(this._counts) : _map = new Map<K, V>();
|
| -
|
| - factory TrackMap(String description) {
|
| - List counts = _countsMap.putIfAbsent(description, () => [ 0 ]);
|
| - Map result = new TrackMap<K, V>._internal(counts);
|
| - counts[0]++;
|
| - return result;
|
| - }
|
| -
|
| - static void printHistogram() {
|
| - _countsMap.forEach((description, counts) {
|
| - print('$description -- ${counts.length} maps');
|
| -
|
| - // Count the total number of maps.
|
| - int sum = 0;
|
| - for (int i = 0; i < counts.length; i++) {
|
| - sum += counts[i];
|
| - }
|
| - int increment = sum ~/ 10;
|
| - int target = increment;
|
| - int accumulated = 0;
|
| - for (int i = 0; i < counts.length; i++) {
|
| - accumulated += counts[i];
|
| - if (accumulated >= target) {
|
| - String percent = (accumulated / sum * 100).toStringAsFixed(1);
|
| - print(' -- $percent%: length <= $i');
|
| - target += increment;
|
| - }
|
| - }
|
| - });
|
| - }
|
| -
|
| - int get length => _map.length;
|
| - bool get isEmpty => _map.isEmpty;
|
| - bool get isNotEmpty => _map.isNotEmpty;
|
| -
|
| - Iterable<K> get keys => _map.keys;
|
| - Iterable<V> get values => _map.values;
|
| -
|
| - bool containsKey(K key) => _map.containsKey(key);
|
| - bool containsValue(V value) => _map.containsValue(value);
|
| -
|
| - V operator[](K key) => _map[key];
|
| - String toString() => _map.toString();
|
| -
|
| - void forEach(void action(K key, V value)) {
|
| - _map.forEach(action);
|
| - }
|
| -
|
| - void operator[]=(K key, V value) {
|
| - if (!_map.containsKey(key)) {
|
| - _notifyLengthChanged(1);
|
| - _map[key] = value;
|
| - }
|
| - }
|
| -
|
| - V putIfAbsent(K key, V ifAbsent()) {
|
| - if (containsKey(key)) return this[key];
|
| - V value = ifAbsent();
|
| - this[key] = value;
|
| - return value;
|
| - }
|
| -
|
| - V remove(Object key) {
|
| - if (_map.containsKey(key)) {
|
| - _notifyLengthChanged(-1);
|
| - }
|
| - return _map.remove(key);
|
| - }
|
| -
|
| - void addAll(Map<K, V> other) {
|
| - other.forEach((key, value) => this[key] = value);
|
| - }
|
| -
|
| - void clear() {
|
| - _notifyLengthChanged(-_map.length);
|
| - _map.clear();
|
| - }
|
| -
|
| - void _notifyLengthChanged(int delta) {
|
| - int oldLength = _map.length;
|
| - int newLength = oldLength + delta;
|
| - _counts[oldLength]--;
|
| - if (newLength < _counts.length) {
|
| - _counts[newLength]++;
|
| - } else {
|
| - _counts.add(1);
|
| - assert(newLength == _counts.length - 1);
|
| - }
|
| - }
|
| -}
|
|
|