Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41bb305e authored by wilsonshih's avatar wilsonshih
Browse files

Port log to protologs for shell starting window.

Bug: 185288910
Test: adb shell dumpsys activity service SystemUIService WMShell\
enable-text WM_SHELL_STARTING_WINDOW

Change-Id: I549ed9564d662507df31fac2a69cd9ac0cb018a6
parent 6773eb32
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -32,6 +32,8 @@ public enum ShellProtoLogGroup implements IProtoLogGroup {
            Consts.TAG_WM_SHELL),
            Consts.TAG_WM_SHELL),
    WM_SHELL_DRAG_AND_DROP(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
    WM_SHELL_DRAG_AND_DROP(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
            Consts.TAG_WM_SHELL),
            Consts.TAG_WM_SHELL),
    WM_SHELL_STARTING_WINDOW(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
            Consts.TAG_WM_STARTING_WINDOW),
    TEST_GROUP(true, true, false, "WindowManagerShellProtoLogTest");
    TEST_GROUP(true, true, false, "WindowManagerShellProtoLogTest");


    private final boolean mEnabled;
    private final boolean mEnabled;
@@ -91,6 +93,7 @@ public enum ShellProtoLogGroup implements IProtoLogGroup {


    private static class Consts {
    private static class Consts {
        private static final String TAG_WM_SHELL = "WindowManagerShell";
        private static final String TAG_WM_SHELL = "WindowManagerShell";
        private static final String TAG_WM_STARTING_WINDOW = "ShellStartingWindow";


        private static final boolean ENABLE_DEBUG = true;
        private static final boolean ENABLE_DEBUG = true;
        private static final boolean ENABLE_LOG_TO_PROTO_DEBUG = true;
        private static final boolean ENABLE_LOG_TO_PROTO_DEBUG = true;
+1 −1
Original line number Original line Diff line number Diff line
@@ -56,7 +56,7 @@ import com.android.wm.shell.common.TransactionPool;
public class SplashScreenExitAnimation implements Animator.AnimatorListener {
public class SplashScreenExitAnimation implements Animator.AnimatorListener {
    private static final boolean DEBUG_EXIT_ANIMATION = false;
    private static final boolean DEBUG_EXIT_ANIMATION = false;
    private static final boolean DEBUG_EXIT_ANIMATION_BLEND = false;
    private static final boolean DEBUG_EXIT_ANIMATION_BLEND = false;
    private static final String TAG = StartingSurfaceDrawer.TAG;
    private static final String TAG = StartingWindowController.TAG;


    private static final Interpolator ICON_INTERPOLATOR = new PathInterpolator(0.15f, 0f, 1f, 1f);
    private static final Interpolator ICON_INTERPOLATOR = new PathInterpolator(0.15f, 0f, 1f, 1f);
    private static final Interpolator MASK_RADIUS_INTERPOLATOR =
    private static final Interpolator MASK_RADIUS_INTERPOLATOR =
+33 −46
Original line number Original line Diff line number Diff line
@@ -61,9 +61,11 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.graphics.palette.Palette;
import com.android.internal.graphics.palette.Palette;
import com.android.internal.graphics.palette.Quantizer;
import com.android.internal.graphics.palette.Quantizer;
import com.android.internal.graphics.palette.VariationalKMeansQuantizer;
import com.android.internal.graphics.palette.VariationalKMeansQuantizer;
import com.android.internal.protolog.common.ProtoLog;
import com.android.launcher3.icons.BaseIconFactory;
import com.android.launcher3.icons.BaseIconFactory;
import com.android.launcher3.icons.IconProvider;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.common.TransactionPool;
import com.android.wm.shell.common.TransactionPool;
import com.android.wm.shell.protolog.ShellProtoLogGroup;


import java.util.List;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Consumer;
@@ -78,8 +80,7 @@ import java.util.function.UnaryOperator;
 * @hide
 * @hide
 */
 */
public class SplashscreenContentDrawer {
public class SplashscreenContentDrawer {
    private static final String TAG = StartingSurfaceDrawer.TAG;
    private static final String TAG = StartingWindowController.TAG;
    private static final boolean DEBUG = StartingSurfaceDrawer.DEBUG_SPLASH_SCREEN;


    // The acceptable area ratio of foreground_icon_area/background_icon_area, if there is an
    // The acceptable area ratio of foreground_icon_area/background_icon_area, if there is an
    // icon which it's non-transparent foreground area is similar to it's background area, then
    // icon which it's non-transparent foreground area is similar to it's background area, then
@@ -295,12 +296,10 @@ public class SplashscreenContentDrawer {
                R.styleable.Window_windowSplashScreenIconBackgroundColor, def),
                R.styleable.Window_windowSplashScreenIconBackgroundColor, def),
                Color.TRANSPARENT);
                Color.TRANSPARENT);
        typedArray.recycle();
        typedArray.recycle();
        if (DEBUG) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
            Slog.d(TAG, "window attributes color: "
                "getWindowAttrs: window attributes color: %s, replace icon: %b, avd duration: %d",
                    + Integer.toHexString(attrs.mWindowBgColor)
                Integer.toHexString(attrs.mWindowBgColor), attrs.mSplashScreenIcon != null,
                    + " icon " + attrs.mSplashScreenIcon + " duration " + attrs.mAnimationDuration
                attrs.mAnimationDuration);
                    + " brandImage " + attrs.mBrandingImage);
        }
    }
    }


    /** Creates the wrapper with system theme to avoid unexpected styles from app. */
    /** Creates the wrapper with system theme to avoid unexpected styles from app. */
@@ -385,9 +384,8 @@ public class SplashscreenContentDrawer {
                    iconDrawable = mContext.getPackageManager().getDefaultActivityIcon();
                    iconDrawable = mContext.getPackageManager().getDefaultActivityIcon();
                }
                }
                if (!processAdaptiveIcon(iconDrawable)) {
                if (!processAdaptiveIcon(iconDrawable)) {
                    if (DEBUG) {
                    ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                        Slog.d(TAG, "The icon is not an AdaptiveIconDrawable");
                            "The icon is not an AdaptiveIconDrawable");
                    }
                    Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "legacy_icon_factory");
                    Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "legacy_icon_factory");
                    final ShapeIconFactory factory = new ShapeIconFactory(
                    final ShapeIconFactory factory = new ShapeIconFactory(
                            SplashscreenContentDrawer.this.mContext,
                            SplashscreenContentDrawer.this.mContext,
@@ -435,14 +433,14 @@ public class SplashscreenContentDrawer {
                    () -> new DrawableColorTester(iconForeground,
                    () -> new DrawableColorTester(iconForeground,
                            DrawableColorTester.TRANSLUCENT_FILTER /* filterType */),
                            DrawableColorTester.TRANSLUCENT_FILTER /* filterType */),
                    () -> new DrawableColorTester(adaptiveIconDrawable.getBackground()));
                    () -> new DrawableColorTester(adaptiveIconDrawable.getBackground()));

            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
            if (DEBUG) {
                    "processAdaptiveIcon: FgMainColor=%s, BgMainColor=%s, "
                Slog.d(TAG, "FgMainColor=" + Integer.toHexString(iconColor.mFgColor)
                            + "IsBgComplex=%b, FromCache=%b, ThemeColor=%s",
                        + " BgMainColor=" + Integer.toHexString(iconColor.mBgColor)
                    Integer.toHexString(iconColor.mFgColor),
                        + " IsBgComplex=" + iconColor.mIsBgComplex
                    Integer.toHexString(iconColor.mBgColor),
                        + " FromCache=" + (iconColor.mReuseCount > 0)
                    iconColor.mIsBgComplex,
                        + " ThemeColor=" + Integer.toHexString(mThemeColor));
                    iconColor.mReuseCount > 0,
            }
                    Integer.toHexString(mThemeColor));


            // Only draw the foreground of AdaptiveIcon to the splash screen if below condition
            // Only draw the foreground of AdaptiveIcon to the splash screen if below condition
            // meet:
            // meet:
@@ -456,9 +454,8 @@ public class SplashscreenContentDrawer {
                    && (isRgbSimilarInHsv(mThemeColor, iconColor.mBgColor)
                    && (isRgbSimilarInHsv(mThemeColor, iconColor.mBgColor)
                            || (iconColor.mIsBgGrayscale
                            || (iconColor.mIsBgGrayscale
                                    && !isRgbSimilarInHsv(mThemeColor, iconColor.mFgColor)))) {
                                    && !isRgbSimilarInHsv(mThemeColor, iconColor.mFgColor)))) {
                if (DEBUG) {
                ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                    Slog.d(TAG, "makeSplashScreenContentView: choose fg icon");
                        "processAdaptiveIcon: choose fg icon");
                }
                // Reference AdaptiveIcon description, outer is 108 and inner is 72, so we
                // Reference AdaptiveIcon description, outer is 108 and inner is 72, so we
                // scale by 192/160 if we only draw adaptiveIcon's foreground.
                // scale by 192/160 if we only draw adaptiveIcon's foreground.
                final float noBgScale =
                final float noBgScale =
@@ -469,9 +466,8 @@ public class SplashscreenContentDrawer {
                mFinalIconSize = (int) (0.5f + mIconSize * noBgScale);
                mFinalIconSize = (int) (0.5f + mIconSize * noBgScale);
                createIconDrawable(iconForeground, false);
                createIconDrawable(iconForeground, false);
            } else {
            } else {
                if (DEBUG) {
                ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                    Slog.d(TAG, "makeSplashScreenContentView: draw whole icon");
                        "processAdaptiveIcon: draw whole icon");
                }
                createIconDrawable(iconDrawable, false);
                createIconDrawable(iconDrawable, false);
            }
            }
            Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
            Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
@@ -504,9 +500,6 @@ public class SplashscreenContentDrawer {
                        mBrandingImageHeight);
                        mBrandingImageHeight);
            }
            }
            final SplashScreenView splashScreenView = builder.build();
            final SplashScreenView splashScreenView = builder.build();
            if (DEBUG) {
                Slog.d(TAG, "fillViewWithIcon surfaceWindowView " + splashScreenView);
            }
            if (mSuggestType != STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) {
            if (mSuggestType != STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) {
                splashScreenView.addOnAttachStateChangeListener(
                splashScreenView.addOnAttachStateChangeListener(
                        new View.OnAttachStateChangeListener() {
                        new View.OnAttachStateChangeListener() {
@@ -536,10 +529,9 @@ public class SplashscreenContentDrawer {
        final float lumB = Color.luminance(b);
        final float lumB = Color.luminance(b);
        final float contrastRatio = lumA > lumB
        final float contrastRatio = lumA > lumB
                ? (lumA + 0.05f) / (lumB + 0.05f) : (lumB + 0.05f) / (lumA + 0.05f);
                ? (lumA + 0.05f) / (lumB + 0.05f) : (lumB + 0.05f) / (lumA + 0.05f);
        if (DEBUG) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
            Slog.d(TAG, "isRgbSimilarInHsv a: " + Integer.toHexString(a)
                "isRgbSimilarInHsv a:%s, b:%s, contrast ratio:%f",
                    + " b " + Integer.toHexString(b) + " contrast ratio: " + contrastRatio);
                Integer.toHexString(a), Integer.toHexString(b), contrastRatio);
        }
        if (contrastRatio < 2) {
        if (contrastRatio < 2) {
            return true;
            return true;
        }
        }
@@ -560,14 +552,11 @@ public class SplashscreenContentDrawer {
        final double square = squareH + squareS + squareV;
        final double square = squareH + squareS + squareV;
        final double mean = square / 3;
        final double mean = square / 3;
        final double root = Math.sqrt(mean);
        final double root = Math.sqrt(mean);
        if (DEBUG) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
            Slog.d(TAG, "hsvDiff " + minAngle
                "isRgbSimilarInHsv hsvDiff: %d, ah: %f, bh: %f, as: %f, bs: %f, av: %f, bv: %f, "
                    + " ah " + aHsv[0] + " bh " + bHsv[0]
                        + "sqH: %f, sqS: %f, sqV: %f, rsm: %f",
                    + " as " + aHsv[1] + " bs " + bHsv[1]
                minAngle, aHsv[0], bHsv[0], aHsv[1], bHsv[1], aHsv[2], bHsv[2],
                    + " av " + aHsv[2] + " bv " + bHsv[2]
                squareH, squareS, squareV, root);
                    + " sqH " + squareH + " sqS " + squareS + " sqV " + squareV
                    + " root " + root);
        }
        return root < 0.1;
        return root < 0.1;
    }
    }


@@ -598,9 +587,8 @@ public class SplashscreenContentDrawer {
            if (drawable instanceof LayerDrawable) {
            if (drawable instanceof LayerDrawable) {
                LayerDrawable layerDrawable = (LayerDrawable) drawable;
                LayerDrawable layerDrawable = (LayerDrawable) drawable;
                if (layerDrawable.getNumberOfLayers() > 0) {
                if (layerDrawable.getNumberOfLayers() > 0) {
                    if (DEBUG) {
                    ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                        Slog.d(TAG, "replace drawable with bottom layer drawable");
                            "DrawableColorTester: replace drawable with bottom layer drawable");
                    }
                    drawable = layerDrawable.getDrawable(0);
                    drawable = layerDrawable.getDrawable(0);
                }
                }
            }
            }
@@ -805,9 +793,8 @@ public class SplashscreenContentDrawer {
                        }
                        }
                    }
                    }
                    if (realSize == 0) {
                    if (realSize == 0) {
                        if (DEBUG) {
                        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                            Slog.d(TAG, "quantize: this is pure transparent image");
                                "DrawableTester quantize: pure transparent image");
                        }
                        mInnerQuantizer.quantize(pixels, maxColors);
                        mInnerQuantizer.quantize(pixels, maxColors);
                        return;
                        return;
                    }
                    }
+1 −1
Original line number Original line Diff line number Diff line
@@ -52,7 +52,7 @@ import com.android.internal.R;
 */
 */
public class SplashscreenIconDrawableFactory {
public class SplashscreenIconDrawableFactory {


    private static final String TAG = "SplashscreenIconDrawableFactory";
    private static final String TAG = StartingWindowController.TAG;


    /**
    /**
     * @return An array containing the foreground drawable at index 0 and if needed a background
     * @return An array containing the foreground drawable at index 0 and if needed a background
+25 −35
Original line number Original line Diff line number Diff line
@@ -61,10 +61,12 @@ import android.window.TaskSnapshot;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
import com.android.launcher3.icons.IconProvider;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.TransactionPool;
import com.android.wm.shell.common.TransactionPool;
import com.android.wm.shell.common.annotations.ShellSplashscreenThread;
import com.android.wm.shell.common.annotations.ShellSplashscreenThread;
import com.android.wm.shell.protolog.ShellProtoLogGroup;


import java.util.function.Supplier;
import java.util.function.Supplier;


@@ -106,9 +108,7 @@ import java.util.function.Supplier;
 */
 */
@ShellSplashscreenThread
@ShellSplashscreenThread
public class StartingSurfaceDrawer {
public class StartingSurfaceDrawer {
    static final String TAG = StartingSurfaceDrawer.class.getSimpleName();
    private static final String TAG = StartingWindowController.TAG;
    static final boolean DEBUG_SPLASH_SCREEN = StartingWindowController.DEBUG_SPLASH_SCREEN;
    static final boolean DEBUG_TASK_SNAPSHOT = StartingWindowController.DEBUG_TASK_SNAPSHOT;


    private final Context mContext;
    private final Context mContext;
    private final DisplayManager mDisplayManager;
    private final DisplayManager mDisplayManager;
@@ -178,11 +178,9 @@ public class StartingSurfaceDrawer {


        // replace with the default theme if the application didn't set
        // replace with the default theme if the application didn't set
        final int theme = getSplashScreenTheme(windowInfo.splashScreenThemeResId, activityInfo);
        final int theme = getSplashScreenTheme(windowInfo.splashScreenThemeResId, activityInfo);
        if (DEBUG_SPLASH_SCREEN) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
            Slog.d(TAG, "addSplashScreen " + activityInfo.packageName
                "addSplashScreen for package: %s with theme: %s for task: %d, suggestType: %d",
                    + " theme=" + Integer.toHexString(theme) + " task=" + taskInfo.taskId
                activityInfo.packageName, Integer.toHexString(theme), taskId, suggestType);
                    + " suggestType=" + suggestType);
        }
        final Display display = getDisplay(displayId);
        final Display display = getDisplay(displayId);
        if (display == null) {
        if (display == null) {
            // Can't show splash screen on requested display, so skip showing at all.
            // Can't show splash screen on requested display, so skip showing at all.
@@ -207,10 +205,9 @@ public class StartingSurfaceDrawer {


        final Configuration taskConfig = taskInfo.getConfiguration();
        final Configuration taskConfig = taskInfo.getConfiguration();
        if (taskConfig.diffPublicOnly(context.getResources().getConfiguration()) != 0) {
        if (taskConfig.diffPublicOnly(context.getResources().getConfiguration()) != 0) {
            if (DEBUG_SPLASH_SCREEN) {
            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                Slog.d(TAG, "addSplashScreen: creating context based"
                    "addSplashScreen: creating context based on task Configuration %s",
                        + " on task Configuration " + taskConfig + " for splash screen");
                    taskConfig);
            }
            final Context overrideContext = context.createConfigurationContext(taskConfig);
            final Context overrideContext = context.createConfigurationContext(taskConfig);
            overrideContext.setTheme(theme);
            overrideContext.setTheme(theme);
            final TypedArray typedArray = overrideContext.obtainStyledAttributes(
            final TypedArray typedArray = overrideContext.obtainStyledAttributes(
@@ -221,10 +218,9 @@ public class StartingSurfaceDrawer {
                    // We want to use the windowBackground for the override context if it is
                    // We want to use the windowBackground for the override context if it is
                    // available, otherwise we use the default one to make sure a themed starting
                    // available, otherwise we use the default one to make sure a themed starting
                    // window is displayed for the app.
                    // window is displayed for the app.
                    if (DEBUG_SPLASH_SCREEN) {
                    ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                        Slog.d(TAG, "addSplashScreen: apply overrideConfig"
                            "addSplashScreen: apply overrideConfig %s",
                                + taskConfig + " to starting window resId=" + resId);
                            taskConfig);
                    }
                    context = overrideContext;
                    context = overrideContext;
                }
                }
            } catch (Resources.NotFoundException e) {
            } catch (Resources.NotFoundException e) {
@@ -460,10 +456,9 @@ public class StartingSurfaceDrawer {
     * Called when the content of a task is ready to show, starting window can be removed.
     * Called when the content of a task is ready to show, starting window can be removed.
     */
     */
    public void removeStartingWindow(StartingWindowRemovalInfo removalInfo) {
    public void removeStartingWindow(StartingWindowRemovalInfo removalInfo) {
        if (DEBUG_SPLASH_SCREEN || DEBUG_TASK_SNAPSHOT) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
            Slog.d(TAG, "Task start finish, remove starting surface for task "
                "Task start finish, remove starting surface for task: %d",
                    + removalInfo.taskId);
                removalInfo.taskId);
        }
        removeWindowSynced(removalInfo);
        removeWindowSynced(removalInfo);


    }
    }
@@ -485,10 +480,9 @@ public class StartingSurfaceDrawer {
        } else {
        } else {
            parcelable = null;
            parcelable = null;
        }
        }
        if (DEBUG_SPLASH_SCREEN) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
            Slog.v(TAG, "Copying splash screen window view for task: " + taskId
                "Copying splash screen window view for task: %d with parcelable %b",
                    + " parcelable: " + parcelable);
                taskId, parcelable != null);
        }
        ActivityTaskManager.getInstance().onSplashScreenViewCopyFinished(taskId, parcelable);
        ActivityTaskManager.getInstance().onSplashScreenViewCopyFinished(taskId, parcelable);
    }
    }


@@ -514,11 +508,9 @@ public class StartingSurfaceDrawer {
            return;
            return;
        }
        }
        mAnimatedSplashScreenSurfaceHosts.remove(taskId);
        mAnimatedSplashScreenSurfaceHosts.remove(taskId);
        if (DEBUG_SPLASH_SCREEN) {
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
            String reason = fromServer ? "Server cleaned up" : "App removed";
                "%s the splash screen. Releasing SurfaceControlViewHost for task: %d",
            Slog.v(TAG, reason + "the splash screen. Releasing SurfaceControlViewHost for task:"
                fromServer ? "Server cleaned up" : "App removed", taskId);
                    + taskId);
        }
        SplashScreenView.releaseIconHost(viewHost);
        SplashScreenView.releaseIconHost(viewHost);
    }
    }


@@ -576,9 +568,8 @@ public class StartingSurfaceDrawer {
        final StartingWindowRecord record = mStartingWindowRecords.get(taskId);
        final StartingWindowRecord record = mStartingWindowRecords.get(taskId);
        if (record != null) {
        if (record != null) {
            if (record.mDecorView != null) {
            if (record.mDecorView != null) {
                if (DEBUG_SPLASH_SCREEN) {
                ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                    Slog.v(TAG, "Removing splash screen window for task: " + taskId);
                        "Removing splash screen window for task: %d", taskId);
                }
                if (record.mContentView != null) {
                if (record.mContentView != null) {
                    if (record.mSuggestType == STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) {
                    if (record.mSuggestType == STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN) {
                        removeWindowInner(record.mDecorView, false);
                        removeWindowInner(record.mDecorView, false);
@@ -601,9 +592,8 @@ public class StartingSurfaceDrawer {
                mStartingWindowRecords.remove(taskId);
                mStartingWindowRecords.remove(taskId);
            }
            }
            if (record.mTaskSnapshotWindow != null) {
            if (record.mTaskSnapshotWindow != null) {
                if (DEBUG_TASK_SNAPSHOT) {
                ProtoLog.v(ShellProtoLogGroup.WM_SHELL_STARTING_WINDOW,
                    Slog.v(TAG, "Removing task snapshot window for " + taskId);
                        "Removing task snapshot window for %d", taskId);
                }
                record.mTaskSnapshotWindow.scheduleRemove(
                record.mTaskSnapshotWindow.scheduleRemove(
                        () -> mStartingWindowRecords.remove(taskId), removalInfo.deferRemoveForIme);
                        () -> mStartingWindowRecords.remove(taskId), removalInfo.deferRemoveForIme);
            }
            }
Loading