Commit 2304e25a authored by Jeffrey Cohen's avatar Jeffrey Cohen Committed by Chromium LUCI CQ

[Screenshot Fallback] Add metrics to screenshot fallback

Bug: 1161331
Change-Id: I0377693c7cd63bef7d986b7474df1722c2119c0a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2601049Reviewed-by: default avatarIlya Sherman <isherman@chromium.org>
Reviewed-by: default avatarTravis Skare <skare@chromium.org>
Commit-Queue: Jeffrey Cohen <jeffreycohen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840682}
parent cd5cde24
...@@ -75,12 +75,20 @@ class ScreenshotShareSheetMediator { ...@@ -75,12 +75,20 @@ class ScreenshotShareSheetMediator {
public void performNoArgOperation( public void performNoArgOperation(
@ScreenshotShareSheetViewProperties.NoArgOperation int operation) { @ScreenshotShareSheetViewProperties.NoArgOperation int operation) {
if (NoArgOperation.SHARE == operation) { if (NoArgOperation.SHARE == operation) {
ScreenshotShareSheetMetrics.logScreenshotAction(
ScreenshotShareSheetMetrics.ScreenshotShareSheetAction.SHARE);
share(); share();
} else if (NoArgOperation.SAVE == operation) { } else if (NoArgOperation.SAVE == operation) {
ScreenshotShareSheetMetrics.logScreenshotAction(
ScreenshotShareSheetMetrics.ScreenshotShareSheetAction.SAVE);
mSaveRunnable.run(); mSaveRunnable.run();
} else if (NoArgOperation.DELETE == operation) { } else if (NoArgOperation.DELETE == operation) {
ScreenshotShareSheetMetrics.logScreenshotAction(
ScreenshotShareSheetMetrics.ScreenshotShareSheetAction.DELETE);
mCloseDialogRunnable.run(); mCloseDialogRunnable.run();
} else if (NoArgOperation.INSTALL == operation) { } else if (NoArgOperation.INSTALL == operation) {
ScreenshotShareSheetMetrics.logScreenshotAction(
ScreenshotShareSheetMetrics.ScreenshotShareSheetAction.EDIT);
mInstallCallback.onResult(mCloseDialogRunnable); mInstallCallback.onResult(mCloseDialogRunnable);
} }
} }
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.share.screenshot;
import androidx.annotation.IntDef;
import org.chromium.base.metrics.RecordHistogram;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* A helper class to log metrics.
*/
public class ScreenshotShareSheetMetrics {
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
@IntDef({
ScreenshotShareSheetAction.EDIT,
ScreenshotShareSheetAction.SHARE,
ScreenshotShareSheetAction.SAVE,
ScreenshotShareSheetAction.DELETE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ScreenshotShareSheetAction {
int EDIT = 0;
int SHARE = 1;
int SAVE = 2;
int DELETE = 3;
int COUNT = 4;
};
/**
* A helper function to log histograms for the image editor.
* @param action the action to be logged.
*/
public static void logScreenshotAction(@ScreenshotShareSheetAction int action) {
RecordHistogram.recordEnumeratedHistogram(
"Sharing.ScreenshotFallback.Action", action, ScreenshotShareSheetAction.COUNT);
}
}
...@@ -38,6 +38,7 @@ share_java_sources = [ ...@@ -38,6 +38,7 @@ share_java_sources = [
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetDialog.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetDialog.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetDialogCoordinator.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetDialogCoordinator.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetMediator.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetMediator.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetMetrics.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetSaveDelegate.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetSaveDelegate.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetView.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetView.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetViewBinder.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetViewBinder.java",
......
...@@ -27,6 +27,7 @@ import org.mockito.MockitoAnnotations; ...@@ -27,6 +27,7 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.metrics.test.ShadowRecordHistogram;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.share.share_sheet.ChromeOptionShareCallback; import org.chromium.chrome.browser.share.share_sheet.ChromeOptionShareCallback;
...@@ -38,7 +39,7 @@ import org.chromium.ui.modelutil.PropertyModel; ...@@ -38,7 +39,7 @@ import org.chromium.ui.modelutil.PropertyModel;
* Tests for {@link ScreenshotShareSheetMediator}. * Tests for {@link ScreenshotShareSheetMediator}.
*/ */
@RunWith(BaseRobolectricTestRunner.class) @RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE) @Config(manifest = Config.NONE, shadows = {ShadowRecordHistogram.class})
// clang-format off // clang-format off
@Features.EnableFeatures(ChromeFeatureList.CHROME_SHARE_SCREENSHOT) @Features.EnableFeatures(ChromeFeatureList.CHROME_SHARE_SCREENSHOT)
public class ScreenshotShareSheetMediatorUnitTest { public class ScreenshotShareSheetMediatorUnitTest {
...@@ -93,6 +94,8 @@ public class ScreenshotShareSheetMediatorUnitTest { ...@@ -93,6 +94,8 @@ public class ScreenshotShareSheetMediatorUnitTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
ShadowRecordHistogram.reset();
doNothing().when(mDeleteRunnable).run(); doNothing().when(mDeleteRunnable).run();
doNothing().when(mSaveRunnable).run(); doNothing().when(mSaveRunnable).run();
...@@ -114,6 +117,10 @@ public class ScreenshotShareSheetMediatorUnitTest { ...@@ -114,6 +117,10 @@ public class ScreenshotShareSheetMediatorUnitTest {
callback.onResult(ScreenshotShareSheetViewProperties.NoArgOperation.DELETE); callback.onResult(ScreenshotShareSheetViewProperties.NoArgOperation.DELETE);
verify(mDeleteRunnable).run(); verify(mDeleteRunnable).run();
Assert.assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting(
"Sharing.ScreenshotFallback.Action",
ScreenshotShareSheetMetrics.ScreenshotShareSheetAction.DELETE));
} }
@Test @Test
...@@ -123,6 +130,10 @@ public class ScreenshotShareSheetMediatorUnitTest { ...@@ -123,6 +130,10 @@ public class ScreenshotShareSheetMediatorUnitTest {
callback.onResult(ScreenshotShareSheetViewProperties.NoArgOperation.SAVE); callback.onResult(ScreenshotShareSheetViewProperties.NoArgOperation.SAVE);
verify(mSaveRunnable).run(); verify(mSaveRunnable).run();
Assert.assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting(
"Sharing.ScreenshotFallback.Action",
ScreenshotShareSheetMetrics.ScreenshotShareSheetAction.SAVE));
} }
@Test @Test
...@@ -133,6 +144,10 @@ public class ScreenshotShareSheetMediatorUnitTest { ...@@ -133,6 +144,10 @@ public class ScreenshotShareSheetMediatorUnitTest {
Assert.assertTrue(mMediator.generateTemporaryUriFromBitmapCalled()); Assert.assertTrue(mMediator.generateTemporaryUriFromBitmapCalled());
verify(mDeleteRunnable).run(); verify(mDeleteRunnable).run();
Assert.assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting(
"Sharing.ScreenshotFallback.Action",
ScreenshotShareSheetMetrics.ScreenshotShareSheetAction.SHARE));
} }
@Test @Test
...@@ -152,6 +167,10 @@ public class ScreenshotShareSheetMediatorUnitTest { ...@@ -152,6 +167,10 @@ public class ScreenshotShareSheetMediatorUnitTest {
callback.onResult(ScreenshotShareSheetViewProperties.NoArgOperation.INSTALL); callback.onResult(ScreenshotShareSheetViewProperties.NoArgOperation.INSTALL);
verify(mInstallRunnable).onResult(any()); verify(mInstallRunnable).onResult(any());
Assert.assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting(
"Sharing.ScreenshotFallback.Action",
ScreenshotShareSheetMetrics.ScreenshotShareSheetAction.EDIT));
} }
@After @After
......
...@@ -67942,6 +67942,18 @@ https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf ...@@ -67942,6 +67942,18 @@ https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf
<int value="14" label="Draw tool: color changed"/> <int value="14" label="Draw tool: color changed"/>
</enum> </enum>
<enum name="SharingScreenshotFallbackAction">
<!--
SharingScreenshotAction must be kept in sync with SharingScreenshotAction defined
in /chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/ScreenshotShareSheetMetrics.java
-->
<int value="0" label="Screenshot Edit"/>
<int value="1" label="Screenshot Shared"/>
<int value="2" label="Screenshot Saved"/>
<int value="3" label="Screenshot Deleted"/>
</enum>
<enum name="SharingSendMessageResult"> <enum name="SharingSendMessageResult">
<int value="0" label="Successful"/> <int value="0" label="Successful"/>
<int value="1" label="Device is not found"/> <int value="1" label="Device is not found"/>
...@@ -339,6 +339,15 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. ...@@ -339,6 +339,15 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary> </summary>
</histogram> </histogram>
<histogram name="Sharing.ScreenshotFallback.Action"
enum="SharingScreenshotFallbackAction" expires_after="M92">
<owner>ramyan@chromium.org</owner>
<owner>jeffreycohen@chromium.org</owner>
<summary>
Logged when actions are taken in the sharing screenshot fallback feature.
</summary>
</histogram>
<histogram name="Sharing.ScreenshotsAndroid.IsEditorDismissedOnStart" <histogram name="Sharing.ScreenshotsAndroid.IsEditorDismissedOnStart"
enum="Boolean" expires_after="M89"> enum="Boolean" expires_after="M89">
<owner>jeffreycohen@chromium.org</owner> <owner>jeffreycohen@chromium.org</owner>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment