diff options
| author | 2016-12-19 16:18:24 -0800 | |
|---|---|---|
| committer | 2017-02-01 11:12:30 -0800 | |
| commit | 14fbe141e0990d423b8564c0fc3a786ed26232c0 (patch) | |
| tree | 7af240a1fc04d941d6440792fea81acdabf230a5 | |
| parent | bb348802d3aa3880bf6ad119dfd980cd93b05a38 (diff) | |
Adding initial TRON logging for picture-in-picture.
Bug: 33756317
Test: Run PIP activity
Change-Id: Iad270dfdf6521d4659653a0697effaed4a0d4137
5 files changed, 74 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java index 6ef30c0258c6..f3dc339f12d6 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java @@ -77,7 +77,7 @@ public class PipMenuActivityController { void onPipMinimize(); /** - * Called when the PIP requested to be expanded. + * Called when the PIP requested to be dismissed. */ void onPipDismiss(); } diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java index 57276847193b..30aa03cb2ceb 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java @@ -44,6 +44,8 @@ import android.view.InputEventReceiver; import android.view.MotionEvent; import android.view.ViewConfiguration; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.BackgroundThread; import com.android.internal.policy.PipMotionHelper; import com.android.internal.policy.PipSnapAlgorithm; @@ -58,6 +60,10 @@ public class PipTouchHandler implements TunerService.Tunable { private static final String TAG = "PipTouchHandler"; private static final boolean DEBUG_ALLOW_OUT_OF_BOUNDS_STACK = false; + // These values are used for metrics and should never change + private static final int METRIC_VALUE_DISMISSED_BY_TAP = 0; + private static final int METRIC_VALUE_DISMISSED_BY_DRAG = 1; + private static final String TUNER_KEY_DRAG_TO_DISMISS = "pip_drag_to_dismiss"; private static final String TUNER_KEY_ALLOW_MINIMIZE = "pip_allow_minimize"; @@ -147,6 +153,8 @@ public class PipTouchHandler implements TunerService.Tunable { } else { unregisterInputConsumer(); } + MetricsLogger.visibility(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_MENU, + visible); } @Override @@ -165,6 +173,8 @@ public class PipTouchHandler implements TunerService.Tunable { @Override public void onPipDismiss() { BackgroundThread.getHandler().post(PipTouchHandler.this::dismissPinnedStack); + MetricsLogger.action(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED, + METRIC_VALUE_DISMISSED_BY_TAP); } } @@ -230,6 +240,10 @@ public class PipTouchHandler implements TunerService.Tunable { } public void onMinimizedStateChanged(boolean isMinimized) { + if (mIsMinimized != isMinimized) { + MetricsLogger.action(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_MINIMIZED, + isMinimized); + } mIsMinimized = isMinimized; mSnapAlgorithm.setMinimized(isMinimized); } @@ -439,7 +453,7 @@ public class PipTouchHandler implements TunerService.Tunable { /** * Flings the PIP to the closest snap target. */ - private void flingToSnapTarget(float velocity, float velocityX, float velocityY) { + private Rect flingToSnapTarget(float velocity, float velocityX, float velocityY) { Rect toBounds = mSnapAlgorithm.findClosestSnapBounds(mBoundedPinnedStackBounds, mPinnedStackBounds, velocityX, velocityY); if (!mPinnedStackBounds.equals(toBounds)) { @@ -450,12 +464,13 @@ public class PipTouchHandler implements TunerService.Tunable { velocity); mPinnedStackBoundsAnimator.start(); } + return toBounds; } /** * Animates the PIP to the closest snap target. */ - private void animateToClosestSnapTarget() { + private Rect animateToClosestSnapTarget() { Rect toBounds = mSnapAlgorithm.findClosestSnapBounds(mBoundedPinnedStackBounds, mPinnedStackBounds); if (!mPinnedStackBounds.equals(toBounds)) { @@ -463,6 +478,7 @@ public class PipTouchHandler implements TunerService.Tunable { toBounds, SNAP_STACK_DURATION, FAST_OUT_SLOW_IN, mUpdatePinnedStackBoundsListener); mPinnedStackBoundsAnimator.start(); } + return toBounds; } /** @@ -576,6 +592,9 @@ public class PipTouchHandler implements TunerService.Tunable { PointF lastTouch = touchState.getLastTouchPosition(); if (dismissBounds.contains((int) lastTouch.x, (int) lastTouch.y)) { animateDismissPinnedStack(dismissBounds); + MetricsLogger.action(mContext, + MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED, + METRIC_VALUE_DISMISSED_BY_DRAG); return true; } } diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index f906ee2ae82b..59d982a5286f 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -3351,6 +3351,33 @@ message MetricsEvent { // OS: O BACKUP_SETTINGS = 818; + // ACTION: Picture-in-picture was explicitly entered for an activity + // VALUE: true if it was entered while hiding as a result of moving to another task, false otherwise + ACTION_PICTURE_IN_PICTURE_ENTERED = 819; + + // ACTION: The activity currently in picture-in-picture was expanded back to fullscreen + // PACKAGE: The package name of the activity that was expanded back to fullscreen + ACTION_PICTURE_IN_PICTURE_EXPANDED_TO_FULLSCREEN = 820; + + // ACTION: The activity currently in picture-in-picture was minimized + // VALUE: True if the PiP was minimized, false otherwise + ACTION_PICTURE_IN_PICTURE_MINIMIZED = 821; + + // ACTION: Picture-in-picture was dismissed via the dismiss button + // VALUE: 0 if dismissed by tap, 1 if dismissed by drag + ACTION_PICTURE_IN_PICTURE_DISMISSED = 822; + + // ACTION: The visibility of the picture-in-picture meny + // VALUE: Whether or not the menu is visible + ACTION_PICTURE_IN_PICTURE_MENU = 823; + + // Enclosing category for group of PICTURE_IN_PICTURE_ASPECT_RATIO_FOO events, + // logged when the aspect ratio changes + ACTION_PICTURE_IN_PICTURE_ASPECT_RATIO_CHANGED = 824; + + // The current aspect ratio of the PiP, logged when it changes. + PICTURE_IN_PICTURE_ASPECT_RATIO = 825; + // ---- End O Constants, all O constants go above this line ---- // Add new aosp constants above this line. diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 171e90b86113..c386cc808407 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -235,6 +235,7 @@ import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.Rect; import android.location.LocationManager; +import android.metrics.LogMaker; import android.net.Proxy; import android.net.ProxyInfo; import android.net.Uri; @@ -312,6 +313,7 @@ import android.view.WindowManager; import com.google.android.collect.Lists; import com.google.android.collect.Maps; + import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.AssistUtils; @@ -322,6 +324,8 @@ import com.android.internal.app.IVoiceInteractor; import com.android.internal.app.ProcessMap; import com.android.internal.app.SystemUserHomeActivity; import com.android.internal.app.procstats.ProcessStats; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.BackgroundThread; import com.android.internal.os.BatteryStatsImpl; import com.android.internal.os.IResultReceiver; @@ -7627,6 +7631,10 @@ public class ActivityManagerService extends IActivityManager.Stub mStackSupervisor.moveActivityToPinnedStackLocked(r, "enterPictureInPictureMode", bounds, true /* moveHomeStackToFront */); mStackSupervisor.getStack(PINNED_STACK_ID).setPictureInPictureActions(actions); + + MetricsLogger.action(mContext, MetricsEvent.ACTION_PICTURE_IN_PICTURE_ENTERED, + r.supportsPictureInPictureWhilePausing); + logPictureInPictureArgs(args); }; if (isKeyguardLocked()) { @@ -7680,12 +7688,25 @@ public class ActivityManagerService extends IActivityManager.Stub stack.setPictureInPictureAspectRatio(r.pictureInPictureArgs.getAspectRatio()); stack.setPictureInPictureActions(r.pictureInPictureArgs.getActions()); } + logPictureInPictureArgs(args); } } finally { Binder.restoreCallingIdentity(origId); } } + private void logPictureInPictureArgs(PictureInPictureArgs args) { + if (args.hasSetActions()) { + MetricsLogger.histogram(mContext, "tron_varz_picture_in_picture_actions_count", + args.getActions().size()); + } + if (args.hasSetAspectRatio()) { + LogMaker lm = new LogMaker(MetricsEvent.ACTION_PICTURE_IN_PICTURE_ASPECT_RATIO_CHANGED); + lm.addTaggedData(MetricsEvent.PICTURE_IN_PICTURE_ASPECT_RATIO, args.getAspectRatio()); + MetricsLogger.action(lm); + } + } + private boolean isValidPictureInPictureAspectRatio(float aspectRatio) { return mMinPipAspectRatio <= aspectRatio && aspectRatio <= mMaxPipAspectRatio; } diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 83a786f626bf..5175e80ab70d 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -163,6 +163,8 @@ import android.view.InputEvent; import android.view.Surface; import com.android.internal.content.ReferrerIntent; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.TransferPipe; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.util.ArrayUtils; @@ -2278,6 +2280,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // pinned stack is recreated. See moveActivityToPinnedStackLocked(). task.setTaskToReturnTo(isFullscreenStackVisible && onTop ? APPLICATION_ACTIVITY_TYPE : HOME_ACTIVITY_TYPE); + MetricsLogger.action(mService.mContext, + MetricsEvent.ACTION_PICTURE_IN_PICTURE_EXPANDED_TO_FULLSCREEN); } moveTaskToStackLocked(tasks.get(i).taskId, FULLSCREEN_WORKSPACE_STACK_ID, onTop, onTop /*forceFocus*/, |