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