Space trim and other unit tests. General space clean up.
The space unit tests now include checks on space invariants, in
particular relating to footprint and size.
Out-of-date comments have been removed.
This patch adds PrettySize and PrettyDuration methods to make these
strings more human readable.
Change-Id: I6bc05b2db0d0115b97d666b832fce57bcdd2e091
diff --git a/src/utils.cc b/src/utils.cc
index 531424e..4f4fa87 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -115,10 +115,6 @@
#endif
}
-uint64_t NsToMs(uint64_t ns) {
- return ns/1000/1000;
-}
-
std::string PrettyDescriptor(const String* java_descriptor) {
if (java_descriptor == NULL) {
return "null";
@@ -272,6 +268,65 @@
return result;
}
+std::string PrettySize(size_t size_in_bytes) {
+ if ((size_in_bytes / GB) * GB == size_in_bytes) {
+ return StringPrintf("%zdGB", size_in_bytes / GB);
+ } else if ((size_in_bytes / MB) * MB == size_in_bytes) {
+ return StringPrintf("%zdMB", size_in_bytes / MB);
+ } else if ((size_in_bytes / KB) * KB == size_in_bytes) {
+ return StringPrintf("%zdKiB", size_in_bytes / KB);
+ } else {
+ return StringPrintf("%zdB", size_in_bytes);
+ }
+}
+
+std::string PrettyDuration(uint64_t nano_duration) {
+ if (nano_duration == 0) {
+ return "0";
+ } else {
+ const uint64_t one_sec = 1000 * 1000 * 1000;
+ const uint64_t one_ms = 1000 * 1000;
+ const uint64_t one_us = 1000;
+ const char* unit;
+ uint64_t divisor;
+ uint32_t zero_fill;
+ if (nano_duration >= one_sec) {
+ unit = "s";
+ divisor = one_sec;
+ zero_fill = 9;
+ } else if(nano_duration >= one_ms) {
+ unit = "ms";
+ divisor = one_ms;
+ zero_fill = 6;
+ } else if(nano_duration >= one_us) {
+ unit = "us";
+ divisor = one_us;
+ zero_fill = 3;
+ } else {
+ unit = "ns";
+ divisor = 1;
+ zero_fill = 0;
+ }
+ uint64_t whole_part = nano_duration / divisor;
+ uint64_t fractional_part = nano_duration % divisor;
+ if (fractional_part == 0) {
+ return StringPrintf("%llu%s", whole_part, unit);
+ } else {
+ while ((fractional_part % 1000) == 0) {
+ zero_fill -= 3;
+ fractional_part /= 1000;
+ }
+ if (zero_fill == 3) {
+ return StringPrintf("%llu.%03llu%s", whole_part, fractional_part, unit);
+ } else if (zero_fill == 6) {
+ return StringPrintf("%llu.%06llu%s", whole_part, fractional_part, unit);
+ } else {
+ return StringPrintf("%llu.%09llu%s", whole_part, fractional_part, unit);
+ }
+ }
+ }
+}
+
std::string MangleForJni(const std::string& s) {
std::string result;
size_t char_count = CountModifiedUtf8Chars(s.c_str());