Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 914fc2a0 authored by Thierry Strudel's avatar Thierry Strudel Committed by The Android Automerger
Browse files

Don't assume kernel tick is 100Hz

Bug: 26729731
Change-Id: I094d5fd0e611349becb91d4460bc2e4af255d125
parent ef9c8be5
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -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.
+2 −2
Original line number Diff line number Diff line
@@ -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];