package com.rattlehead666.performancetweaker.app.utils;
import android.os.SystemClock;
import android.util.Log;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class TimeInStateReader {
public Map<Integer, Long> newStates = new HashMap<>();
private ArrayList<CpuState> states = new ArrayList<>();
private ArrayList<CpuState> _states = new ArrayList<>();
private long totaltime;
private TimeInStateReader() {
}
public static TimeInStateReader TimeInStatesReader() {
return new TimeInStateReader();
}
public ArrayList<CpuState> getCpuStateTime(boolean withDeepSleep, boolean filterZeroValues) {
states.clear();
BufferedReader bufferedReader;
Process process = null;
File statsFile = new File(Constants.time_in_states);
if (statsFile.exists()) {
if (statsFile.canRead()) {
String line;
try {
process = Runtime.getRuntime().exec("cat " + Constants.time_in_states);
} catch (IOException ioe) {
ioe.printStackTrace();
}
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
try {
while ((line = bufferedReader.readLine()) != null) {
String entries[] = line.split(" ");
long time = Long.parseLong(entries[1]);
states.add(new CpuState(Integer.parseInt(entries[0]), time));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* calculate deep sleep time
*/
if (withDeepSleep) {
long deepSleepTime = (SystemClock.elapsedRealtime() - SystemClock.uptimeMillis()) / 10;
if (deepSleepTime > 0) states.add(new CpuState(0, deepSleepTime));
}
if (states != null) {
Collections.sort(states);
}
if (newStates.size() > 0) {
int index = 0;
for (CpuState iterable_element : states) {
if (newStates.containsKey(iterable_element.frequency)) {
states.get(index).time -= newStates.get(iterable_element.frequency);
}
index++;
}
}
return removeZeroValues();
}
private ArrayList<CpuState> removeZeroValues() {
_states.clear();
for (CpuState s : states) {
if (s.time > 0) {
_states.add(s);
}
}
return _states;
}
public long getTotalTimeInState() {
totaltime = 0;
for (CpuState state : states) {
totaltime += state.getTime();
}
return totaltime;
}
public void setNewStates(HashMap<Integer, Long> state) {
clearNewStates();
Log.d("sizeofnew", state.size() + "");
newStates = state;
}
public void clearNewStates() {
newStates.clear();
}
}