Update a few runnable/handler to use a static class instead of a
runnable.
It will help collecting better data for handler stats (we can get a
fully qualified class name).
Test: tested manually
Change-Id: I674cf03909153fd87d97f600e246e04800cbb624
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 7a0a742..8de9423 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -6546,6 +6546,23 @@
return cpr != null ? cpr.newHolder(conn) : null;
}
+ private static final class StartActivityRunnable implements Runnable {
+ private final Context mContext;
+ private final Intent mIntent;
+ private final UserHandle mUserHandle;
+
+ StartActivityRunnable(Context context, Intent intent, UserHandle userHandle) {
+ this.mContext = context;
+ this.mIntent = intent;
+ this.mUserHandle = userHandle;
+ }
+
+ @Override
+ public void run() {
+ mContext.startActivityAsUser(mIntent, mUserHandle);
+ }
+ }
+
private boolean requestTargetProviderPermissionsReviewIfNeededLocked(ProviderInfo cpi,
ProcessRecord r, final int userId) {
if (getPackageManagerInternalLocked().isPermissionsReviewRequired(
@@ -6572,12 +6589,7 @@
}
final UserHandle userHandle = new UserHandle(userId);
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mContext.startActivityAsUser(intent, userHandle);
- }
- });
+ mHandler.post(new StartActivityRunnable(mContext, intent, userHandle));
return false;
}
@@ -16076,6 +16088,60 @@
return app.curAdj < prevAppAdj || app.getCurProcState() < prevProcState;
}
+ private static final class RecordPssRunnable implements Runnable {
+ private final ActivityManagerService mService;
+ private final ProcessRecord mProc;
+ private final File mHeapdumpFile;
+
+ RecordPssRunnable(ActivityManagerService service, ProcessRecord proc, File heapdumpFile) {
+ this.mService = service;
+ this.mProc = proc;
+ this.mHeapdumpFile = heapdumpFile;
+ }
+
+ @Override
+ public void run() {
+ mService.revokeUriPermission(ActivityThread.currentActivityThread()
+ .getApplicationThread(),
+ null, DumpHeapActivity.JAVA_URI,
+ Intent.FLAG_GRANT_READ_URI_PERMISSION
+ | Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
+ UserHandle.myUserId());
+ ParcelFileDescriptor fd = null;
+ try {
+ mHeapdumpFile.delete();
+ fd = ParcelFileDescriptor.open(mHeapdumpFile,
+ ParcelFileDescriptor.MODE_CREATE
+ | ParcelFileDescriptor.MODE_TRUNCATE
+ | ParcelFileDescriptor.MODE_WRITE_ONLY
+ | ParcelFileDescriptor.MODE_APPEND);
+ IApplicationThread thread = mProc.thread;
+ if (thread != null) {
+ try {
+ if (DEBUG_PSS) {
+ Slog.d(TAG_PSS, "Requesting dump heap from "
+ + mProc + " to " + mHeapdumpFile);
+ }
+ thread.dumpHeap(/* managed= */ true,
+ /* mallocInfo= */ false, /* runGc= */ false,
+ mHeapdumpFile.toString(), fd,
+ /* finishCallback= */ null);
+ } catch (RemoteException e) {
+ }
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } finally {
+ if (fd != null) {
+ try {
+ fd.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+ }
+ }
+
/**
* Record new PSS sample for a process.
*/
@@ -16136,48 +16202,8 @@
mMemWatchDumpFile = heapdumpFile.toString();
mMemWatchDumpPid = proc.pid;
mMemWatchDumpUid = proc.uid;
- BackgroundThread.getHandler().post(new Runnable() {
- @Override
- public void run() {
- revokeUriPermission(ActivityThread.currentActivityThread()
- .getApplicationThread(),
- null, DumpHeapActivity.JAVA_URI,
- Intent.FLAG_GRANT_READ_URI_PERMISSION
- | Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
- UserHandle.myUserId());
- ParcelFileDescriptor fd = null;
- try {
- heapdumpFile.delete();
- fd = ParcelFileDescriptor.open(heapdumpFile,
- ParcelFileDescriptor.MODE_CREATE |
- ParcelFileDescriptor.MODE_TRUNCATE |
- ParcelFileDescriptor.MODE_WRITE_ONLY |
- ParcelFileDescriptor.MODE_APPEND);
- IApplicationThread thread = myProc.thread;
- if (thread != null) {
- try {
- if (DEBUG_PSS) Slog.d(TAG_PSS,
- "Requesting dump heap from "
- + myProc + " to " + heapdumpFile);
- thread.dumpHeap(/* managed= */ true,
- /* mallocInfo= */ false, /* runGc= */ false,
- heapdumpFile.toString(), fd,
- /* finishCallback= */ null);
- } catch (RemoteException e) {
- }
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } finally {
- if (fd != null) {
- try {
- fd.close();
- } catch (IOException e) {
- }
- }
- }
- }
- });
+ BackgroundThread.getHandler().post(
+ new RecordPssRunnable(this, myProc, DumpHeapProvider.getJavaFile()));
} else {
Slog.w(TAG, "Process " + proc + " exceeded pss limit " + check
+ ", but debugging not enabled");
@@ -17017,6 +17043,22 @@
return success;
}
+ private static final class ProcStatsRunnable implements Runnable {
+ private final ActivityManagerService mService;
+ private final ProcessStatsService mProcessStats;
+
+ ProcStatsRunnable(ActivityManagerService service, ProcessStatsService mProcessStats) {
+ this.mService = service;
+ this.mProcessStats = mProcessStats;
+ }
+
+ @Override public void run() {
+ synchronized (mService) {
+ mProcessStats.writeStateAsyncLocked();
+ }
+ }
+ }
+
@GuardedBy("this")
final void updateOomAdjLocked() {
mOomAdjProfiler.oomAdjStarted();
@@ -17505,13 +17547,7 @@
}
if (mProcessStats.shouldWriteNowLocked(now)) {
- mHandler.post(new Runnable() {
- @Override public void run() {
- synchronized (ActivityManagerService.this) {
- mProcessStats.writeStateAsyncLocked();
- }
- }
- });
+ mHandler.post(new ProcStatsRunnable(ActivityManagerService.this, mProcessStats));
}
if (DEBUG_OOM_ADJ) {
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index 3f03169..6d3a3b6 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -105,6 +105,7 @@
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.INetworkManagementService;
+import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.os.PowerManager;
@@ -323,6 +324,12 @@
Clock.systemUTC());
}
+ private static final class NetworkStatsHandler extends Handler {
+ NetworkStatsHandler(Looper looper, Handler.Callback callback) {
+ super(looper, callback);
+ }
+ }
+
public static NetworkStatsService create(Context context,
INetworkManagementService networkManager) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
@@ -339,7 +346,7 @@
HandlerThread handlerThread = new HandlerThread(TAG);
Handler.Callback callback = new HandlerCallback(service);
handlerThread.start();
- Handler handler = new Handler(handlerThread.getLooper(), callback);
+ Handler handler = new NetworkStatsHandler(handlerThread.getLooper(), callback);
service.setHandler(handler, callback);
return service;
}