summaryrefslogtreecommitdiff
path: root/core/java/android/os/RecoverySystem.java
diff options
context:
space:
mode:
authorTianjie Xu <xunchang@google.com>2016-06-02 12:38:17 -0700
committerTianjie Xu <xunchang@google.com>2016-06-07 17:54:48 -0700
commita2fe5517bcd966c22827150287f55d683d493573 (patch)
tree74d815c5be5a1634934375a74bf1159c2928c3ca /core/java/android/os/RecoverySystem.java
parenta85c1e8e697bbdddf295a9e372395704732812cc (diff)
Change unit of I/O statistics to MiB
I/O in bytes are too large and it may cause overflow. Moreover, data with large numbers are grouped in the same bucket of the histogram. This adds difficulty to the analysis. Changing unit of I/O to MiB so that we can have a better data distribution. Bug: 28658632 Change-Id: Id9913d71e62b36ce5d5d2e57676953f4dbd0c7c9
Diffstat (limited to 'core/java/android/os/RecoverySystem.java')
-rw-r--r--core/java/android/os/RecoverySystem.java42
1 files changed, 29 insertions, 13 deletions
diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java
index 4abbf0efc81d..6c21398e280b 100644
--- a/core/java/android/os/RecoverySystem.java
+++ b/core/java/android/os/RecoverySystem.java
@@ -687,12 +687,13 @@ public class RecoverySystem {
}
}
- // Read last_install; then report time for update and I/O to tron.
+ // Read last_install; then report time (in seconds) and I/O (in MiB) for
+ // this update to tron.
// Only report on the reboots immediately after an OTA update.
private static void parseLastInstallLog(Context context) {
try (BufferedReader in = new BufferedReader(new FileReader(LAST_INSTALL_FILE))) {
String line = null;
- int bytesWritten = -1, bytesStashed = -1;
+ int bytesWrittenInMiB = -1, bytesStashedInMiB = -1;
int timeTotal = -1;
while ((line = in.readLine()) != null) {
// Here is an example of lines in last_install:
@@ -705,20 +706,35 @@ public class RecoverySystem {
continue;
}
String numString = line.substring(numIndex + 1).trim();
- int parsedNum;
+ long parsedNum;
try {
- parsedNum = Integer.parseInt(numString);
+ parsedNum = Long.parseLong(numString);
} catch (NumberFormatException ignored) {
Log.e(TAG, "Failed to parse numbers in " + line);
continue;
}
+ final int MiB = 1024 * 1024;
+ int scaled;
+ try {
+ if (line.startsWith("bytes")) {
+ scaled = Math.toIntExact(parsedNum / MiB);
+ } else {
+ scaled = Math.toIntExact(parsedNum);
+ }
+ } catch (ArithmeticException ignored) {
+ Log.e(TAG, "Number overflows in " + line);
+ continue;
+ }
+
if (line.startsWith("time")) {
- timeTotal = parsedNum;
+ timeTotal = scaled;
} else if (line.startsWith("bytes_written")) {
- bytesWritten = (bytesWritten == -1) ? parsedNum : bytesWritten + parsedNum;
+ bytesWrittenInMiB = (bytesWrittenInMiB == -1) ? scaled :
+ bytesWrittenInMiB + scaled;
} else if (line.startsWith("bytes_stashed")) {
- bytesStashed = (bytesStashed == -1) ? parsedNum : bytesStashed + parsedNum;
+ bytesStashedInMiB = (bytesStashedInMiB == -1) ? scaled :
+ bytesStashedInMiB + scaled;
}
}
@@ -726,15 +742,15 @@ public class RecoverySystem {
if (timeTotal != -1) {
MetricsLogger.histogram(context, "ota_time_total", timeTotal);
}
- if (bytesWritten != -1) {
- MetricsLogger.histogram(context, "ota_bytes_written", bytesWritten);
+ if (bytesWrittenInMiB != -1) {
+ MetricsLogger.histogram(context, "ota_written_in_MiBs", bytesWrittenInMiB);
}
- if (bytesStashed != -1) {
- MetricsLogger.histogram(context, "ota_bytes_stashed", bytesStashed);
+ if (bytesStashedInMiB != -1) {
+ MetricsLogger.histogram(context, "ota_stashed_in_MiBs", bytesStashedInMiB);
}
- } catch (IOException ignored) {
- Log.e(TAG, "Failed to read lines in last_install", ignored);
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to read lines in last_install", e);
}
}