diff options
author | Steve Kondik <shade@chemlab.org> | 2010-07-09 03:24:16 -0400 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2010-07-09 03:31:05 -0400 |
commit | b0ff571e395fda81574043ddc72bd7fd43a12368 (patch) | |
tree | 62b55b9246bbbfee10e72708b059f94b0d596c9f /services/java/com/android/server/ProcessStats.java | |
parent | c9a58821c7b605e86158a69e55845c2defb57d81 (diff) | |
download | frameworks_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.java | 30 |
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"); } } } |