| // 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; | |
| } |