summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Winson Chung <winsonc@google.com> 2016-12-19 16:18:24 -0800
committer Winson Chung <winsonc@google.com> 2017-02-01 11:12:30 -0800
commit14fbe141e0990d423b8564c0fc3a786ed26232c0 (patch)
tree7af240a1fc04d941d6440792fea81acdabf230a5
parentbb348802d3aa3880bf6ad119dfd980cd93b05a38 (diff)
Adding initial TRON logging for picture-in-picture.
Bug: 33756317 Test: Run PIP activity Change-Id: Iad270dfdf6521d4659653a0697effaed4a0d4137
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivityController.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java23
-rw-r--r--proto/src/metrics_constants.proto27
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java21
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java4
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*/,