| // Copyright 2013 The Flutter Authors. 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:io' as io; | 
 |  | 
 | // It's bad to import a file from `bin` into `tool`. | 
 | // However this tool is not very important, so delete it if necessary. | 
 | import '../bin/utils/adb_logcat_filtering.dart'; | 
 |  | 
 | /// A tiny tool to read saved `adb logcat` output and perform some analysis. | 
 | /// | 
 | /// This tool is not meant to be a full-fledged logcat reader. It's just a | 
 | /// simple tool that uses the [AdbLogLine] extension type to parse results of | 
 | /// `adb logcat` and explain what log tag names are most common. | 
 | void main(List<String> args) { | 
 |   if (args case [final String path]) { | 
 |     final List<AdbLogLine> parsed = io.File(path) | 
 |         .readAsLinesSync() | 
 |         .map(AdbLogLine.tryParse) | 
 |         .whereType<AdbLogLine>() | 
 |           // Filter out all debug logs. | 
 |         .where((AdbLogLine line) => line.severity != 'D') | 
 |         .toList(); | 
 |  | 
 |     final Map<String, int> tagCounts = <String, int>{}; | 
 |     for (final AdbLogLine line in parsed) { | 
 |       tagCounts[line.name] = (tagCounts[line.name] ?? 0) + 1; | 
 |     } | 
 |  | 
 |     // Print in order of most common to least common. | 
 |     final List<MapEntry<String, int>> sorted = tagCounts.entries.toList() | 
 |       ..sort((MapEntry<String, int> a, MapEntry<String, int> b) => b.value.compareTo(a.value)); | 
 |     for (final MapEntry<String, int> entry in sorted) { | 
 |       print("'${entry.key}', // ${entry.value}"); | 
 |     } | 
 |  | 
 |     return; | 
 |   } | 
 |  | 
 |   print('Usage: logcat_reader.dart <path-to-logcat-output>'); | 
 |   io.exitCode = 1; | 
 | } |