diff options
| author | 2018-02-15 10:19:32 -0800 | |
|---|---|---|
| committer | 2018-02-18 00:08:01 -0800 | |
| commit | ae9fdf0403fdb24acc2c1d7e33ec96834d154dcf (patch) | |
| tree | e490d99fc25a8a56e16bbde359d2caa362ed7312 | |
| parent | 2094d9d306e6f7a7855cd2eb548548cece851cf6 (diff) | |
fix picture-in-picture logging
+ log uid and activity name
Test: manual test. Will add cts test
Change-Id: I3d3e77b24779e439eacc06007fae62c037a19fd6
5 files changed, 53 insertions, 48 deletions
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 85e209be6413..d9094dd1d86d 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -993,21 +993,18 @@ message AppStartFullyDrawnChanged {   *      frameworks/base/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java   */  message PictureInPictureStateChanged { +    // -1 if it is not available      optional int32 uid = 1; -    optional string package_name = 2; - -    optional string class_name = 3; +    optional string short_name = 2; -    // Picture-in-Picture action occurred, similar to -    // frameworks/base/proto/src/metrics_constants.proto      enum State {          ENTERED = 1;          EXPANDED_TO_FULL_SCREEN = 2;          MINIMIZED = 3;          DISMISSED = 4;      } -    optional State state = 4; +    optional State state = 3;  }  /** diff --git a/core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java b/core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java index 1376687be019..adad0362eca9 100644 --- a/core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java +++ b/core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java @@ -16,7 +16,10 @@  package com.android.internal.os.logging; +import android.content.ComponentName;  import android.content.Context; +import android.content.pm.PackageManager.NameNotFoundException; +import android.util.Pair;  import android.util.StatsLog;  import com.android.internal.logging.MetricsLogger; @@ -31,43 +34,49 @@ public class MetricsLoggerWrapper {      private static final int METRIC_VALUE_DISMISSED_BY_TAP = 0;      private static final int METRIC_VALUE_DISMISSED_BY_DRAG = 1; -    public static void logPictureInPictureDismissByTap(Context context) { +    public static void logPictureInPictureDismissByTap(Context context, +            Pair<ComponentName, Integer> topActivityInfo) {          MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,                  METRIC_VALUE_DISMISSED_BY_TAP);          StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, -                context.getUserId(), -                context.getApplicationInfo().packageName, -                context.getApplicationInfo().className, +                getUid(context, topActivityInfo.first, topActivityInfo.second), +                topActivityInfo.first.flattenToString(),                  StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__DISMISSED);      } -    public static void logPictureInPictureDismissByDrag(Context context) { +    public static void logPictureInPictureDismissByDrag(Context context, +            Pair<ComponentName, Integer> topActivityInfo) {          MetricsLogger.action(context,                  MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,                  METRIC_VALUE_DISMISSED_BY_DRAG);          StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, -                context.getUserId(), -                context.getApplicationInfo().packageName, -                context.getApplicationInfo().className, +                getUid(context, topActivityInfo.first, topActivityInfo.second), +                topActivityInfo.first.flattenToString(),                  StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__DISMISSED);      } -    public static void logPictureInPictureMinimize(Context context, boolean isMinimized) { +    public static void logPictureInPictureMinimize(Context context, boolean isMinimized, +            Pair<ComponentName, Integer> topActivityInfo) {          MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_MINIMIZED,                  isMinimized); -        if (isMinimized) { -            StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, -                    context.getUserId(), -                    context.getApplicationInfo().packageName, -                    context.getApplicationInfo().className, -                    StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__MINIMIZED); -        } else { -            StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, -                    context.getUserId(), -                    context.getApplicationInfo().packageName, -                    context.getApplicationInfo().className, -                    StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__EXPANDED_TO_FULL_SCREEN); +        StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, +                getUid(context, topActivityInfo.first, topActivityInfo.second), +                topActivityInfo.first.flattenToString(), +                StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__MINIMIZED); +    } + +    /** +     * Get uid from component name and user Id +     * @return uid. -1 if not found. +     */ +    private static int getUid(Context context, ComponentName componentName, int userId) { +        int uid = -1; +        try { +            uid = context.getPackageManager().getApplicationInfoAsUser( +                    componentName.getPackageName(), 0, userId).uid; +        } catch (NameNotFoundException e) {          } +        return uid;      }      public static void logPictureInPictureMenuVisible(Context context, boolean menuStateFull) { @@ -76,24 +85,21 @@ public class MetricsLoggerWrapper {      }      public static void logPictureInPictureEnter(Context context, -            boolean supportsEnterPipOnTaskSwitch) { +            int uid, String shortComponentName, boolean supportsEnterPipOnTaskSwitch) {          MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_ENTERED,                  supportsEnterPipOnTaskSwitch); -        if (supportsEnterPipOnTaskSwitch) { -            StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, context.getUserId(), -                    context.getApplicationInfo().packageName, -                    context.getApplicationInfo().className, -                    StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__ENTERED); -        } +        StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, uid, +                shortComponentName, +                StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__ENTERED);      } -    public static void logPictureInPictureFullScreen(Context context) { +    public static void logPictureInPictureFullScreen(Context context, int uid, +            String shortComponentName) {          MetricsLogger.action(context,                  MetricsEvent.ACTION_PICTURE_IN_PICTURE_EXPANDED_TO_FULLSCREEN);          StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, -                context.getUserId(), -                context.getApplicationInfo().packageName, -                context.getApplicationInfo().className, +                uid, +                shortComponentName,                  StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__EXPANDED_TO_FULL_SCREEN);      } 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 b25351731a35..77931e447e1d 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java @@ -16,9 +16,9 @@  package com.android.systemui.pip.phone; -import static com.android.systemui.pip.phone.PipMenuActivityController.MENU_STATE_NONE;  import static com.android.systemui.pip.phone.PipMenuActivityController.MENU_STATE_CLOSE;  import static com.android.systemui.pip.phone.PipMenuActivityController.MENU_STATE_FULL; +import static com.android.systemui.pip.phone.PipMenuActivityController.MENU_STATE_NONE;  import android.animation.Animator;  import android.animation.AnimatorListenerAdapter; @@ -42,7 +42,7 @@ import android.view.accessibility.AccessibilityEvent;  import android.view.accessibility.AccessibilityManager;  import android.view.accessibility.AccessibilityNodeInfo;  import android.view.accessibility.AccessibilityWindowInfo; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +  import com.android.internal.os.logging.MetricsLoggerWrapper;  import com.android.internal.policy.PipSnapAlgorithm;  import com.android.systemui.R; @@ -158,8 +158,9 @@ public class PipTouchHandler {          @Override          public void onPipDismiss() { +            MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext, +                    PipUtils.getTopPinnedActivity(mContext, mActivityManager));              mMotionHelper.dismissPip(); -            MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext);          }          @Override @@ -458,7 +459,8 @@ public class PipTouchHandler {              return;          }          if (mIsMinimized != isMinimized) { -            MetricsLoggerWrapper.logPictureInPictureMinimize(mContext, isMinimized); +            MetricsLoggerWrapper.logPictureInPictureMinimize(mContext, +                    isMinimized, PipUtils.getTopPinnedActivity(mContext, mActivityManager));          }          mIsMinimized = isMinimized;          mSnapAlgorithm.setMinimized(isMinimized); @@ -661,9 +663,10 @@ public class PipTouchHandler {              if (ENABLE_DISMISS_DRAG_TO_EDGE) {                  // Check if the user dragged or flung the PiP offscreen to dismiss it                  if (mMotionHelper.shouldDismissPip() || isFlingToBot) { +                    MetricsLoggerWrapper.logPictureInPictureDismissByDrag(mContext, +                            PipUtils.getTopPinnedActivity(mContext, mActivityManager));                      mMotionHelper.animateDismiss(mMotionHelper.getBounds(), vel.x,                          vel.y, mUpdateScrimListener); -                    MetricsLoggerWrapper.logPictureInPictureDismissByDrag(mContext);                      return true;                  }              } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 2af284c12288..59c894be95f0 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -8655,8 +8655,8 @@ public class ActivityManagerService extends IActivityManager.Stub                      final PinnedActivityStack stack = r.getStack();                      stack.setPictureInPictureAspectRatio(aspectRatio);                      stack.setPictureInPictureActions(actions); - -                    MetricsLoggerWrapper.logPictureInPictureEnter(mContext, r.supportsEnterPipOnTaskSwitch); +                    MetricsLoggerWrapper.logPictureInPictureEnter(mContext, r.appInfo.uid, +                            r.shortComponentName, r.supportsEnterPipOnTaskSwitch);                      logPictureInPictureArgs(params);                  }; diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index f4f60c2c43a9..a82facd174a3 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -2599,9 +2599,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D                  // resize when we remove task from it below and it is detached from the                  // display because it no longer contains any tasks.                  mAllowDockedStackResize = false; -            } else if (inPinnedWindowingMode && onTop) { -                // Log if we are expanding the PiP to fullscreen -                MetricsLoggerWrapper.logPictureInPictureFullScreen(mService.mContext);              }              // If we are moving from the pinned stack, then the animation takes care of updating @@ -2624,6 +2621,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D                                  isTopTask /* animate */, DEFER_RESUME,                                  schedulePictureInPictureModeChange,                                  "moveTasksToFullscreenStack - onTop"); +                        MetricsLoggerWrapper.logPictureInPictureFullScreen(mService.mContext, +                                task.effectiveUid, task.realActivity.flattenToString());                      } else {                          // Position the tasks in the fullscreen stack in order at the bottom of the                          // stack. Also defer resume until all the tasks have been moved to the  |