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;
     }