|  | // Copyright (c) 2023, 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:typed_data"; | 
|  |  | 
|  | Uint32List counts = new Uint32List(0); | 
|  |  | 
|  | void initialize(int count, bool reportCandidates) { | 
|  | counts = new Uint32List(count); | 
|  | } | 
|  |  | 
|  | @pragma("vm:prefer-inline") | 
|  | void enter(int i) { | 
|  | counts[i]++; | 
|  | } | 
|  |  | 
|  | @pragma("vm:prefer-inline") | 
|  | void exit(int i) {} | 
|  |  | 
|  | void report(List<String> names) { | 
|  | List<NameWithCount> data = []; | 
|  | for (int i = 0; i < counts.length; i++) { | 
|  | int count = counts[i]; | 
|  | if (count < 10000) continue; | 
|  | data.add(new NameWithCount(names[i], count)); | 
|  | } | 
|  | data.sort((a, b) => a.count - b.count); | 
|  | for (NameWithCount element in data) { | 
|  | print("${_formatInt(element.count, 11)}: ${element.name}"); | 
|  | } | 
|  | } | 
|  |  | 
|  | class NameWithCount { | 
|  | final String name; | 
|  | final int count; | 
|  |  | 
|  | NameWithCount(this.name, this.count); | 
|  | } | 
|  |  | 
|  | String _formatInt(int input, int minLength) { | 
|  | bool negative = false; | 
|  | if (input < 0) { | 
|  | negative = true; | 
|  | input = -input; | 
|  | } | 
|  | String asString = "$input"; | 
|  | int length = asString.length; | 
|  | int countSeparators = (length - 1) ~/ 3; | 
|  | int outLength = length + countSeparators; | 
|  | if (negative) outLength++; | 
|  | StringBuffer sb = new StringBuffer(); | 
|  | if (outLength < minLength) { | 
|  | sb.write(" " * (minLength - outLength)); | 
|  | } | 
|  |  | 
|  | if (negative) sb.write("-"); | 
|  | int end = length - (countSeparators * 3); | 
|  | sb.write(asString.substring(0, end)); | 
|  | int begin = end; | 
|  | end += 3; | 
|  | while (end <= length) { | 
|  | sb.write(","); | 
|  | sb.write(asString.substring(begin, end)); | 
|  | begin = end; | 
|  | end += 3; | 
|  | } | 
|  |  | 
|  | return sb.toString(); | 
|  | } |