Merge "Log app launch event in fg thread" into sc-dev

This commit is contained in:
Riddle Hsu
2021-05-10 14:02:46 +00:00
committed by Android (Google) Code Review

View File

@@ -80,6 +80,7 @@ import android.content.pm.dex.ArtManagerInternal;
import android.content.pm.dex.PackageOptimizationInfo;
import android.metrics.LogMaker;
import android.os.Binder;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.os.Trace;
@@ -92,9 +93,9 @@ import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.server.FgThread;
import com.android.server.LocalServices;
import com.android.server.apphibernation.AppHibernationManagerInternal;
import com.android.server.apphibernation.AppHibernationService;
@@ -150,6 +151,7 @@ class ActivityMetricsLogger {
private long mLastLogTimeSecs;
private final ActivityTaskSupervisor mSupervisor;
private final MetricsLogger mMetricsLogger = new MetricsLogger();
private final Handler mLoggerHandler = FgThread.getHandler();
/** All active transitions. */
private final ArrayList<TransitionInfo> mTransitionInfoList = new ArrayList<>();
@@ -897,11 +899,11 @@ class ActivityMetricsLogger {
// This will avoid any races with other operations that modify the ActivityRecord.
final TransitionInfoSnapshot infoSnapshot = new TransitionInfoSnapshot(info);
if (info.isInterestingToLoggerAndObserver()) {
BackgroundThread.getHandler().post(() -> logAppTransition(
mLoggerHandler.post(() -> logAppTransition(
info.mCurrentTransitionDeviceUptime, info.mCurrentTransitionDelayMs,
infoSnapshot, isHibernating));
}
BackgroundThread.getHandler().post(() -> logAppDisplayed(infoSnapshot));
mLoggerHandler.post(() -> logAppDisplayed(infoSnapshot));
if (info.mPendingFullyDrawn != null) {
info.mPendingFullyDrawn.run();
}
@@ -909,7 +911,7 @@ class ActivityMetricsLogger {
info.mLastLaunchedActivity.info.launchToken = null;
}
// This gets called on a background thread without holding the activity manager lock.
// This gets called on another thread without holding the activity manager lock.
private void logAppTransition(int currentTransitionDeviceUptime, int currentTransitionDelayMs,
TransitionInfoSnapshot info, boolean isHibernating) {
final LogMaker builder = new LogMaker(APP_TRANSITION);
@@ -1036,7 +1038,7 @@ class ActivityMetricsLogger {
: TimeUnit.NANOSECONDS.toMillis(currentTimestampNs - info.mTransitionStartTimeNs);
final TransitionInfoSnapshot infoSnapshot =
new TransitionInfoSnapshot(info, r, (int) startupTimeMs);
BackgroundThread.getHandler().post(() -> logAppFullyDrawn(infoSnapshot));
mLoggerHandler.post(() -> logAppFullyDrawn(infoSnapshot));
mLastTransitionInfo.remove(r);
if (!info.isInterestingToLoggerAndObserver()) {