Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(359)

Unified Diff: lib/src/table.dart

Issue 1372333002: Add measurements and send-metrics to dart2js's info. (Closed) Base URL: git@github.com:dart-lang/dart2js_info.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/src/string_edit_buffer.dart ('k') | lib/src/util.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/table.dart
diff --git a/lib/src/table.dart b/lib/src/table.dart
new file mode 100644
index 0000000000000000000000000000000000000000..85abcd3faf788c5c56092a09ba4c2f311d025409
--- /dev/null
+++ b/lib/src/table.dart
@@ -0,0 +1,126 @@
+// Copyright (c) 2015, 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.
+
+library dart2js_info.src.table;
Siggi Cherem (dart-lang) 2015/10/02 17:16:17 I seem to have forgotten to include this in the fi
+
+import 'dart:math' show max;
+
+/// Helper class to present data on the command-line in a table form.
+class Table {
+ int _totalColumns = 0;
+ int get totalColumns => _totalColumns;
+
+ /// Abbreviations, used to make headers shorter.
+ Map<String, String> abbreviations = {};
+
+ /// Width of each column.
+ List<int> widths = <int>[];
+
+ /// The header for each column (`header.length == totalColumns`).
+ List header = [];
+
+ /// The color for each column (`color.length == totalColumns`).
+ List colors = [];
+
+ /// Each row on the table. Note that all rows have the same size
+ /// (`rows[*].length == totalColumns`).
+ List<List> rows = [];
+
+ /// Columns to skip, for example, if they are all zero entries.
+ List<bool> _skipped = <bool>[];
+
+ /// Whether we started adding entries. Indicates that no more columns can be
+ /// added.
+ bool _sealed = false;
+
+ /// Current row being built by [addEntry].
+ List _currentRow;
+
+ /// Add a column with the given [name].
+ void declareColumn(String name,
+ {bool abbreviate: false, String color: _NO_COLOR}) {
+ assert(!_sealed);
+ var headerName = name;
+ if (abbreviate) {
+ // abbreviate the header by using only the initials of each word
+ headerName =
+ name.split(' ').map((s) => s.substring(0, 1).toUpperCase()).join('');
+ while (abbreviations[headerName] != null) headerName = "$headerName'";
+ abbreviations[headerName] = name;
+ }
+ widths.add(max(5, headerName.length + 1));
+ header.add(headerName);
+ colors.add(color);
+ _skipped.add(_totalColumns > 0);
+ _totalColumns++;
+ }
+
+ /// Add an entry in the table, creating a new row each time [totalColumns]
+ /// entries are added.
+ void addEntry(entry) {
+ if (_currentRow == null) {
+ _sealed = true;
+ _currentRow = [];
+ }
+ int pos = _currentRow.length;
+ assert(pos < _totalColumns);
+
+ widths[pos] = max(widths[pos], '$entry'.length + 1);
+ _currentRow.add('$entry');
+ if (entry is int && entry != 0) {
+ _skipped[pos] = false;
+ }
+
+ if (pos + 1 == _totalColumns) {
+ rows.add(_currentRow);
+ _currentRow = [];
+ }
+ }
+
+ /// Add an empty row to divide sections of the table.
+ void addEmptyRow() {
+ var emptyRow = [];
+ for (int i = 0; i < _totalColumns; i++) {
+ emptyRow.add('-' * widths[i]);
+ }
+ rows.add(emptyRow);
+ }
+
+ /// Enter the header titles. OK to do so more than once in long tables.
+ void addHeader() {
+ rows.add(header);
+ }
+
+ /// Generates a string representation of the table to print on a terminal.
+ // TODO(sigmund): add also a .csv format
+ String toString() {
+ var sb = new StringBuffer();
+ sb.write('\n');
+ for (var row in rows) {
+ var lastColor = _NO_COLOR;
+ for (int i = 0; i < _totalColumns; i++) {
+ if (_skipped[i]) continue;
+ var entry = row[i];
+ var color = colors[i];
+ if (lastColor != color) {
+ sb.write(color);
+ lastColor = color;
+ }
+ // Align first column to the left, everything else to the right.
+ sb.write(
+ i == 0 ? entry.padRight(widths[i]) : entry.padLeft(widths[i] + 1));
+ }
+ if (lastColor != _NO_COLOR) sb.write(_NO_COLOR);
+ sb.write('\n');
+ }
+ sb.write('\nWhere:\n');
+ for (var id in abbreviations.keys) {
+ sb.write(' $id:'.padRight(7));
+ sb.write(' ${abbreviations[id]}\n');
+ }
+ return sb.toString();
+ }
+}
+
+const _NO_COLOR = "\x1b[0m";
« no previous file with comments | « lib/src/string_edit_buffer.dart ('k') | lib/src/util.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698