diff --git a/metrics/src/main/java/com/facebook/battery/metrics/core/ProcFileReader.java b/metrics/src/main/java/com/facebook/battery/metrics/core/ProcFileReader.java index 64127e0..cdb56b2 100644 --- a/metrics/src/main/java/com/facebook/battery/metrics/core/ProcFileReader.java +++ b/metrics/src/main/java/com/facebook/battery/metrics/core/ProcFileReader.java @@ -208,6 +208,10 @@ public void skipSpaces() { skipPast(' '); } + public void skipRightBrace() { + skipPast(')'); + } + public void skipLine() { skipPast('\n'); } diff --git a/metrics/src/main/java/com/facebook/battery/metrics/cpu/CpuMetricsCollector.java b/metrics/src/main/java/com/facebook/battery/metrics/cpu/CpuMetricsCollector.java index 0a3fd8b..3b71765 100644 --- a/metrics/src/main/java/com/facebook/battery/metrics/cpu/CpuMetricsCollector.java +++ b/metrics/src/main/java/com/facebook/battery/metrics/cpu/CpuMetricsCollector.java @@ -60,8 +60,10 @@ public boolean getSnapshot(CpuMetrics snapshot) { return false; } + reader.skipRightBrace(); + int index = 0; - while (index < PROC_USER_TIME_FIELD) { + while (index < PROC_USER_TIME_FIELD - 1) { reader.skipSpaces(); index++; } diff --git a/metrics/src/test/java/com/facebook/battery/metrics/cpu/CpuMetricsCollectorTest.java b/metrics/src/test/java/com/facebook/battery/metrics/cpu/CpuMetricsCollectorTest.java index 0d08f66..d67fc8a 100644 --- a/metrics/src/test/java/com/facebook/battery/metrics/cpu/CpuMetricsCollectorTest.java +++ b/metrics/src/test/java/com/facebook/battery/metrics/cpu/CpuMetricsCollectorTest.java @@ -99,6 +99,22 @@ public void testRealProcfile() throws Exception { assertThat(snapshot.childSystemTimeS).isEqualTo(11.0 / 100); } + @Test + public void testRealProcfileWithBlankedComm() throws Exception { + String stat = + "21031 (facebook.blank katana) S 354 354 0 0 -1 1077952832 227718 1446 318 0 9852 889 6 11 20 0 133 0 502496 2050461696 70553 4294967295 1 1 0 0 0 0 4608 0 1166120188 4294967295 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + TestableCpuMetricsCollector collector = + new TestableCpuMetricsCollector().setPath(createFile(stat)); + + CpuMetrics snapshot = new CpuMetrics(); + assertThat(collector.getSnapshot(snapshot)).isTrue(); + + assertThat(snapshot.userTimeS).isEqualTo(9852.0 / 100); + assertThat(snapshot.systemTimeS).isEqualTo(889.0 / 100); + assertThat(snapshot.childUserTimeS).isEqualTo(6.0 / 100); + assertThat(snapshot.childSystemTimeS).isEqualTo(11.0 / 100); + } + @Test public void testSaneProcFile() throws Exception { StringBuilder testStringBuilder = new StringBuilder();