Merge "Add ShellProtoLogGroup for Picture-In-Picture. Update the code for PIP and phone PIP to use ProtoLog instead of Log." into tm-dev

This commit is contained in:
Mateusz Cicheński
2022-03-04 20:29:17 +00:00
committed by Android (Google) Code Review
12 changed files with 164 additions and 91 deletions

View File

@@ -29,14 +29,15 @@ import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.ArraySet; import android.util.ArraySet;
import android.util.Log;
import android.util.Size; import android.util.Size;
import android.view.Display; import android.view.Display;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.function.TriConsumer; import com.android.internal.util.function.TriConsumer;
import com.android.wm.shell.R; import com.android.wm.shell.R;
import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@@ -223,7 +224,8 @@ public class PipBoundsState {
new PictureInPictureUiState(stashedState != STASH_TYPE_NONE /* isStashed */) new PictureInPictureUiState(stashedState != STASH_TYPE_NONE /* isStashed */)
); );
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Unable to set alert PiP state change."); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Unable to set alert PiP state change.", TAG);
} }
} }

View File

@@ -63,7 +63,6 @@ import android.content.res.Configuration;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.Log;
import android.util.Rational; import android.util.Rational;
import android.view.Display; import android.view.Display;
import android.view.Surface; import android.view.Surface;
@@ -73,6 +72,7 @@ import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction; import android.window.WindowContainerTransaction;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.R; import com.android.wm.shell.R;
import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.animation.Interpolators; import com.android.wm.shell.animation.Interpolators;
@@ -83,6 +83,7 @@ import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.common.annotations.ShellMainThread; import com.android.wm.shell.common.annotations.ShellMainThread;
import com.android.wm.shell.legacysplitscreen.LegacySplitScreenController; import com.android.wm.shell.legacysplitscreen.LegacySplitScreenController;
import com.android.wm.shell.pip.phone.PipMotionHelper; import com.android.wm.shell.pip.phone.PipMotionHelper;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
@@ -395,8 +396,10 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
if (!mPipTransitionState.isInPip() if (!mPipTransitionState.isInPip()
|| mPipTransitionState.getTransitionState() == PipTransitionState.EXITING_PIP || mPipTransitionState.getTransitionState() == PipTransitionState.EXITING_PIP
|| mToken == null) { || mToken == null) {
Log.wtf(TAG, "Not allowed to exitPip in current state" ProtoLog.wtf(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " mState=" + mPipTransitionState.getTransitionState() + " mToken=" + mToken); "%s: Not allowed to exitPip in current state"
+ " mState=%d mToken=%s", TAG, mPipTransitionState.getTransitionState(),
mToken);
return; return;
} }
@@ -500,9 +503,11 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
* Removes PiP immediately. * Removes PiP immediately.
*/ */
public void removePip() { public void removePip() {
if (!mPipTransitionState.isInPip() || mToken == null) { if (!mPipTransitionState.isInPip() || mToken == null) {
Log.wtf(TAG, "Not allowed to removePip in current state" ProtoLog.wtf(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " mState=" + mPipTransitionState.getTransitionState() + " mToken=" + mToken); "%s: Not allowed to removePip in current state"
+ " mState=%d mToken=%s", TAG, mPipTransitionState.getTransitionState(),
mToken);
return; return;
} }
@@ -539,7 +544,9 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
ActivityTaskManager.getService().removeRootTasksInWindowingModes( ActivityTaskManager.getService().removeRootTasksInWindowingModes(
new int[]{ WINDOWING_MODE_PINNED }); new int[]{ WINDOWING_MODE_PINNED });
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Failed to remove PiP", e); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to remove PiP, %s",
TAG, e);
} }
} }
@@ -568,7 +575,9 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
if (!mWaitForFixedRotation) { if (!mWaitForFixedRotation) {
onEndOfSwipePipToHomeTransition(); onEndOfSwipePipToHomeTransition();
} else { } else {
Log.d(TAG, "Defer onTaskAppeared-SwipePipToHome until end of fixed rotation."); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Defer onTaskAppeared-SwipePipToHome until end of fixed rotation.",
TAG);
} }
return; return;
} }
@@ -576,7 +585,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
if (mOneShotAnimationType == ANIM_TYPE_ALPHA if (mOneShotAnimationType == ANIM_TYPE_ALPHA
&& SystemClock.uptimeMillis() - mLastOneShotAlphaAnimationTime && SystemClock.uptimeMillis() - mLastOneShotAlphaAnimationTime
> ONE_SHOT_ALPHA_ANIMATION_TIMEOUT_MS) { > ONE_SHOT_ALPHA_ANIMATION_TIMEOUT_MS) {
Log.d(TAG, "Alpha animation is expired. Use bounds animation."); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Alpha animation is expired. Use bounds animation.", TAG);
mOneShotAnimationType = ANIM_TYPE_BOUNDS; mOneShotAnimationType = ANIM_TYPE_BOUNDS;
} }
@@ -613,8 +623,9 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
private void onTaskAppearedWithFixedRotation() { private void onTaskAppearedWithFixedRotation() {
if (mOneShotAnimationType == ANIM_TYPE_ALPHA) { if (mOneShotAnimationType == ANIM_TYPE_ALPHA) {
Log.d(TAG, "Defer entering PiP alpha animation, fixed rotation is ongoing"); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
// If deferred, hide the surface till fixed rotation is completed. "%s: Defer entering PiP alpha animation, fixed rotation is ongoing", TAG);
// If deferred, hside the surface till fixed rotation is completed.
final SurfaceControl.Transaction tx = final SurfaceControl.Transaction tx =
mSurfaceControlTransactionFactory.getTransaction(); mSurfaceControlTransactionFactory.getTransaction();
tx.setAlpha(mLeash, 0f); tx.setAlpha(mLeash, 0f);
@@ -763,7 +774,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
final WindowContainerToken token = info.token; final WindowContainerToken token = info.token;
Objects.requireNonNull(token, "Requires valid WindowContainerToken"); Objects.requireNonNull(token, "Requires valid WindowContainerToken");
if (token.asBinder() != mToken.asBinder()) { if (token.asBinder() != mToken.asBinder()) {
Log.wtf(TAG, "Unrecognized token: " + token); ProtoLog.wtf(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Unrecognized token: %s", TAG, token);
return; return;
} }
onExitPipFinished(info); onExitPipFinished(info);
@@ -788,8 +800,9 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
Objects.requireNonNull(mToken, "onTaskInfoChanged requires valid existing mToken"); Objects.requireNonNull(mToken, "onTaskInfoChanged requires valid existing mToken");
if (mPipTransitionState.getTransitionState() != PipTransitionState.ENTERED_PIP if (mPipTransitionState.getTransitionState() != PipTransitionState.ENTERED_PIP
&& mPipTransitionState.getTransitionState() != PipTransitionState.EXITING_PIP) { && mPipTransitionState.getTransitionState() != PipTransitionState.EXITING_PIP) {
Log.d(TAG, "Defer onTaskInfoChange in current state: " ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ mPipTransitionState.getTransitionState()); "%s: Defer onTaskInfoChange in current state: %d", TAG,
mPipTransitionState.getTransitionState());
// Defer applying PiP parameters if the task is entering PiP to avoid disturbing // Defer applying PiP parameters if the task is entering PiP to avoid disturbing
// the animation. // the animation.
mDeferredTaskInfo = info; mDeferredTaskInfo = info;
@@ -800,7 +813,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
mPipBoundsAlgorithm.getMinimalSize(info.topActivityInfo)); mPipBoundsAlgorithm.getMinimalSize(info.topActivityInfo));
final PictureInPictureParams newParams = info.pictureInPictureParams; final PictureInPictureParams newParams = info.pictureInPictureParams;
if (newParams == null || !applyPictureInPictureParams(newParams)) { if (newParams == null || !applyPictureInPictureParams(newParams)) {
Log.d(TAG, "Ignored onTaskInfoChanged with PiP param: " + newParams); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Ignored onTaskInfoChanged with PiP param: %s", TAG, newParams);
return; return;
} }
// Aspect ratio changed, re-calculate bounds if valid. // Aspect ratio changed, re-calculate bounds if valid.
@@ -895,7 +909,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
private void fadeExistingPip(boolean show) { private void fadeExistingPip(boolean show) {
if (mLeash == null || !mLeash.isValid()) { if (mLeash == null || !mLeash.isValid()) {
Log.w(TAG, "Invalid leash on fadeExistingPip: " + mLeash); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Invalid leash on fadeExistingPip: %s", TAG, mLeash);
return; return;
} }
final float alphaStart = show ? 0 : 1; final float alphaStart = show ? 0 : 1;
@@ -942,11 +957,13 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
if ((mPipTransitionState.getInSwipePipToHomeTransition() if ((mPipTransitionState.getInSwipePipToHomeTransition()
|| waitForFixedRotationOnEnteringPip) && fromRotation) { || waitForFixedRotationOnEnteringPip) && fromRotation) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "Skip onMovementBoundsChanged on rotation change" ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " InSwipePipToHomeTransition=" "%s: Skip onMovementBoundsChanged on rotation change"
+ mPipTransitionState.getInSwipePipToHomeTransition() + " InSwipePipToHomeTransition=%b"
+ " mWaitForFixedRotation=" + mWaitForFixedRotation + " mWaitForFixedRotation=%b"
+ " getTransitionState=" + mPipTransitionState.getTransitionState()); + " getTransitionState=%d", TAG,
mPipTransitionState.getInSwipePipToHomeTransition(), mWaitForFixedRotation,
mPipTransitionState.getTransitionState());
} }
return; return;
} }
@@ -1061,7 +1078,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
@PipAnimationController.TransitionDirection int direction, @PipAnimationController.TransitionDirection int direction,
Consumer<Rect> updateBoundsCallback) { Consumer<Rect> updateBoundsCallback) {
if (mWaitForFixedRotation) { if (mWaitForFixedRotation) {
Log.d(TAG, "skip scheduleAnimateResizePip, entering pip deferred"); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: skip scheduleAnimateResizePip, entering pip deferred", TAG);
return; return;
} }
scheduleAnimateResizePip(mPipBoundsState.getBounds(), toBounds, 0 /* startingAngle */, scheduleAnimateResizePip(mPipBoundsState.getBounds(), toBounds, 0 /* startingAngle */,
@@ -1075,7 +1093,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
public void scheduleAnimateResizePip(Rect fromBounds, Rect toBounds, int duration, public void scheduleAnimateResizePip(Rect fromBounds, Rect toBounds, int duration,
float startingAngle, Consumer<Rect> updateBoundsCallback) { float startingAngle, Consumer<Rect> updateBoundsCallback) {
if (mWaitForFixedRotation) { if (mWaitForFixedRotation) {
Log.d(TAG, "skip scheduleAnimateResizePip, entering pip deferred"); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: skip scheduleAnimateResizePip, entering pip deferred", TAG);
return; return;
} }
scheduleAnimateResizePip(fromBounds, toBounds, startingAngle, null /* sourceHintRect */, scheduleAnimateResizePip(fromBounds, toBounds, startingAngle, null /* sourceHintRect */,
@@ -1113,7 +1132,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
public void scheduleResizePip(Rect toBounds, Consumer<Rect> updateBoundsCallback) { public void scheduleResizePip(Rect toBounds, Consumer<Rect> updateBoundsCallback) {
// Could happen when exitPip // Could happen when exitPip
if (mToken == null || mLeash == null) { if (mToken == null || mLeash == null) {
Log.w(TAG, "Abort animation, invalid leash"); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Abort animation, invalid leash", TAG);
return; return;
} }
mPipBoundsState.setBounds(toBounds); mPipBoundsState.setBounds(toBounds);
@@ -1148,12 +1168,14 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
Consumer<Rect> updateBoundsCallback) { Consumer<Rect> updateBoundsCallback) {
// Could happen when exitPip // Could happen when exitPip
if (mToken == null || mLeash == null) { if (mToken == null || mLeash == null) {
Log.w(TAG, "Abort animation, invalid leash"); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Abort animation, invalid leash", TAG);
return; return;
} }
if (startBounds.isEmpty() || toBounds.isEmpty()) { if (startBounds.isEmpty() || toBounds.isEmpty()) {
Log.w(TAG, "Attempted to user resize PIP to or from empty bounds, aborting."); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Attempted to user resize PIP to or from empty bounds, aborting.", TAG);
return; return;
} }
@@ -1228,7 +1250,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
return; return;
} }
if (mWaitForFixedRotation) { if (mWaitForFixedRotation) {
Log.d(TAG, "skip scheduleOffsetPip, entering pip deferred"); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: skip scheduleOffsetPip, entering pip deferred", TAG);
return; return;
} }
offsetPip(originalBounds, 0 /* xOffset */, offset, duration); offsetPip(originalBounds, 0 /* xOffset */, offset, duration);
@@ -1241,7 +1264,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
private void offsetPip(Rect originalBounds, int xOffset, int yOffset, int durationMs) { private void offsetPip(Rect originalBounds, int xOffset, int yOffset, int durationMs) {
if (mTaskInfo == null) { if (mTaskInfo == null) {
Log.w(TAG, "mTaskInfo is not set"); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "%s: mTaskInfo is not set",
TAG);
return; return;
} }
final Rect destinationBounds = new Rect(originalBounds); final Rect destinationBounds = new Rect(originalBounds);
@@ -1386,7 +1410,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
float startingAngle) { float startingAngle) {
// Could happen when exitPip // Could happen when exitPip
if (mToken == null || mLeash == null) { if (mToken == null || mLeash == null) {
Log.w(TAG, "Abort animation, invalid leash"); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Abort animation, invalid leash", TAG);
return null; return null;
} }
final int rotationDelta = mWaitForFixedRotation final int rotationDelta = mWaitForFixedRotation
@@ -1501,7 +1526,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
if (mPipTransitionState.getTransitionState() == PipTransitionState.UNDEFINED) { if (mPipTransitionState.getTransitionState() == PipTransitionState.UNDEFINED) {
// Could happen if onTaskVanished happens during the animation since we may have // Could happen if onTaskVanished happens during the animation since we may have
// set a start delay on this animation. // set a start delay on this animation.
Log.d(TAG, "Task vanished, skip fadeOutAndRemoveOverlay"); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Task vanished, skip fadeOutAndRemoveOverlay", TAG);
animation.removeAllListeners(); animation.removeAllListeners();
animation.removeAllUpdateListeners(); animation.removeAllUpdateListeners();
animation.cancel(); animation.cancel();

View File

@@ -50,7 +50,6 @@ import android.graphics.Matrix;
import android.graphics.Point; import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.IBinder; import android.os.IBinder;
import android.util.Log;
import android.view.Surface; import android.view.Surface;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.window.TransitionInfo; import android.window.TransitionInfo;
@@ -61,8 +60,10 @@ import android.window.WindowContainerTransaction;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.R; import com.android.wm.shell.R;
import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.transition.CounterRotatorHelper; import com.android.wm.shell.transition.CounterRotatorHelper;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
@@ -757,7 +758,8 @@ public class PipTransition extends PipTransitionController {
final SurfaceControl leash = mPipOrganizer.getSurfaceControl(); final SurfaceControl leash = mPipOrganizer.getSurfaceControl();
final TaskInfo taskInfo = mPipOrganizer.getTaskInfo(); final TaskInfo taskInfo = mPipOrganizer.getTaskInfo();
if (leash == null || !leash.isValid() || taskInfo == null) { if (leash == null || !leash.isValid() || taskInfo == null) {
Log.w(TAG, "Invalid leash on fadeExistingPip: " + leash); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Invalid leash on fadeExistingPip: %s", TAG, leash);
return; return;
} }
final float alphaStart = show ? 0 : 1; final float alphaStart = show ? 0 : 1;

View File

@@ -24,9 +24,11 @@ import android.app.ActivityTaskManager.RootTaskInfo;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log;
import android.util.Pair; import android.util.Pair;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
/** A class that includes convenience methods. */ /** A class that includes convenience methods. */
public class PipUtils { public class PipUtils {
private static final String TAG = "PipUtils"; private static final String TAG = "PipUtils";
@@ -51,7 +53,8 @@ public class PipUtils {
} }
} }
} catch (RemoteException e) { } catch (RemoteException e) {
Log.w(TAG, "Unable to get pinned stack."); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Unable to get pinned stack.", TAG);
} }
return new Pair<>(null, 0); return new Pair<>(null, 0);
} }

View File

@@ -29,7 +29,6 @@ import android.graphics.RectF;
import android.os.Debug; import android.os.Debug;
import android.os.Handler; import android.os.Handler;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log;
import android.util.Size; import android.util.Size;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.SurfaceControl; import android.view.SurfaceControl;
@@ -37,6 +36,7 @@ import android.view.SyncRtSurfaceTransactionApplier;
import android.view.SyncRtSurfaceTransactionApplier.SurfaceParams; import android.view.SyncRtSurfaceTransactionApplier.SurfaceParams;
import android.view.WindowManagerGlobal; import android.view.WindowManagerGlobal;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.common.SystemWindows;
import com.android.wm.shell.pip.PipBoundsState; import com.android.wm.shell.pip.PipBoundsState;
@@ -44,6 +44,7 @@ import com.android.wm.shell.pip.PipMediaController;
import com.android.wm.shell.pip.PipMediaController.ActionListener; import com.android.wm.shell.pip.PipMediaController.ActionListener;
import com.android.wm.shell.pip.PipMenuController; import com.android.wm.shell.pip.PipMenuController;
import com.android.wm.shell.pip.PipUiEventLogger; import com.android.wm.shell.pip.PipUiEventLogger;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.SplitScreenController;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -285,13 +286,15 @@ public class PhonePipMenuController implements PipMenuController {
private void showMenuInternal(int menuState, Rect stackBounds, boolean allowMenuTimeout, private void showMenuInternal(int menuState, Rect stackBounds, boolean allowMenuTimeout,
boolean willResizeMenu, boolean withDelay, boolean showResizeHandle) { boolean willResizeMenu, boolean withDelay, boolean showResizeHandle) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "showMenu() state=" + menuState ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " isMenuVisible=" + isMenuVisible() "%s: showMenu() state=%s"
+ " allowMenuTimeout=" + allowMenuTimeout + " isMenuVisible=%s"
+ " willResizeMenu=" + willResizeMenu + " allowMenuTimeout=%s"
+ " withDelay=" + withDelay + " willResizeMenu=%s"
+ " showResizeHandle=" + showResizeHandle + " withDelay=%s"
+ " callers=\n" + Debug.getCallers(5, " ")); + " showResizeHandle=%s"
+ " callers=\n%s", TAG, menuState, isMenuVisible(), allowMenuTimeout,
willResizeMenu, withDelay, showResizeHandle, Debug.getCallers(5, " "));
} }
if (!maybeCreateSyncApplier()) { if (!maybeCreateSyncApplier()) {
@@ -383,7 +386,8 @@ public class PhonePipMenuController implements PipMenuController {
private boolean maybeCreateSyncApplier() { private boolean maybeCreateSyncApplier() {
if (mPipMenuView == null || mPipMenuView.getViewRootImpl() == null) { if (mPipMenuView == null || mPipMenuView.getViewRootImpl() == null) {
Log.v(TAG, "Not going to move PiP, either menu or its parent is not created."); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Not going to move PiP, either menu or its parent is not created.", TAG);
return false; return false;
} }
@@ -400,7 +404,8 @@ public class PhonePipMenuController implements PipMenuController {
public void pokeMenu() { public void pokeMenu() {
final boolean isMenuVisible = isMenuVisible(); final boolean isMenuVisible = isMenuVisible();
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "pokeMenu() isMenuVisible=" + isMenuVisible); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: pokeMenu() isMenuVisible=%b", TAG, isMenuVisible);
} }
if (isMenuVisible) { if (isMenuVisible) {
mPipMenuView.pokeMenu(); mPipMenuView.pokeMenu();
@@ -410,7 +415,8 @@ public class PhonePipMenuController implements PipMenuController {
private void fadeOutMenu() { private void fadeOutMenu() {
final boolean isMenuVisible = isMenuVisible(); final boolean isMenuVisible = isMenuVisible();
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "fadeOutMenu() isMenuVisible=" + isMenuVisible); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: fadeOutMenu() isMenuVisible=%b", TAG, isMenuVisible);
} }
if (isMenuVisible) { if (isMenuVisible) {
mPipMenuView.fadeOutMenu(); mPipMenuView.fadeOutMenu();
@@ -436,11 +442,14 @@ public class PhonePipMenuController implements PipMenuController {
public void hideMenu(@PipMenuView.AnimationType int animationType, boolean resize) { public void hideMenu(@PipMenuView.AnimationType int animationType, boolean resize) {
final boolean isMenuVisible = isMenuVisible(); final boolean isMenuVisible = isMenuVisible();
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "hideMenu() state=" + mMenuState ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " isMenuVisible=" + isMenuVisible "%s: hideMenu() state=%s"
+ " animationType=" + animationType + " isMenuVisible=%s"
+ " resize=" + resize + " animationType=%s"
+ " callers=\n" + Debug.getCallers(5, " ")); + " resize=%s"
+ " callers=\n%s", TAG, mMenuState, isMenuVisible,
animationType, resize,
Debug.getCallers(5, " "));
} }
if (isMenuVisible) { if (isMenuVisible) {
mPipMenuView.hideMenu(resize, animationType); mPipMenuView.hideMenu(resize, animationType);
@@ -516,9 +525,11 @@ public class PhonePipMenuController implements PipMenuController {
*/ */
void onMenuStateChangeStart(int menuState, boolean resize, Runnable callback) { void onMenuStateChangeStart(int menuState, boolean resize, Runnable callback) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "onMenuStateChangeStart() mMenuState=" + mMenuState ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " menuState=" + menuState + " resize=" + resize "%s: onMenuStateChangeStart() mMenuState=%s"
+ " callers=\n" + Debug.getCallers(5, " ")); + " menuState=%s resize=%s"
+ " callers=\n%s", TAG, mMenuState, menuState, resize,
Debug.getCallers(5, " "));
} }
if (menuState != mMenuState) { if (menuState != mMenuState) {
@@ -538,7 +549,8 @@ public class PhonePipMenuController implements PipMenuController {
mSystemWindows.getFocusGrantToken(mPipMenuView), mSystemWindows.getFocusGrantToken(mPipMenuView),
menuState != MENU_STATE_NONE /* grantFocus */); menuState != MENU_STATE_NONE /* grantFocus */);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Unable to update focus as menu appears/disappears", e); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Unable to update focus as menu appears/disappears, %s", TAG, e);
} }
} }
} }
@@ -584,9 +596,11 @@ public class PhonePipMenuController implements PipMenuController {
public void updateMenuLayout(Rect bounds) { public void updateMenuLayout(Rect bounds) {
final boolean isMenuVisible = isMenuVisible(); final boolean isMenuVisible = isMenuVisible();
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "updateMenuLayout() state=" + mMenuState ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " isMenuVisible=" + isMenuVisible "%s: updateMenuLayout() state=%s"
+ " callers=\n" + Debug.getCallers(5, " ")); + " isMenuVisible=%s"
+ " callers=\n%s", TAG, mMenuState, isMenuVisible,
Debug.getCallers(5, " "));
} }
if (isMenuVisible) { if (isMenuVisible) {
mPipMenuView.updateMenuLayout(bounds); mPipMenuView.updateMenuLayout(bounds);

View File

@@ -46,10 +46,8 @@ import android.graphics.Rect;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.util.Log;
import android.util.Pair; import android.util.Pair;
import android.util.Size; import android.util.Size;
import android.util.Slog;
import android.view.DisplayInfo; import android.view.DisplayInfo;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.view.WindowManagerGlobal; import android.view.WindowManagerGlobal;
@@ -61,6 +59,7 @@ import androidx.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.R; import com.android.wm.shell.R;
import com.android.wm.shell.WindowManagerShellWrapper; import com.android.wm.shell.WindowManagerShellWrapper;
import com.android.wm.shell.common.DisplayChangeController; import com.android.wm.shell.common.DisplayChangeController;
@@ -85,6 +84,7 @@ import com.android.wm.shell.pip.PipSnapAlgorithm;
import com.android.wm.shell.pip.PipTaskOrganizer; import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipTransitionController; import com.android.wm.shell.pip.PipTransitionController;
import com.android.wm.shell.pip.PipUtils; import com.android.wm.shell.pip.PipUtils;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.transition.Transitions; import com.android.wm.shell.transition.Transitions;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -282,7 +282,8 @@ public class PipController implements PipTransitionController.PipTransitionCallb
Optional<OneHandedController> oneHandedController, Optional<OneHandedController> oneHandedController,
ShellExecutor mainExecutor) { ShellExecutor mainExecutor) {
if (!context.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) { if (!context.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) {
Slog.w(TAG, "Device doesn't support Pip feature"); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Device doesn't support Pip feature", TAG);
return null; return null;
} }
@@ -375,7 +376,8 @@ public class PipController implements PipTransitionController.PipTransitionCallb
try { try {
mWindowManagerShellWrapper.addPinnedStackListener(mPinnedTaskListener); mWindowManagerShellWrapper.addPinnedStackListener(mPinnedTaskListener);
} catch (RemoteException e) { } catch (RemoteException e) {
Slog.e(TAG, "Failed to register pinned stack listener", e); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to register pinned stack listener, %s", TAG, e);
} }
try { try {
@@ -387,7 +389,8 @@ public class PipController implements PipTransitionController.PipTransitionCallb
mPipInputConsumer.registerInputConsumer(); mPipInputConsumer.registerInputConsumer();
} }
} catch (RemoteException | UnsupportedOperationException e) { } catch (RemoteException | UnsupportedOperationException e) {
Log.e(TAG, "Failed to register pinned stack listener", e); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to register pinned stack listener, %s", TAG, e);
e.printStackTrace(); e.printStackTrace();
} }
@@ -724,7 +727,8 @@ public class PipController implements PipTransitionController.PipTransitionCallb
.getRootTaskInfo(WINDOWING_MODE_PINNED, ACTIVITY_TYPE_UNDEFINED); .getRootTaskInfo(WINDOWING_MODE_PINNED, ACTIVITY_TYPE_UNDEFINED);
if (pinnedTaskInfo == null) return false; if (pinnedTaskInfo == null) return false;
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Failed to get RootTaskInfo for pinned task", e); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to get RootTaskInfo for pinned task, %s", TAG, e);
return false; return false;
} }
final PipSnapAlgorithm pipSnapAlgorithm = mPipBoundsAlgorithm.getSnapAlgorithm(); final PipSnapAlgorithm pipSnapAlgorithm = mPipBoundsAlgorithm.getSnapAlgorithm();
@@ -870,7 +874,8 @@ public class PipController implements PipTransitionController.PipTransitionCallb
PipController.this.dump(pw); PipController.this.dump(pw);
}); });
} catch (InterruptedException e) { } catch (InterruptedException e) {
Slog.e(TAG, "Failed to dump PipController in 2s"); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to dump PipController in 2s", TAG);
} }
} }
} }

View File

@@ -22,14 +22,15 @@ import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.os.Looper; import android.os.Looper;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log;
import android.view.BatchedInputEventReceiver; import android.view.BatchedInputEventReceiver;
import android.view.Choreographer; import android.view.Choreographer;
import android.view.IWindowManager; import android.view.IWindowManager;
import android.view.InputChannel; import android.view.InputChannel;
import android.view.InputEvent; import android.view.InputEvent;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -141,7 +142,8 @@ public class PipInputConsumer {
mWindowManager.destroyInputConsumer(mName, DEFAULT_DISPLAY); mWindowManager.destroyInputConsumer(mName, DEFAULT_DISPLAY);
mWindowManager.createInputConsumer(mToken, mName, DEFAULT_DISPLAY, inputChannel); mWindowManager.createInputConsumer(mToken, mName, DEFAULT_DISPLAY, inputChannel);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Failed to create input consumer", e); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to create input consumer, %s", TAG, e);
} }
mMainExecutor.execute(() -> { mMainExecutor.execute(() -> {
// Choreographer.getSfInstance() must be called on the thread that the input event // Choreographer.getSfInstance() must be called on the thread that the input event
@@ -165,7 +167,8 @@ public class PipInputConsumer {
// TODO(b/113087003): Support Picture-in-picture in multi-display. // TODO(b/113087003): Support Picture-in-picture in multi-display.
mWindowManager.destroyInputConsumer(mName, DEFAULT_DISPLAY); mWindowManager.destroyInputConsumer(mName, DEFAULT_DISPLAY);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Failed to destroy input consumer", e); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to destroy input consumer, %s", TAG, e);
} }
mInputEventReceiver.dispose(); mInputEventReceiver.dispose();
mInputEventReceiver = null; mInputEventReceiver = null;

View File

@@ -47,7 +47,6 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.UserHandle; import android.os.UserHandle;
import android.util.Log;
import android.util.Pair; import android.util.Pair;
import android.util.Size; import android.util.Size;
import android.view.KeyEvent; import android.view.KeyEvent;
@@ -60,11 +59,13 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.R; import com.android.wm.shell.R;
import com.android.wm.shell.animation.Interpolators; import com.android.wm.shell.animation.Interpolators;
import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.pip.PipUiEventLogger; import com.android.wm.shell.pip.PipUiEventLogger;
import com.android.wm.shell.pip.PipUtils; import com.android.wm.shell.pip.PipUtils;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.SplitScreenController;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@@ -423,7 +424,7 @@ public class PipMenuView extends FrameLayout {
/** /**
* @return Estimated minimum {@link Size} to hold the actions. * @return Estimated minimum {@link Size} to hold the actions.
* See also {@link #updateActionViews(Rect)} * See also {@link #updateActionViews(Rect)}
*/ */
Size getEstimatedMinMenuSize() { Size getEstimatedMinMenuSize() {
final int pipActionSize = getResources().getDimensionPixelSize(R.dimen.pip_action_size); final int pipActionSize = getResources().getDimensionPixelSize(R.dimen.pip_action_size);
@@ -505,7 +506,8 @@ public class PipMenuView extends FrameLayout {
try { try {
action.getActionIntent().send(); action.getActionIntent().send();
} catch (CanceledException e) { } catch (CanceledException e) {
Log.w(TAG, "Failed to send action", e); ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to send action, %s", TAG, e);
} }
}); });
} }

View File

@@ -34,12 +34,12 @@ import android.graphics.PointF;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.Debug; import android.os.Debug;
import android.os.Looper; import android.os.Looper;
import android.util.Log;
import android.view.Choreographer; import android.view.Choreographer;
import androidx.dynamicanimation.animation.AnimationHandler; import androidx.dynamicanimation.animation.AnimationHandler;
import androidx.dynamicanimation.animation.AnimationHandler.FrameCallbackScheduler; import androidx.dynamicanimation.animation.AnimationHandler.FrameCallbackScheduler;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.R; import com.android.wm.shell.R;
import com.android.wm.shell.animation.FloatProperties; import com.android.wm.shell.animation.FloatProperties;
import com.android.wm.shell.animation.PhysicsAnimator; import com.android.wm.shell.animation.PhysicsAnimator;
@@ -49,6 +49,7 @@ import com.android.wm.shell.pip.PipBoundsState;
import com.android.wm.shell.pip.PipSnapAlgorithm; import com.android.wm.shell.pip.PipSnapAlgorithm;
import com.android.wm.shell.pip.PipTaskOrganizer; import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipTransitionController; import com.android.wm.shell.pip.PipTransitionController;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -354,8 +355,9 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
*/ */
private void expandLeavePip(boolean skipAnimation, boolean enterSplit) { private void expandLeavePip(boolean skipAnimation, boolean enterSplit) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "exitPip: skipAnimation=" + skipAnimation ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " callers=\n" + Debug.getCallers(5, " ")); "%s: exitPip: skipAnimation=%s"
+ " callers=\n%s", TAG, skipAnimation, Debug.getCallers(5, " "));
} }
cancelPhysicsAnimation(); cancelPhysicsAnimation();
mMenuController.hideMenu(ANIM_TYPE_NONE, false /* resize */); mMenuController.hideMenu(ANIM_TYPE_NONE, false /* resize */);
@@ -368,7 +370,8 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
@Override @Override
public void dismissPip() { public void dismissPip() {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "removePip: callers=\n" + Debug.getCallers(5, " ")); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: removePip: callers=\n%s", TAG, Debug.getCallers(5, " "));
} }
cancelPhysicsAnimation(); cancelPhysicsAnimation();
mMenuController.hideMenu(ANIM_TYPE_DISMISS, false /* resize */); mMenuController.hideMenu(ANIM_TYPE_DISMISS, false /* resize */);
@@ -552,8 +555,10 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
*/ */
void animateToOffset(Rect originalBounds, int offset) { void animateToOffset(Rect originalBounds, int offset) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "animateToOffset: originalBounds=" + originalBounds + " offset=" + offset ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " callers=\n" + Debug.getCallers(5, " ")); "%s: animateToOffset: originalBounds=%s offset=%s"
+ " callers=\n%s", TAG, originalBounds, offset,
Debug.getCallers(5, " "));
} }
cancelPhysicsAnimation(); cancelPhysicsAnimation();
mPipTaskOrganizer.scheduleOffsetPip(originalBounds, offset, SHIFT_DURATION, mPipTaskOrganizer.scheduleOffsetPip(originalBounds, offset, SHIFT_DURATION,
@@ -671,8 +676,9 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
*/ */
private void resizePipUnchecked(Rect toBounds) { private void resizePipUnchecked(Rect toBounds) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "resizePipUnchecked: toBounds=" + toBounds ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " callers=\n" + Debug.getCallers(5, " ")); "%s: resizePipUnchecked: toBounds=%s"
+ " callers=\n%s", TAG, toBounds, Debug.getCallers(5, " "));
} }
if (!toBounds.equals(getBounds())) { if (!toBounds.equals(getBounds())) {
mPipTaskOrganizer.scheduleResizePip(toBounds, mUpdateBoundsCallback); mPipTaskOrganizer.scheduleResizePip(toBounds, mUpdateBoundsCallback);
@@ -684,8 +690,10 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
*/ */
private void resizeAndAnimatePipUnchecked(Rect toBounds, int duration) { private void resizeAndAnimatePipUnchecked(Rect toBounds, int duration) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "resizeAndAnimatePipUnchecked: toBounds=" + toBounds ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ " duration=" + duration + " callers=\n" + Debug.getCallers(5, " ")); "%s: resizeAndAnimatePipUnchecked: toBounds=%s"
+ " duration=%s callers=\n%s", TAG, toBounds, duration,
Debug.getCallers(5, " "));
} }
// Intentionally resize here even if the current bounds match the destination bounds. // Intentionally resize here even if the current bounds match the destination bounds.

View File

@@ -35,7 +35,6 @@ import android.graphics.Point;
import android.graphics.PointF; import android.graphics.PointF;
import android.graphics.Rect; import android.graphics.Rect;
import android.provider.DeviceConfig; import android.provider.DeviceConfig;
import android.util.Log;
import android.util.Size; import android.util.Size;
import android.view.InputEvent; import android.view.InputEvent;
import android.view.MotionEvent; import android.view.MotionEvent;
@@ -46,6 +45,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityWindowInfo; import android.view.accessibility.AccessibilityWindowInfo;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.R; import com.android.wm.shell.R;
import com.android.wm.shell.common.FloatingContentCoordinator; import com.android.wm.shell.common.FloatingContentCoordinator;
import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor;
@@ -54,6 +54,7 @@ import com.android.wm.shell.pip.PipBoundsAlgorithm;
import com.android.wm.shell.pip.PipBoundsState; import com.android.wm.shell.pip.PipBoundsState;
import com.android.wm.shell.pip.PipTaskOrganizer; import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipUiEventLogger; import com.android.wm.shell.pip.PipUiEventLogger;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -1010,7 +1011,8 @@ public class PipTouchHandler {
} }
final Size estimatedMinMenuSize = mMenuController.getEstimatedMinMenuSize(); final Size estimatedMinMenuSize = mMenuController.getEstimatedMinMenuSize();
if (estimatedMinMenuSize == null) { if (estimatedMinMenuSize == null) {
Log.wtf(TAG, "Failed to get estimated menu size"); ProtoLog.wtf(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Failed to get estimated menu size", TAG);
return false; return false;
} }
final Rect currentBounds = mPipBoundsState.getBounds(); final Rect currentBounds = mPipBoundsState.getBounds();

View File

@@ -17,15 +17,15 @@
package com.android.wm.shell.pip.phone; package com.android.wm.shell.pip.phone;
import android.graphics.PointF; import android.graphics.PointF;
import android.os.Handler;
import android.util.Log;
import android.view.Display; import android.view.Display;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.VelocityTracker; import android.view.VelocityTracker;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -104,7 +104,8 @@ public class PipTouchState {
mActivePointerId = ev.getPointerId(0); mActivePointerId = ev.getPointerId(0);
if (DEBUG) { if (DEBUG) {
Log.e(TAG, "Setting active pointer id on DOWN: " + mActivePointerId); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Setting active pointer id on DOWN: %d", TAG, mActivePointerId);
} }
mLastTouch.set(ev.getRawX(), ev.getRawY()); mLastTouch.set(ev.getRawX(), ev.getRawY());
mDownTouch.set(mLastTouch); mDownTouch.set(mLastTouch);
@@ -131,7 +132,8 @@ public class PipTouchState {
addMovementToVelocityTracker(ev); addMovementToVelocityTracker(ev);
int pointerIndex = ev.findPointerIndex(mActivePointerId); int pointerIndex = ev.findPointerIndex(mActivePointerId);
if (pointerIndex == -1) { if (pointerIndex == -1) {
Log.e(TAG, "Invalid active pointer id on MOVE: " + mActivePointerId); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Invalid active pointer id on MOVE: %d", TAG, mActivePointerId);
break; break;
} }
@@ -168,8 +170,9 @@ public class PipTouchState {
final int newPointerIndex = (pointerIndex == 0) ? 1 : 0; final int newPointerIndex = (pointerIndex == 0) ? 1 : 0;
mActivePointerId = ev.getPointerId(newPointerIndex); mActivePointerId = ev.getPointerId(newPointerIndex);
if (DEBUG) { if (DEBUG) {
Log.e(TAG, ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"Relinquish active pointer id on POINTER_UP: " + mActivePointerId); "%s: Relinquish active pointer id on POINTER_UP: %d",
TAG, mActivePointerId);
} }
mLastTouch.set(ev.getRawX(newPointerIndex), ev.getRawY(newPointerIndex)); mLastTouch.set(ev.getRawX(newPointerIndex), ev.getRawY(newPointerIndex));
} }
@@ -189,7 +192,8 @@ public class PipTouchState {
int pointerIndex = ev.findPointerIndex(mActivePointerId); int pointerIndex = ev.findPointerIndex(mActivePointerId);
if (pointerIndex == -1) { if (pointerIndex == -1) {
Log.e(TAG, "Invalid active pointer id on UP: " + mActivePointerId); ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Invalid active pointer id on UP: %d", TAG, mActivePointerId);
break; break;
} }

View File

@@ -38,6 +38,8 @@ public enum ShellProtoLogGroup implements IProtoLogGroup {
"ShellBackPreview"), "ShellBackPreview"),
WM_SHELL_RECENT_TASKS(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false, WM_SHELL_RECENT_TASKS(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
Consts.TAG_WM_SHELL), Consts.TAG_WM_SHELL),
WM_SHELL_PICTURE_IN_PICTURE(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG,
false, Consts.TAG_WM_SHELL),
TEST_GROUP(true, true, false, "WindowManagerShellProtoLogTest"); TEST_GROUP(true, true, false, "WindowManagerShellProtoLogTest");
private final boolean mEnabled; private final boolean mEnabled;