Loading core/java/android/app/activity_manager.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -190,3 +190,10 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "enable_process_observer_broadcast_on_process_started" namespace: "system_performance" description: "Enable ProcessObserver's onProcessStarted callbacks." bug: "323959187" } services/core/java/com/android/server/am/ProcessList.java +65 −37 Original line number Diff line number Diff line Loading @@ -793,6 +793,7 @@ public final class ProcessList { final ProcessMap<ProcessRecord> mDyingProcesses = new ProcessMap<>(); // Self locked with the inner lock within the RemoteCallbackList @GuardedBy("mProcessObservers") private final RemoteCallbackList<IProcessObserver> mProcessObservers = new RemoteCallbackList<>(); Loading Loading @@ -4980,12 +4981,16 @@ public final class ProcessList { } void registerProcessObserver(IProcessObserver observer) { synchronized (mProcessObservers) { mProcessObservers.register(observer); } } void unregisterProcessObserver(IProcessObserver observer) { synchronized (mProcessObservers) { mProcessObservers.unregister(observer); } } void dispatchProcessesChanged() { int numOfChanges; Loading @@ -5002,6 +5007,7 @@ public final class ProcessList { } } synchronized (mProcessObservers) { int i = mProcessObservers.beginBroadcast(); while (i > 0) { i--; Loading @@ -5019,7 +5025,8 @@ public final class ProcessList { observer.onForegroundActivitiesChanged(item.pid, item.uid, item.foregroundActivities); } if ((item.changes & ProcessChangeItem.CHANGE_FOREGROUND_SERVICES) != 0) { if ((item.changes & ProcessChangeItem.CHANGE_FOREGROUND_SERVICES) != 0) { if (DEBUG_PROCESS_OBSERVERS) { Slog.i(TAG_PROCESS_OBSERVERS, "FOREGROUND SERVICES CHANGED pid=" + item.pid + " uid=" Loading @@ -5034,6 +5041,7 @@ public final class ProcessList { } } mProcessObservers.finishBroadcast(); } synchronized (mProcessChangeLock) { for (int j = 0; j < numOfChanges; j++) { Loading Loading @@ -5122,10 +5130,29 @@ public final class ProcessList { } void dispatchProcessStarted(ProcessRecord app, int pid) { // TODO(b/323959187) Add the implementation. if (!android.app.Flags.enableProcessObserverBroadcastOnProcessStarted()) { Slog.i(TAG, "ProcessObserver broadcast disabled"); return; } synchronized (mProcessObservers) { int i = mProcessObservers.beginBroadcast(); while (i > 0) { i--; final IProcessObserver observer = mProcessObservers.getBroadcastItem(i); if (observer != null) { try { observer.onProcessStarted(pid, app.uid, app.info.uid, app.info.packageName, app.processName); } catch (RemoteException e) { } } } mProcessObservers.finishBroadcast(); } } void dispatchProcessDied(int pid, int uid) { synchronized (mProcessObservers) { int i = mProcessObservers.beginBroadcast(); while (i > 0) { i--; Loading @@ -5139,6 +5166,7 @@ public final class ProcessList { } mProcessObservers.finishBroadcast(); } } @GuardedBy(anyOf = {"mService", "mProcLock"}) ArrayList<ProcessRecord> collectProcessesLOSP(int start, boolean allPkgs, String[] args) { Loading services/tests/mockingservicestests/src/com/android/server/am/ProcessObserverTest.java +5 −1 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ import android.os.Binder; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.util.Log; import androidx.test.filters.MediumTest; Loading Loading @@ -79,6 +81,8 @@ public class ProcessObserverTest { @Rule public final ApplicationExitInfoTest.ServiceThreadRule mServiceThreadRule = new ApplicationExitInfoTest.ServiceThreadRule(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private Context mContext; private HandlerThread mHandlerThread; Loading Loading @@ -239,8 +243,8 @@ public class ProcessObserverTest { /** * Verify that a process start event is dispatched to process observers. */ @Ignore("b/323959187") @Test @EnableFlags(android.app.Flags.FLAG_ENABLE_PROCESS_OBSERVER_BROADCAST_ON_PROCESS_STARTED) public void testNormal() throws Exception { ProcessRecord app = startProcess(); verify(mProcessObserver).onProcessStarted( Loading Loading
core/java/android/app/activity_manager.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -190,3 +190,10 @@ flag { purpose: PURPOSE_BUGFIX } } flag { name: "enable_process_observer_broadcast_on_process_started" namespace: "system_performance" description: "Enable ProcessObserver's onProcessStarted callbacks." bug: "323959187" }
services/core/java/com/android/server/am/ProcessList.java +65 −37 Original line number Diff line number Diff line Loading @@ -793,6 +793,7 @@ public final class ProcessList { final ProcessMap<ProcessRecord> mDyingProcesses = new ProcessMap<>(); // Self locked with the inner lock within the RemoteCallbackList @GuardedBy("mProcessObservers") private final RemoteCallbackList<IProcessObserver> mProcessObservers = new RemoteCallbackList<>(); Loading Loading @@ -4980,12 +4981,16 @@ public final class ProcessList { } void registerProcessObserver(IProcessObserver observer) { synchronized (mProcessObservers) { mProcessObservers.register(observer); } } void unregisterProcessObserver(IProcessObserver observer) { synchronized (mProcessObservers) { mProcessObservers.unregister(observer); } } void dispatchProcessesChanged() { int numOfChanges; Loading @@ -5002,6 +5007,7 @@ public final class ProcessList { } } synchronized (mProcessObservers) { int i = mProcessObservers.beginBroadcast(); while (i > 0) { i--; Loading @@ -5019,7 +5025,8 @@ public final class ProcessList { observer.onForegroundActivitiesChanged(item.pid, item.uid, item.foregroundActivities); } if ((item.changes & ProcessChangeItem.CHANGE_FOREGROUND_SERVICES) != 0) { if ((item.changes & ProcessChangeItem.CHANGE_FOREGROUND_SERVICES) != 0) { if (DEBUG_PROCESS_OBSERVERS) { Slog.i(TAG_PROCESS_OBSERVERS, "FOREGROUND SERVICES CHANGED pid=" + item.pid + " uid=" Loading @@ -5034,6 +5041,7 @@ public final class ProcessList { } } mProcessObservers.finishBroadcast(); } synchronized (mProcessChangeLock) { for (int j = 0; j < numOfChanges; j++) { Loading Loading @@ -5122,10 +5130,29 @@ public final class ProcessList { } void dispatchProcessStarted(ProcessRecord app, int pid) { // TODO(b/323959187) Add the implementation. if (!android.app.Flags.enableProcessObserverBroadcastOnProcessStarted()) { Slog.i(TAG, "ProcessObserver broadcast disabled"); return; } synchronized (mProcessObservers) { int i = mProcessObservers.beginBroadcast(); while (i > 0) { i--; final IProcessObserver observer = mProcessObservers.getBroadcastItem(i); if (observer != null) { try { observer.onProcessStarted(pid, app.uid, app.info.uid, app.info.packageName, app.processName); } catch (RemoteException e) { } } } mProcessObservers.finishBroadcast(); } } void dispatchProcessDied(int pid, int uid) { synchronized (mProcessObservers) { int i = mProcessObservers.beginBroadcast(); while (i > 0) { i--; Loading @@ -5139,6 +5166,7 @@ public final class ProcessList { } mProcessObservers.finishBroadcast(); } } @GuardedBy(anyOf = {"mService", "mProcLock"}) ArrayList<ProcessRecord> collectProcessesLOSP(int start, boolean allPkgs, String[] args) { Loading
services/tests/mockingservicestests/src/com/android/server/am/ProcessObserverTest.java +5 −1 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ import android.os.Binder; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.util.Log; import androidx.test.filters.MediumTest; Loading Loading @@ -79,6 +81,8 @@ public class ProcessObserverTest { @Rule public final ApplicationExitInfoTest.ServiceThreadRule mServiceThreadRule = new ApplicationExitInfoTest.ServiceThreadRule(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private Context mContext; private HandlerThread mHandlerThread; Loading Loading @@ -239,8 +243,8 @@ public class ProcessObserverTest { /** * Verify that a process start event is dispatched to process observers. */ @Ignore("b/323959187") @Test @EnableFlags(android.app.Flags.FLAG_ENABLE_PROCESS_OBSERVER_BROADCAST_ON_PROCESS_STARTED) public void testNormal() throws Exception { ProcessRecord app = startProcess(); verify(mProcessObserver).onProcessStarted( Loading