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

Commit 30b32fe0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add state manager logs to protolog" into main

parents 81d1295b 1decb57e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -448,6 +448,12 @@ flag {
    bug: "292269949"
}

flag {
    name: "enable_state_manager_proto_log"
    namespace: "launcher"
    description: "Enables tracking state manager logs in ProtoLog"
    bug: "292269949"
}

flag {
    name: "coordinate_workspace_scale"
+68 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.launcher3.util;

import static com.android.launcher3.Flags.enableStateManagerProtoLog;
import static com.android.quickstep.util.QuickstepProtoLogGroup.LAUNCHER_STATE_MANAGER;

import androidx.annotation.NonNull;

import com.android.internal.protolog.ProtoLog;

/**
 * Proxy class used for StateManager ProtoLog support.
 */
public class StateManagerProtoLogProxy {

    public static void logGoToState(
            @NonNull Object fromState, @NonNull Object toState, @NonNull String trace) {
        if (!enableStateManagerProtoLog()) return;
        ProtoLog.d(LAUNCHER_STATE_MANAGER,
                "StateManager.goToState: fromState: %s, toState: %s, partial trace:\n%s",
                fromState,
                toState,
                trace);
    }

    public static void logCreateAtomicAnimation(
            @NonNull Object fromState, @NonNull Object toState, @NonNull String trace) {
        if (!enableStateManagerProtoLog()) return;
        ProtoLog.d(LAUNCHER_STATE_MANAGER, "StateManager.createAtomicAnimation: "
                        + "fromState: %s, toState: %s, partial trace:\n%s",
                fromState,
                toState,
                trace);
    }

    public static void logOnStateTransitionStart(@NonNull Object state) {
        if (!enableStateManagerProtoLog()) return;
        ProtoLog.d(LAUNCHER_STATE_MANAGER, "StateManager.onStateTransitionStart: state: %s", state);
    }

    public static void logOnStateTransitionEnd(@NonNull Object state) {
        if (!enableStateManagerProtoLog()) return;
        ProtoLog.d(LAUNCHER_STATE_MANAGER, "StateManager.onStateTransitionEnd: state: %s", state);
    }

    public static void logCancelAnimation(boolean animationOngoing, @NonNull String trace) {
        if (!enableStateManagerProtoLog()) return;
        ProtoLog.d(LAUNCHER_STATE_MANAGER,
                "StateManager.cancelAnimation: animation ongoing: %b, partial trace:\n%s",
                animationOngoing,
                trace);
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -27,7 +27,8 @@ import java.util.UUID;
public enum QuickstepProtoLogGroup implements IProtoLogGroup {

    ACTIVE_GESTURE_LOG(true, true, false, "ActiveGestureLog"),
    RECENTS_WINDOW(true, true, Constants.DEBUG_RECENTS_WINDOW, "RecentsWindow");
    RECENTS_WINDOW(true, true, Constants.DEBUG_RECENTS_WINDOW, "RecentsWindow"),
    LAUNCHER_STATE_MANAGER(true, true, Constants.DEBUG_STATE_MANAGER, "LauncherStateManager");

    private final boolean mEnabled;
    private volatile boolean mLogToProto;
@@ -97,6 +98,7 @@ public enum QuickstepProtoLogGroup implements IProtoLogGroup {
    private static final class Constants {

        private static final boolean DEBUG_RECENTS_WINDOW = false;
        private static final boolean DEBUG_STATE_MANAGER = true; // b/279059025, b/325463989

        private static final int LOG_START_ID =
                (int) (UUID.nameUUIDFromBytes(QuickstepProtoLogGroup.class.getName().getBytes())
+21 −5
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.launcher3.statemanager;

import static android.animation.ValueAnimator.areAnimatorsEnabled;

import static com.android.launcher3.Flags.enableStateManagerProtoLog;
import static com.android.launcher3.anim.AnimatorPlaybackController.callListenerCommandRecursively;
import static com.android.launcher3.states.StateAnimationConfig.HANDLE_STATE_APPLY;
import static com.android.launcher3.states.StateAnimationConfig.SKIP_ALL_ANIMATIONS;
@@ -39,6 +40,7 @@ import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.states.StateAnimationConfig;
import com.android.launcher3.states.StateAnimationConfig.AnimationFlags;
import com.android.launcher3.states.StateAnimationConfig.AnimationPropertyFlags;
import com.android.launcher3.util.StateManagerProtoLogProxy;

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -243,7 +245,10 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>,

    private void goToState(
            STATE_TYPE state, boolean animated, long delay, AnimatorListener listener) {
        if (DEBUG) {
        if (enableStateManagerProtoLog()) {
            StateManagerProtoLogProxy.logGoToState(
                    mState, state, getTrimmedStackTrace("StateManager.goToState"));
        } else if (DEBUG) {
            Log.d(TAG, "goToState - fromState: " + mState + ", toState: " + state
                    + ", partial trace:\n" + getTrimmedStackTrace("StateManager.goToState"));
        }
@@ -331,7 +336,10 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>,
     */
    public AnimatorSet createAtomicAnimation(
            STATE_TYPE fromState, STATE_TYPE toState, StateAnimationConfig config) {
        if (DEBUG) {
        if (enableStateManagerProtoLog()) {
            StateManagerProtoLogProxy.logCreateAtomicAnimation(
                    mState, toState, getTrimmedStackTrace("StateManager.createAtomicAnimation"));
        } else if (DEBUG) {
            Log.d(TAG, "createAtomicAnimation - fromState: " + fromState + ", toState: " + toState
                    + ", partial trace:\n" + getTrimmedStackTrace(
                            "StateManager.createAtomicAnimation"));
@@ -408,7 +416,9 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>,
        mState = state;
        mStatefulContainer.onStateSetStart(mState);

        if (DEBUG) {
        if (enableStateManagerProtoLog()) {
            StateManagerProtoLogProxy.logOnStateTransitionStart(state);
        } else if (DEBUG) {
            Log.d(TAG, "onStateTransitionStart - state: " + state);
        }
        for (int i = mListeners.size() - 1; i >= 0; i--) {
@@ -428,7 +438,9 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>,
            setRestState(null);
        }

        if (DEBUG) {
        if (enableStateManagerProtoLog()) {
            StateManagerProtoLogProxy.logOnStateTransitionEnd(state);
        } else if (DEBUG) {
            Log.d(TAG, "onStateTransitionEnd - state: " + state);
        }
        for (int i = mListeners.size() - 1; i >= 0; i--) {
@@ -468,7 +480,11 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>,
     * Cancels the current animation.
     */
    public void cancelAnimation() {
        if (DEBUG && mConfig.currentAnimation != null) {
        if (enableStateManagerProtoLog()) {
            StateManagerProtoLogProxy.logCancelAnimation(
                    mConfig.currentAnimation != null,
                    getTrimmedStackTrace("StateManager.cancelAnimation"));
        } else if (DEBUG && mConfig.currentAnimation != null) {
            Log.d(TAG, "cancelAnimation - with ongoing animation"
                    + ", partial trace:\n" + getTrimmedStackTrace("StateManager.cancelAnimation"));
        }
+33 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.launcher3.util;

/**
 * Proxy class used for StateManager ProtoLog support.
 */
public class StateManagerProtoLogProxy {

    public static void logGoToState(Object fromState, Object toState, String trace) { }

    public static void logCreateAtomicAnimation(Object fromState, Object toState, String trace) { }

    public static void logOnStateTransitionStart(Object state) { }

    public static void logOnStateTransitionEnd(Object state) { }

    public static void logCancelAnimation(boolean animationOngoing, String trace) { }
}