| Index: webrtc/examples/androidapp/src/org/appspot/apprtc/CpuMonitor.java
|
| diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/CpuMonitor.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/CpuMonitor.java
|
| index 2c1dffca6e0ee616d2d7e7309cd21f7a9df698b7..9f604fdbe86f2ee32a6b9c8f651f05d1cd7a2029 100644
|
| --- a/webrtc/examples/androidapp/src/org/appspot/apprtc/CpuMonitor.java
|
| +++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/CpuMonitor.java
|
| @@ -70,10 +70,10 @@ import org.appspot.apprtc.util.LooperExecutor;
|
|
|
| class CpuMonitor {
|
| private static final String TAG = "CpuMonitor";
|
| - private static final int MOVING_AVERAGE_SAMPLES = 10;
|
| + private static final int MOVING_AVERAGE_SAMPLES = 5;
|
|
|
| - private static final int CPU_STAT_SAMPLE_PERIOD_MS = 1000;
|
| - private static final int CPU_STAT_LOG_PERIOD_MS = 5000;
|
| + private static final int CPU_STAT_SAMPLE_PERIOD_MS = 2000;
|
| + private static final int CPU_STAT_LOG_PERIOD_MS = 6000;
|
|
|
| private final Context appContext;
|
| // User CPU usage at current frequency.
|
| @@ -209,6 +209,7 @@ class CpuMonitor {
|
| }
|
|
|
| private void scheduleCpuUtilizationTask() {
|
| + executor.cancelScheduledTasks();
|
| executor.scheduleAtFixedRate(new Runnable() {
|
| @Override
|
| public void run() {
|
| @@ -438,21 +439,29 @@ class CpuMonitor {
|
| private long readFreqFromFile(String fileName) {
|
| long number = 0;
|
| try {
|
| - FileReader fin = new FileReader(fileName);
|
| + BufferedReader reader = new BufferedReader(new FileReader(fileName));
|
| try {
|
| - BufferedReader rdr = new BufferedReader(fin);
|
| - Scanner scannerC = new Scanner(rdr);
|
| - number = scannerC.nextLong();
|
| - scannerC.close();
|
| - } catch (Exception e) {
|
| - // CPU presumably got offline just after we opened file.
|
| + String line = reader.readLine();
|
| + number = parseLong(line);
|
| } finally {
|
| - fin.close();
|
| + reader.close();
|
| }
|
| } catch (FileNotFoundException e) {
|
| - // CPU is offline, not an error.
|
| + // CPU core is off, so file with its scaling frequency .../cpufreq/scaling_cur_freq
|
| + // is not present. This is not an error.
|
| } catch (IOException e) {
|
| - Log.e(TAG, "Error closing file");
|
| + // CPU core is off, so file with its scaling frequency .../cpufreq/scaling_cur_freq
|
| + // is empty. This is not an error.
|
| + }
|
| + return number;
|
| + }
|
| +
|
| + private static long parseLong(String value) {
|
| + long number = 0;
|
| + try {
|
| + number = Long.parseLong(value);
|
| + } catch (NumberFormatException e) {
|
| + Log.e(TAG, "parseLong error.", e);
|
| }
|
| return number;
|
| }
|
| @@ -466,32 +475,36 @@ class CpuMonitor {
|
| long systemTime = 0;
|
| long idleTime = 0;
|
| try {
|
| - FileReader fin = new FileReader("/proc/stat");
|
| + BufferedReader reader = new BufferedReader(new FileReader("/proc/stat"));
|
| try {
|
| - BufferedReader rdr = new BufferedReader(fin);
|
| - Scanner scanner = new Scanner(rdr);
|
| - scanner.next();
|
| - userTime = scanner.nextLong(); // user
|
| - long nice = scanner.nextLong(); // nice
|
| - userTime += nice;
|
| - systemTime = scanner.nextLong(); // system
|
| - idleTime = scanner.nextLong(); // idle
|
| - long ioWaitTime = scanner.nextLong(); // iowait
|
| - userTime += ioWaitTime;
|
| - long irqTime = scanner.nextLong() + scanner.nextLong(); // irq + softirq
|
| - systemTime += irqTime;
|
| - scanner.close();
|
| + // line should contain something like this:
|
| + // cpu 5093818 271838 3512830 165934119 101374 447076 272086 0 0 0
|
| + // user nice system idle iowait irq softirq
|
| + String line = reader.readLine();
|
| + String lines[] = line.split("\\s+");
|
| + int length = lines.length;
|
| + if (length >= 5) {
|
| + userTime = parseLong(lines[1]); // user
|
| + userTime += parseLong(lines[2]); // nice
|
| + systemTime = parseLong(lines[3]); // system
|
| + idleTime = parseLong(lines[4]); // idle
|
| + }
|
| + if (length >= 8) {
|
| + userTime += parseLong(lines[5]); // iowait
|
| + systemTime += parseLong(lines[6]); // irq
|
| + systemTime += parseLong(lines[7]); // softirq
|
| + }
|
| } catch (Exception e) {
|
| - Log.e(TAG, "Problems parsing /proc/stat");
|
| + Log.e(TAG, "Problems parsing /proc/stat", e);
|
| return null;
|
| } finally {
|
| - fin.close();
|
| + reader.close();
|
| }
|
| } catch (FileNotFoundException e) {
|
| - Log.e(TAG, "Cannot open /proc/stat for reading");
|
| + Log.e(TAG, "Cannot open /proc/stat for reading", e);
|
| return null;
|
| } catch (IOException e) {
|
| - Log.e(TAG, "Problems reading /proc/stat");
|
| + Log.e(TAG, "Problems reading /proc/stat", e);
|
| return null;
|
| }
|
| return new ProcStat(userTime, systemTime, idleTime);
|
|
|