diff options
author | Dianne Hackborn <hackbod@google.com> | 2013-08-07 10:08:22 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2013-08-07 10:08:22 -0700 |
commit | 23fb6e84182f325f036b1735b817ecc253e2bd19 (patch) | |
tree | 39df98e6c5169bbf68a42f6966663fcb0aa50b22 /services/java/com/android/server/am/ProcessStatsService.java | |
parent | 57e76b405faf154352e17f0114bf6b23aa9ac0f0 (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.java | 34 |
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]"); |