Merge "SystemServerInitThreadPool: add timing log for executing and shutdown" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-03-25 00:16:37 +00:00
committed by Android (Google) Code Review

View File

@@ -25,6 +25,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.ConcurrentUtils; import com.android.internal.util.ConcurrentUtils;
import com.android.internal.util.Preconditions; import com.android.internal.util.Preconditions;
import com.android.server.am.ActivityManagerService; import com.android.server.am.ActivityManagerService;
import com.android.server.utils.TimingsTraceAndSlog;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -93,6 +94,8 @@ public class SystemServerInitThreadPool {
mPendingTasks.add(description); mPendingTasks.add(description);
} }
return mService.submit(() -> { return mService.submit(() -> {
TimingsTraceAndSlog traceLog = TimingsTraceAndSlog.newAsyncLog();
traceLog.traceBegin("InitThreadPoolExec:" + description);
if (IS_DEBUGGABLE) { if (IS_DEBUGGABLE) {
Slog.d(TAG, "Started executing " + description); Slog.d(TAG, "Started executing " + description);
} }
@@ -100,6 +103,7 @@ public class SystemServerInitThreadPool {
runnable.run(); runnable.run();
} catch (RuntimeException e) { } catch (RuntimeException e) {
Slog.e(TAG, "Failure in " + description + ": " + e, e); Slog.e(TAG, "Failure in " + description + ": " + e, e);
traceLog.traceEnd();
throw e; throw e;
} }
synchronized (mPendingTasks) { synchronized (mPendingTasks) {
@@ -108,6 +112,7 @@ public class SystemServerInitThreadPool {
if (IS_DEBUGGABLE) { if (IS_DEBUGGABLE) {
Slog.d(TAG, "Finished executing " + description); Slog.d(TAG, "Finished executing " + description);
} }
traceLog.traceEnd();
}); });
} }
@@ -132,7 +137,10 @@ public class SystemServerInitThreadPool {
*/ */
static void shutdown() { static void shutdown() {
synchronized (LOCK) { synchronized (LOCK) {
TimingsTraceAndSlog t = new TimingsTraceAndSlog();
t.traceBegin("WaitInitThreadPoolShutdown");
if (sInstance == null) { if (sInstance == null) {
t.traceEnd();
Slog.wtf(TAG, "Already shutdown", new Exception()); Slog.wtf(TAG, "Already shutdown", new Exception());
return; return;
} }
@@ -147,6 +155,7 @@ public class SystemServerInitThreadPool {
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
dumpStackTraces(); dumpStackTraces();
t.traceEnd();
throw new IllegalStateException(TAG + " init interrupted"); throw new IllegalStateException(TAG + " init interrupted");
} }
if (!terminated) { if (!terminated) {
@@ -160,11 +169,13 @@ public class SystemServerInitThreadPool {
synchronized (sInstance.mPendingTasks) { synchronized (sInstance.mPendingTasks) {
copy.addAll(sInstance.mPendingTasks); copy.addAll(sInstance.mPendingTasks);
} }
t.traceEnd();
throw new IllegalStateException("Cannot shutdown. Unstarted tasks " throw new IllegalStateException("Cannot shutdown. Unstarted tasks "
+ unstartedRunnables + " Unfinished tasks " + copy); + unstartedRunnables + " Unfinished tasks " + copy);
} }
sInstance = null; // Make eligible for GC sInstance = null; // Make eligible for GC
Slog.d(TAG, "Shutdown successful"); Slog.d(TAG, "Shutdown successful");
t.traceEnd();
} }
} }