Revert "trace-ipc: Don't hold procLock while calling out."

This reverts commit 20af3c7e3b3c6ea024cd64c3241c4964626cce9f.

Reason for revert: <Droidmonitor created revert due to b/352251767. Will be verifying through ABTD before submission.>

Change-Id: I8459761e181981ba9ec14c38c83d29e654638a72
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index dffbaad..1b59c18 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -18333,55 +18333,43 @@
 
         boolean closeFd = true;
         try {
-            Objects.requireNonNull(fd);
-
-            record ProcessToDump(String processName, IApplicationThread thread) { }
-
-            PrintWriter pw = new FastPrintWriter(new FileOutputStream(fd.getFileDescriptor()));
-            pw.println("Binder transaction traces for all processes.\n");
-            final ArrayList<ProcessToDump> processes = new ArrayList<>();
             synchronized (mProcLock) {
-                // Since dumping binder transactions is a long-running operation, we can't do it
-                // with mProcLock held. Do the initial verification here, and save the processes
-                // to dump later outside the lock.
-                final ArrayList<ProcessRecord> unverifiedProcesses =
-                        new ArrayList<>(mProcessList.getLruProcessesLOSP());
-                for (int i = 0, size = unverifiedProcesses.size(); i < size; i++) {
-                    ProcessRecord process = unverifiedProcesses.get(i);
-                    final IApplicationThread thread = process.getThread();
-                    if (!processSanityChecksLPr(process, thread)) {
-                        continue;
-                    }
-                    processes.add(new ProcessToDump(process.processName, process.getThread()));
+                if (fd == null) {
+                    throw new IllegalArgumentException("null fd");
                 }
                 mBinderTransactionTrackingEnabled = false;
-            }
-            for (int i = 0, size = processes.size(); i < size; i++) {
-                final String processName = processes.get(i).processName();
-                final IApplicationThread thread = processes.get(i).thread();
 
-                pw.println("Traces for process: " + processName);
-                pw.flush();
-                try {
-                    TransferPipe tp = new TransferPipe();
-                    try {
-                        thread.stopBinderTrackingAndDump(tp.getWriteFd());
-                        tp.go(fd.getFileDescriptor());
-                    } finally {
-                        tp.kill();
+                PrintWriter pw = new FastPrintWriter(new FileOutputStream(fd.getFileDescriptor()));
+                pw.println("Binder transaction traces for all processes.\n");
+                mProcessList.forEachLruProcessesLOSP(true, process -> {
+                    final IApplicationThread thread = process.getThread();
+                    if (!processSanityChecksLPr(process, thread)) {
+                        return;
                     }
-                } catch (IOException e) {
-                    pw.println("Failure while dumping IPC traces from " + processName +
-                            ".  Exception: " + e);
+
+                    pw.println("Traces for process: " + process.processName);
                     pw.flush();
-                } catch (RemoteException e) {
-                    pw.println("Got a RemoteException while dumping IPC traces from " +
-                            processName + ".  Exception: " + e);
-                    pw.flush();
-                }
+                    try {
+                        TransferPipe tp = new TransferPipe();
+                        try {
+                            thread.stopBinderTrackingAndDump(tp.getWriteFd());
+                            tp.go(fd.getFileDescriptor());
+                        } finally {
+                            tp.kill();
+                        }
+                    } catch (IOException e) {
+                        pw.println("Failure while dumping IPC traces from " + process +
+                                ".  Exception: " + e);
+                        pw.flush();
+                    } catch (RemoteException e) {
+                        pw.println("Got a RemoteException while dumping IPC traces from " +
+                                process + ".  Exception: " + e);
+                        pw.flush();
+                    }
+                });
+                closeFd = false;
+                return true;
             }
-            closeFd = false;
-            return true;
         } finally {
             if (fd != null && closeFd) {
                 try {