Commit 184d43b2 authored by Max Curran's avatar Max Curran Committed by Chromium LUCI CQ

Initial implementation of the background task to measure how often user are...

Initial implementation of the background task to measure how often user are offline and what they do while offline.

Full Design Doc: https://docs.google.com/document/d/1Vv6fdaRWjLpxeuVR89C6y5cGcAiCu6f4YBRwMjpN_T0/edit?usp=sharing

Bug: 1131600
Change-Id: I89f67a6bbdaf71b550518b40c06788e3dfaccf11
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2459946
Commit-Queue: Max Curran <curranmax@chromium.org>
Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Reviewed-by: default avatarRobert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#843303}
parent 056d872a
......@@ -897,6 +897,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/ntp/search/SearchBoxViewBinder.java",
"java/src/org/chromium/chrome/browser/ntp/snippets/SectionHeader.java",
"java/src/org/chromium/chrome/browser/ntp/snippets/SectionHeaderView.java",
"java/src/org/chromium/chrome/browser/offline/measurements/OfflineMeasurementsBackgroundTask.java",
"java/src/org/chromium/chrome/browser/offlinepages/AutoFetchNotifier.java",
"java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java",
"java/src/org/chromium/chrome/browser/offlinepages/BackgroundSchedulerBridge.java",
......
......@@ -137,6 +137,7 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/notifications/NotificationTriggerSchedulerTest.java",
"junit/src/org/chromium/chrome/browser/notifications/channels/ChromeChannelDefinitionsTest.java",
"junit/src/org/chromium/chrome/browser/ntp/cards/InnerNodeTest.java",
"junit/src/org/chromium/chrome/browser/offline/measurements/OfflineMeasurementsBackgroundTaskUnitTest.java",
"junit/src/org/chromium/chrome/browser/offlinepages/BackgroundSchedulerTest.java",
"junit/src/org/chromium/chrome/browser/offlinepages/CctOfflinePageModelObserverTest.java",
"junit/src/org/chromium/chrome/browser/offlinepages/ClientIdTest.java",
......
......@@ -78,7 +78,8 @@ public class ChromeCachedFlags {
ChromeFeatureList.TABBED_APP_OVERFLOW_MENU_REGROUP,
ChromeFeatureList.TABBED_APP_OVERFLOW_MENU_THREE_BUTTON_ACTIONBAR,
ChromeFeatureList.USE_CHIME_ANDROID_SDK,
ChromeFeatureList.READ_LATER);
ChromeFeatureList.READ_LATER,
ChromeFeatureList.OFFLINE_MEASUREMENTS_BACKGROUND_TASK);
// clang-format on
CachedFeatureFlags.cacheNativeFlags(featuresToCache);
CachedFeatureFlags.cacheAdditionalNativeFlags();
......
......@@ -15,6 +15,7 @@ import org.chromium.chrome.browser.explore_sites.ExploreSitesBackgroundTask;
import org.chromium.chrome.browser.feed.FeedV1;
import org.chromium.chrome.browser.notifications.NotificationTriggerBackgroundTask;
import org.chromium.chrome.browser.notifications.scheduler.NotificationSchedulerTask;
import org.chromium.chrome.browser.offline.measurements.OfflineMeasurementsBackgroundTask;
import org.chromium.chrome.browser.offlinepages.OfflineBackgroundTask;
import org.chromium.chrome.browser.offlinepages.prefetch.OfflineNotificationBackgroundTask;
import org.chromium.chrome.browser.offlinepages.prefetch.PrefetchBackgroundTask;
......@@ -91,6 +92,8 @@ public class ChromeBackgroundTaskFactory implements BackgroundTaskFactory {
return new NotificationTriggerBackgroundTask();
case TaskIds.PERIODIC_BACKGROUND_SYNC_CHROME_WAKEUP_TASK_JOB_ID:
return new PeriodicBackgroundSyncChromeWakeUpTask();
case TaskIds.OFFLINE_MEASUREMENT_JOB_ID:
return new OfflineMeasurementsBackgroundTask();
// End of Java tasks. All native tasks should be listed here.
case TaskIds.QUERY_TILE_JOB_ID:
case TaskIds.FEEDV2_REFRESH_JOB_ID:
......
......@@ -64,6 +64,7 @@ import org.chromium.chrome.browser.metrics.PackageMetrics;
import org.chromium.chrome.browser.metrics.WebApkUma;
import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
import org.chromium.chrome.browser.notifications.channels.ChannelsUpdater;
import org.chromium.chrome.browser.offline.measurements.OfflineMeasurementsBackgroundTask;
import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
import org.chromium.chrome.browser.photo_picker.DecoderService;
import org.chromium.chrome.browser.policy.EnterpriseInfo;
......@@ -444,6 +445,8 @@ public class ProcessInitializationHandler {
() -> VideoTutorialShareHelper.saveUrlsToSharedPrefs());
deferredStartupHandler.addDeferredTask(
() -> TosDialogBehaviorSharedPrefInvalidator.refreshSharedPreferenceIfTosSkipped());
deferredStartupHandler.addDeferredTask(
() -> OfflineMeasurementsBackgroundTask.maybeScheduleTaskAndReportMetrics());
}
private void initChannelsAsync() {
......
monorail {
component: "UI>Browser>Offline"
}
team_email: "offline-dev@chromium.org"
tbansal@chromium.org
robertogden@chromium.org
curranmax@chromium.org
......@@ -194,6 +194,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
&kKitKatSupported,
&kNotificationSuspender,
&kOfflineIndicatorV2,
&kOfflineMeasurementsBackgroundTask,
&kOmniboxSpareRenderer,
&kProbabilisticCryptidRenderer,
&kReachedCodeProfiler,
......@@ -549,6 +550,9 @@ const base::Feature kNotificationSuspender{"NotificationSuspender",
const base::Feature kOfflineIndicatorV2{"OfflineIndicatorV2",
base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kOfflineMeasurementsBackgroundTask{
"OfflineMeasurementsBackgroundTask", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kOmniboxSpareRenderer{"OmniboxSpareRenderer",
base::FEATURE_DISABLED_BY_DEFAULT};
......
......@@ -92,6 +92,7 @@ extern const base::Feature kKitKatSupported;
extern const base::Feature kLanguagesPreference;
extern const base::Feature kNotificationSuspender;
extern const base::Feature kOfflineIndicatorV2;
extern const base::Feature kOfflineMeasurementsBackgroundTask;
extern const base::Feature kOmniboxSpareRenderer;
extern const base::Feature kProbabilisticCryptidRenderer;
extern const base::Feature kReachedCodeProfiler;
......
......@@ -84,6 +84,7 @@ public class CachedFeatureFlags {
put(ChromeFeatureList.CCT_INCOGNITO_AVAILABLE_TO_THIRD_PARTY, false);
put(ChromeFeatureList.READ_LATER, false);
put(ChromeFeatureList.CCT_REMOVE_REMOTE_VIEW_IDS, true);
put(ChromeFeatureList.OFFLINE_MEASUREMENTS_BACKGROUND_TASK, false);
}
};
......
......@@ -350,6 +350,8 @@ public abstract class ChromeFeatureList {
public static final String OFFLINE_INDICATOR_ALWAYS_HTTP_PROBE =
"OfflineIndicatorAlwaysHttpProbe";
public static final String OFFLINE_INDICATOR_V2 = "OfflineIndicatorV2";
public static final String OFFLINE_MEASUREMENTS_BACKGROUND_TASK =
"OfflineMeasurementsBackgroundTask";
public static final String OFFLINE_PAGES_DESCRIPTIVE_FAIL_STATUS =
"OfflinePagesDescriptiveFailStatus";
public static final String OFFLINE_PAGES_DESCRIPTIVE_PENDING_STATUS =
......
......@@ -514,6 +514,25 @@ public final class ChromePreferenceKeys {
*/
public static final String OFFLINE_INDICATOR_V2_ENABLED = "offline_indicator_v2_enabled";
/**
* The measurement interval (in minutes) used to schedule the currently running
* OfflineMeasureBackgroundTask. This value is zero if the OfflineMeasureBackgroundTask is not
* currently running.
*/
public static final String OFFLINE_MEASUREMENTS_CURRENT_TASK_MEASUREMENT_INTERVAL_IN_MINUTES =
"Chrome.OfflineMeasurements.CurrentTaskMeasurementIntervalInMinutes";
/** Time of the last OfflineMeasurementsBackgroundTask check. */
public static final String OFFLINE_MEASUREMENTS_LAST_CHECK_MILLIS =
"Chrome.OfflineMeasurements.LastCheckMillis";
/**
* Comma separated list of time between OfflineMeasurementsBackgroundTask checks. When possible
* these values will be recorded to UMA.
*/
public static final String OFFLINE_MEASUREMENTS_TIME_BETWEEN_CHECKS_MILLIS_LIST =
"Chrome.OfflineMeasurements.TimeBetweenChecksMillisList";
/** The shared preference for the 'save card to device' checkbox status. */
public static final String PAYMENTS_CHECK_SAVE_CARD_TO_DEVICE = "check_save_card_to_device";
......@@ -849,6 +868,9 @@ public final class ChromePreferenceKeys {
IMAGE_DESCRIPTIONS_JUST_ONCE_COUNT,
IMAGE_DESCRIPTIONS_DONT_ASK_AGAIN,
ISOLATED_SPLITS_DEX_COMPILE_VERSION,
OFFLINE_MEASUREMENTS_CURRENT_TASK_MEASUREMENT_INTERVAL_IN_MINUTES,
OFFLINE_MEASUREMENTS_LAST_CHECK_MILLIS,
OFFLINE_MEASUREMENTS_TIME_BETWEEN_CHECKS_MILLIS_LIST,
PERSISTENT_OFFLINE_CONTENT_AVAILABILITY_STATUS,
PRICE_TRACKING_PRICE_WELCOME_MESSAGE_CARD,
PRICE_TRACKING_PRICE_WELCOME_MESSAGE_CARD_SHOW_COUNT,
......
......@@ -38,8 +38,9 @@ public abstract class BackgroundTaskSchedulerExternalUma {
public static final int BACKGROUND_TASK_QUERY_TILE = 23;
public static final int BACKGROUND_TASK_FEEDV2_REFRESH = 24;
public static final int BACKGROUND_TASK_DOWNLOAD_LATER = 25;
public static final int BACKGROUND_TASK_OFFLINE_MEASUREMENTS = 26;
// Keep this one at the end and increment appropriately when adding new tasks.
public static final int BACKGROUND_TASK_COUNT = 26;
public static final int BACKGROUND_TASK_COUNT = 27;
protected BackgroundTaskSchedulerExternalUma() {}
......@@ -150,6 +151,8 @@ public abstract class BackgroundTaskSchedulerExternalUma {
return BACKGROUND_TASK_QUERY_TILE;
case TaskIds.FEEDV2_REFRESH_JOB_ID:
return BACKGROUND_TASK_FEEDV2_REFRESH;
case TaskIds.OFFLINE_MEASUREMENT_JOB_ID:
return BACKGROUND_TASK_OFFLINE_MEASUREMENTS;
default:
assert false;
}
......
......@@ -125,7 +125,10 @@ public class BackgroundTaskSchedulerUmaTest {
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(TaskIds.QUERY_TILE_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_FEEDV2_REFRESH,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(TaskIds.FEEDV2_REFRESH_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_COUNT, 26);
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_OFFLINE_MEASUREMENTS,
BackgroundTaskSchedulerUma.toUmaEnumValueFromTaskId(
TaskIds.OFFLINE_MEASUREMENT_JOB_ID));
assertEquals(BackgroundTaskSchedulerUma.BACKGROUND_TASK_COUNT, 27);
}
@Test
......
......@@ -48,6 +48,7 @@ enum class TaskIds {
PERIODIC_BACKGROUND_SYNC_CHROME_WAKEUP_TASK_JOB_ID = 105,
QUERY_TILE_JOB_ID = 106,
FEEDV2_REFRESH_JOB_ID = 107,
OFFLINE_MEASUREMENT_JOB_ID = 108,
};
} // namespace background_task
......
......@@ -21,6 +21,28 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
<histograms>
<histogram name="Offline.Measurements.MeasurementInterval" units="minutes"
expires_after="2021-04-04">
<owner>curranmax@chromium.org</owner>
<owner>tbansal@chromium.org</owner>
<summary>
The specified interval (in minutes) which the offline measurements
experiment will periodically run. This value is logged when Chrome starts up
for users where this feature is enabled.
</summary>
</histogram>
<histogram name="Offline.Measurements.TimeBetweenChecks" units="minutes"
expires_after="2021-04-04">
<owner>curranmax@chromium.org</owner>
<owner>tbansal@chromium.org</owner>
<summary>
The time (in minutes) between the last check and current check for the
offline measurements experiment. This value is logged each time the offline
measurements background task runs.
</summary>
</histogram>
<histogram name="OfflineIndicator.ConnectivityChanged.DeviceState.Offline"
enum="OfflineIndicatorSurfaceState" expires_after="2021-07-11">
<owner>curranmax@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