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

Commit 1decb57e authored by Schneider Victor-Tulias's avatar Schneider Victor-Tulias Committed by Schneider Victor-tulias
Browse files

Add state manager logs to protolog

Flag: com.android.launcher3.enable_state_manager_proto_log
Bug: 292269949
Test: checked winscope traces
Change-Id: I0941620efca3bf0d3cd859c211a7b06932d3838a
parent f7ae1ec3
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) { }
}