From 914fc2a0d4fe16b60e4dbb65eda8a89472e568e6 Mon Sep 17 00:00:00 2001 From: Thierry Strudel Date: Thu, 21 Jan 2016 16:31:21 -0800 Subject: Don't assume kernel tick is 100Hz Bug: 26729731 Change-Id: I094d5fd0e611349becb91d4460bc2e4af255d125 --- core/java/com/android/internal/os/KernelCpuSpeedReader.java | 13 ++++++++++--- core/java/com/android/internal/os/ProcessCpuTracker.java | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'core') diff --git a/core/java/com/android/internal/os/KernelCpuSpeedReader.java b/core/java/com/android/internal/os/KernelCpuSpeedReader.java index 5b776ac..3f6ebb9 100644 --- a/core/java/com/android/internal/os/KernelCpuSpeedReader.java +++ b/core/java/com/android/internal/os/KernelCpuSpeedReader.java @@ -16,8 +16,11 @@ package com.android.internal.os; import android.text.TextUtils; +import android.system.OsConstants; import android.util.Slog; +import libcore.io.Libcore; + import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; @@ -29,7 +32,7 @@ import java.util.Arrays; * * freq time * - * where time is measured in 1/100 seconds. + * where time is measured in jiffies. */ public class KernelCpuSpeedReader { private static final String TAG = "KernelCpuSpeedReader"; @@ -38,6 +41,9 @@ public class KernelCpuSpeedReader { private final long[] mLastSpeedTimes; private final long[] mDeltaSpeedTimes; + // How long a CPU jiffy is in milliseconds. + private final long mJiffyMillis; + /** * @param cpuNumber The cpu (cpu0, cpu1, etc) whose state to read. */ @@ -46,6 +52,8 @@ public class KernelCpuSpeedReader { cpuNumber); mLastSpeedTimes = new long[numSpeedSteps]; mDeltaSpeedTimes = new long[numSpeedSteps]; + long jiffyHz = Libcore.os.sysconf(OsConstants._SC_CLK_TCK); + mJiffyMillis = 1000/jiffyHz; } /** @@ -62,8 +70,7 @@ public class KernelCpuSpeedReader { splitter.setString(line); Long.parseLong(splitter.next()); - // The proc file reports time in 1/100 sec, so convert to milliseconds. - long time = Long.parseLong(splitter.next()) * 10; + long time = Long.parseLong(splitter.next()) * mJiffyMillis; if (time < mLastSpeedTimes[speedIndex]) { // The stats reset when the cpu hotplugged. That means that the time // we read is offset from 0, so the time is the delta. diff --git a/core/java/com/android/internal/os/ProcessCpuTracker.java b/core/java/com/android/internal/os/ProcessCpuTracker.java index bf97f1f..d831902 100644 --- a/core/java/com/android/internal/os/ProcessCpuTracker.java +++ b/core/java/com/android/internal/os/ProcessCpuTracker.java @@ -67,10 +67,10 @@ public class ProcessCpuTracker { static final int PROCESS_STAT_UTIME = 2; static final int PROCESS_STAT_STIME = 3; - /** Stores user time and system time in 100ths of a second. */ + /** Stores user time and system time in jiffies. */ private final long[] mProcessStatsData = new long[4]; - /** Stores user time and system time in 100ths of a second. Used for + /** Stores user time and system time in jiffies. Used for * public API to retrieve CPU use for a process. Must lock while in use. */ private final long[] mSinglePidStatsData = new long[4]; -- cgit v1.1