summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/ProcessStats.java
diff options
context:
space:
mode:
authorSteve Kondik <shade@chemlab.org>2010-07-09 03:24:16 -0400
committerSteve Kondik <shade@chemlab.org>2010-07-09 03:31:05 -0400
commitb0ff571e395fda81574043ddc72bd7fd43a12368 (patch)
tree62b55b9246bbbfee10e72708b059f94b0d596c9f /services/java/com/android/server/ProcessStats.java
parentc9a58821c7b605e86158a69e55845c2defb57d81 (diff)
downloadframeworks_base-b0ff571e395fda81574043ddc72bd7fd43a12368.zip
frameworks_base-b0ff571e395fda81574043ddc72bd7fd43a12368.tar.gz
frameworks_base-b0ff571e395fda81574043ddc72bd7fd43a12368.tar.bz2
Fix for CM-1580
The way ProcessStats.java reads the time_in_state_file is silly, but minimizes GC. The buffer used is too small on newer devices and overflows. Enlarge it so we have correct stats. Also fix the bad assumption in getCpuSpeedTimes that the file will never be truncated. This can cause system_server to go into an exception loop.
Diffstat (limited to 'services/java/com/android/server/ProcessStats.java')
-rw-r--r--services/java/com/android/server/ProcessStats.java30
1 files changed, 16 insertions, 14 deletions
diff --git a/services/java/com/android/server/ProcessStats.java b/services/java/com/android/server/ProcessStats.java
index a02c4e7..4dfd710 100644
--- a/services/java/com/android/server/ProcessStats.java
+++ b/services/java/com/android/server/ProcessStats.java
@@ -138,7 +138,7 @@ public class ProcessStats {
private boolean mFirst = true;
- private byte[] mBuffer = new byte[256];
+ private byte[] mBuffer = new byte[1024];
/**
* The time in microseconds that the CPU has been running at each speed.
@@ -514,20 +514,22 @@ public class ProcessStats {
StringTokenizer st = new StringTokenizer(file, "\n ");
while (st.hasMoreElements()) {
String token = st.nextToken();
- try {
- long val = Long.parseLong(token);
- tempSpeeds[speed] = val;
- token = st.nextToken();
- val = Long.parseLong(token);
- tempTimes[speed] = val;
- speed++;
- if (speed == MAX_SPEEDS) break; // No more
- if (localLOGV && out == null) {
- Slog.v(TAG, "First time : Speed/Time = " + tempSpeeds[speed - 1]
- + "\t" + tempTimes[speed - 1]);
+ if (st.hasMoreElements()) {
+ try {
+ long val = Long.parseLong(token);
+ tempSpeeds[speed] = val;
+ token = st.nextToken();
+ val = Long.parseLong(token);
+ tempTimes[speed] = val;
+ speed++;
+ if (speed == MAX_SPEEDS) break; // No more
+ if (localLOGV && out == null) {
+ Slog.v(TAG, "First time : Speed/Time = " + tempSpeeds[speed - 1]
+ + "\t" + tempTimes[speed - 1]);
+ }
+ } catch (NumberFormatException nfe) {
+ Slog.i(TAG, "Unable to parse time_in_state");
}
- } catch (NumberFormatException nfe) {
- Slog.i(TAG, "Unable to parse time_in_state");
}
}
}