OmniGears: support cpufreq stats stored in msecs
in old kernels default unit was 10msecs
Change-Id: Ib56fffdd729e6b542bbea9906c4e22fe1f453ab2
diff --git a/res/values/config.xml b/res/values/config.xml
index 44682ce..0494c3c 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -35,4 +35,6 @@
e.g. 0,2 means it will show only cpu 0 and cpu 2-->
<string name="config_cpufreq_show_cpus">0</string>
+ <!-- wether cpufreq_stats are stored in msecs or 10msec unit -->
+ <bool name="config_cpufreq_msecs">false</bool>
</resources>
diff --git a/src/org/omnirom/omnigears/system/CPUStateMonitor.java b/src/org/omnirom/omnigears/system/CPUStateMonitor.java
index abcc71d..d5b3560 100644
--- a/src/org/omnirom/omnigears/system/CPUStateMonitor.java
+++ b/src/org/omnirom/omnigears/system/CPUStateMonitor.java
@@ -37,8 +37,10 @@
private int mCpuNum;
private List<Integer> mFrequencies;
private List<Integer> mShowCpus;
+ private boolean mStatsInMsecs;
- public CPUStateMonitor(List<Integer> showCpus) {
+ public CPUStateMonitor(List<Integer> showCpus, boolean statsInMsecs) {
+ mStatsInMsecs = statsInMsecs;
mShowCpus = showCpus;
mCpuNum = Helpers.getNumOfCpus();
mFrequencies = new ArrayList<Integer>();
@@ -67,10 +69,10 @@
// @SuppressLint({"UseValueOf", "UseValueOf"})
public class CpuState implements Comparable<CpuState> {
- public CpuState(int cpu, int a, long b) {
+ public CpuState(int cpu, int a, long b, boolean msecs) {
mCpu = cpu;
freq = a;
- duration = b;
+ duration = msecs ? b : (b * 10);
}
public int freq = 0;
@@ -228,8 +230,8 @@
List<CpuState> cpuStates = mStates.get(0);
long sleepTime = Math.max((SystemClock.elapsedRealtime() - SystemClock
- .uptimeMillis()) / 10, 0);
- cpuStates.add(new CpuState(0, 0, sleepTime));
+ .uptimeMillis()), 0);
+ cpuStates.add(new CpuState(0, 0, sleepTime, true));
Collections.sort(mFrequencies);
}
@@ -241,7 +243,7 @@
String[] nums = line.split(" ");
int freq = Integer.parseInt(nums[0]);
cpuStates.add(new CpuState(cpu, freq, Long
- .parseLong(nums[1])));
+ .parseLong(nums[1]), mStatsInMsecs));
if (!mFrequencies.contains(freq)) {
mFrequencies.add(freq);
}
@@ -273,7 +275,7 @@
}
}
cpuStates = mStates.get(cpu);
- cpuStates.add(new CpuState(cpu, freq, Long.parseLong(nums[1])));
+ cpuStates.add(new CpuState(cpu, freq, Long.parseLong(nums[1]), mStatsInMsecs));
if (!mFrequencies.contains(freq)) {
mFrequencies.add(freq);
}
diff --git a/src/org/omnirom/omnigears/system/TimeInState.java b/src/org/omnirom/omnigears/system/TimeInState.java
index 73cb649..fa7ad51 100644
--- a/src/org/omnirom/omnigears/system/TimeInState.java
+++ b/src/org/omnirom/omnigears/system/TimeInState.java
@@ -77,6 +77,8 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
+ boolean statsInMsecs = getResources().getBoolean(R.bool.config_cpufreq_msecs);
+
mShowCpus = new ArrayList<Integer>();
String showCpus = getResources().getString(R.string.config_cpufreq_show_cpus);
if (!TextUtils.isEmpty(showCpus)) {
@@ -85,7 +87,7 @@
mShowCpus.add(Integer.valueOf(cpu));
}
}
- monitor = new CPUStateMonitor(mShowCpus);
+ monitor = new CPUStateMonitor(mShowCpus, statsInMsecs);
mActiveCoreMode = mShowCpus.size() > 1;
mCpuNum = Helpers.getNumOfCpus();
@@ -265,7 +267,7 @@
mStatesView.setVisibility(View.VISIBLE);
long totTime = getStateTime(mActiveStateMode);
data.append(totTime + "\n");
- totTime = totTime / 100;
+ totTime = totTime / 1000;
if (!mActiveStateMode) {
CpuState deepSleepState = monitor.getDeepSleepState();
if (deepSleepState != null) {
@@ -359,7 +361,7 @@
if (per < 0f) {
per = 0f;
}
- tSec = duration / 100;
+ tSec = duration / 1000;
}
sPer = String.format("%3d", (int) per) + "%";
sDur = toString(tSec);
@@ -438,21 +440,24 @@
if (cpus.length != mCpuNum) {
return;
}
- for (int cpu = 0; cpu < mCpuNum; cpu++) {
- if (mShowCpus != null) {
- if (!mShowCpus.contains(cpu)) {
- continue;
+ try {
+ for (int cpu = 0; cpu < mCpuNum; cpu++) {
+ if (mShowCpus != null) {
+ if (!mShowCpus.contains(cpu)) {
+ continue;
+ }
}
+ String cpuData = cpus[cpu];
+ Map<Integer, Long> offsets = new HashMap<Integer, Long>();
+ String[] sOffsets = cpuData.split(",");
+ for (String offset : sOffsets) {
+ String[] parts = offset.split(";");
+ offsets.put(Integer.parseInt(parts[0]),
+ Long.parseLong(parts[1]));
+ }
+ monitor.setOffsets(cpu, offsets);
}
- String cpuData = cpus[cpu];
- Map<Integer, Long> offsets = new HashMap<Integer, Long>();
- String[] sOffsets = cpuData.split(",");
- for (String offset : sOffsets) {
- String[] parts = offset.split(";");
- offsets.put(Integer.parseInt(parts[0]),
- Long.parseLong(parts[1]));
- }
- monitor.setOffsets(cpu, offsets);
+ } catch (NumberFormatException e) {
}
sHasRefData = true;
}