Chromium Code Reviews| Index: runtime/bin/vmservice/client/lib/src/app/utils.dart |
| diff --git a/runtime/bin/vmservice/client/lib/src/app/utils.dart b/runtime/bin/vmservice/client/lib/src/app/utils.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..04305bc8faa8836294c3655b48bb2144b36abe31 |
| --- /dev/null |
| +++ b/runtime/bin/vmservice/client/lib/src/app/utils.dart |
| @@ -0,0 +1,125 @@ |
| +// 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 app; |
| + |
| +class Utils { |
| + static String formatPercent(num a, num total) { |
| + var percent = 100.0 * (a / total); |
| + return '${percent.toStringAsFixed(2)}%'; |
| + } |
| + |
| + static String zeroPad(int value, int pad) { |
| + String prefix = ""; |
| + while (pad > 1) { |
| + int pow10 = pow(10, pad - 1); |
| + if (value < pow10) { |
| + prefix = prefix + "0"; |
| + } |
| + pad--; |
| + } |
| + return "${prefix}${value}"; |
| + } |
| + |
| + static String formatCommaSeperated(int v) { |
|
turnidge
2014/04/21 22:29:32
Seperated/Separated
Cutch
2014/04/22 15:03:25
Done.
|
| + const COMMA_EVERY = 1000; |
| + if (v < COMMA_EVERY) { |
| + return v.toString(); |
| + } |
| + var mod = v % COMMA_EVERY; |
| + v ~/= COMMA_EVERY; |
| + var r = '${zeroPad(mod, 3)}'; |
| + while (v > COMMA_EVERY) { |
| + mod = v % COMMA_EVERY; |
| + r = '${zeroPad(mod, 3)},$r'; |
| + v ~/= COMMA_EVERY; |
| + } |
| + if (v != 0) { |
| + r = '$v,$r'; |
| + } |
| + return r; |
| + } |
| + |
| + static String formatTimePrecise(double time) { |
| + if (time == null) { |
| + return "-"; |
| + } |
| + const millisPerHour = 60 * 60 * 1000; |
| + const millisPerMinute = 60 * 1000; |
| + const millisPerSecond = 1000; |
| + |
| + var millis = (time * millisPerSecond).round(); |
| + |
| + var hours = millis ~/ millisPerHour; |
| + millis = millis % millisPerHour; |
| + |
| + var minutes = millis ~/ millisPerMinute; |
| + millis = millis % millisPerMinute; |
| + |
| + var seconds = millis ~/ millisPerSecond; |
| + millis = millis % millisPerSecond; |
| + |
| + if (hours > 0) { |
| + return ("${zeroPad(hours,2)}" |
| + ":${zeroPad(minutes,2)}" |
| + ":${zeroPad(seconds,2)}" |
| + ".${zeroPad(millis,3)}"); |
| + } else { |
| + return ("${zeroPad(minutes,2)}" |
| + ":${zeroPad(seconds,2)}" |
| + ".${zeroPad(millis,3)}"); |
| + } |
| + } |
| + |
| + static String formatSize(int bytes) { |
| + const int bytesPerKB = 1024; |
| + const int bytesPerMB = 1024 * bytesPerKB; |
| + const int bytesPerGB = 1024 * bytesPerMB; |
| + const int bytesPerTB = 1024 * bytesPerGB; |
| + |
| + if (bytes < bytesPerKB) { |
| + return "${bytes}B"; |
| + } else if (bytes < bytesPerMB) { |
| + return "${(bytes / bytesPerKB).round()}KB"; |
| + } else if (bytes < bytesPerGB) { |
| + return "${(bytes / bytesPerMB).round()}MB"; |
| + } else if (bytes < bytesPerTB) { |
| + return "${(bytes / bytesPerGB).round()}GB"; |
| + } else { |
| + return "${(bytes / bytesPerTB).round()}TB"; |
| + } |
| + } |
| + |
| + static String formatTime(double time) { |
| + if (time == null) { |
| + return "-"; |
| + } |
| + const millisPerHour = 60 * 60 * 1000; |
| + const millisPerMinute = 60 * 1000; |
| + const millisPerSecond = 1000; |
| + |
| + var millis = (time * millisPerSecond).round(); |
| + |
| + var hours = millis ~/ millisPerHour; |
| + millis = millis % millisPerHour; |
| + |
| + var minutes = millis ~/ millisPerMinute; |
| + millis = millis % millisPerMinute; |
| + |
| + var seconds = millis ~/ millisPerSecond; |
| + |
| + StringBuffer out = new StringBuffer(); |
| + if (hours != 0) { |
| + return '${hours}h ${minutes}m ${seconds}s'; |
| + } |
| + if (minutes != 0) { |
| + return '${minutes}m ${seconds}s'; |
| + } |
| + return '${seconds}s'; |
| + } |
| + |
| + static String formatSeconds(double x) { |
| + return x.toStringAsFixed(2); |
| + } |
| +} |