summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/am/ProcessStatsService.java
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2013-08-07 10:08:22 -0700
committerDianne Hackborn <hackbod@google.com>2013-08-07 10:08:22 -0700
commit23fb6e84182f325f036b1735b817ecc253e2bd19 (patch)
tree39df98e6c5169bbf68a42f6966663fcb0aa50b22 /services/java/com/android/server/am/ProcessStatsService.java
parent57e76b405faf154352e17f0114bf6b23aa9ac0f0 (diff)
Start adding IPC calls to retrieve proc stat data.
Also fix a bug where we were not correctly unparcelling service duration data. Change-Id: Ie9113b2e3a747622441b1939ffc45edb5803a10f
Diffstat (limited to 'services/java/com/android/server/am/ProcessStatsService.java')
-rw-r--r--services/java/com/android/server/am/ProcessStatsService.java34
1 files changed, 32 insertions, 2 deletions
diff --git a/services/java/com/android/server/am/ProcessStatsService.java b/services/java/com/android/server/am/ProcessStatsService.java
index ee6f7ec906ed..8b4a5a0a4344 100644
--- a/services/java/com/android/server/am/ProcessStatsService.java
+++ b/services/java/com/android/server/am/ProcessStatsService.java
@@ -19,6 +19,7 @@ package com.android.server.am;
import android.app.AppGlobals;
import android.content.pm.IPackageManager;
import android.os.Parcel;
+import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
@@ -27,6 +28,7 @@ import android.util.ArrayMap;
import android.util.AtomicFile;
import android.util.Slog;
import android.util.SparseArray;
+import com.android.internal.app.IProcessStats;
import com.android.internal.app.ProcessStats;
import com.android.internal.os.BackgroundThread;
@@ -38,9 +40,10 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
-public final class ProcessStatsService {
+public final class ProcessStatsService extends IProcessStats.Stub {
static final String TAG = "ProcessStatsService";
static final boolean DEBUG = false;
@@ -204,7 +207,7 @@ public final class ProcessStatsService {
if (commit) {
mProcessStats.mFlags |= ProcessStats.FLAG_COMPLETE;
}
- mProcessStats.writeToParcel(mPendingWrite);
+ mProcessStats.writeToParcel(mPendingWrite, 0);
mPendingWriteFile = new AtomicFile(mFile.getBaseFile());
mPendingWriteCommitted = commit;
}
@@ -442,6 +445,33 @@ public final class ProcessStatsService {
return finalRes;
}
+ public byte[] getCurrentStats(List<ParcelFileDescriptor> historic) {
+ Parcel current = Parcel.obtain();
+ mWriteLock.lock();
+ try {
+ synchronized (mLock) {
+ mProcessStats.writeToParcel(current, 0);
+ }
+ if (historic != null) {
+ ArrayList<String> files = getCommittedFiles(0, true);
+ if (files != null) {
+ for (int i=files.size()-1; i>=0; i--) {
+ try {
+ ParcelFileDescriptor pfd = ParcelFileDescriptor.open(
+ new File(files.get(i)), ParcelFileDescriptor.MODE_READ_ONLY);
+ historic.add(pfd);
+ } catch (IOException e) {
+ Slog.w(TAG, "Failure opening procstat file " + files.get(i), e);
+ }
+ }
+ }
+ }
+ } finally {
+ mWriteLock.unlock();
+ }
+ return current.marshall();
+ }
+
static private void dumpHelp(PrintWriter pw) {
pw.println("Process stats (procstats) dump options:");
pw.println(" [--checkin|-c|--csv] [--csv-screen] [--csv-proc] [--csv-mem]");