Commit c84819af authored by Sebastien Marchand's avatar Sebastien Marchand Committed by Commit Bot

Switch tab_manager_features to the FeatureParams API

This is a cleanup that replaces the really long feature parameters names
used in tab_manager_features.h/cc by several FeatureParam objects.


Bug: 844426
Change-Id: Ia37d00d2de3f0ff756fa365108bbcab4a91d184c
Reviewed-on: https://chromium-review.googlesource.com/1195852Reviewed-by: default avatarChris Hamilton <chrisha@chromium.org>
Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Commit-Queue: Sébastien Marchand <sebmarchand@chromium.org>
Cr-Commit-Position: refs/heads/master@{#591360}
parent b074c3fe
...@@ -1218,13 +1218,13 @@ const FeatureEntry::FeatureVariation ...@@ -1218,13 +1218,13 @@ const FeatureEntry::FeatureVariation
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
const FeatureEntry::FeatureParam kProactiveTabFreezeAndDiscard_FreezeOnly[] = { const FeatureEntry::FeatureParam kProactiveTabFreezeAndDiscard_FreezeOnly[] = {
{resource_coordinator:: {resource_coordinator::ProactiveTabFreezeAndDiscardParams::
kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam, kShouldProactivelyDiscard.name,
"false"}}; "false"}};
const FeatureEntry::FeatureParam const FeatureEntry::FeatureParam
kProactiveTabFreezeAndDiscard_FreezeAndDiscard[] = { kProactiveTabFreezeAndDiscard_FreezeAndDiscard[] = {
{resource_coordinator:: {resource_coordinator::ProactiveTabFreezeAndDiscardParams::
kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam, kShouldProactivelyDiscard.name,
"true"}}; "true"}};
const FeatureEntry::FeatureVariation kProactiveTabFreezeAndDiscardVariations[] = const FeatureEntry::FeatureVariation kProactiveTabFreezeAndDiscardVariations[] =
{{"Freeze only", kProactiveTabFreezeAndDiscard_FreezeOnly, {{"Freeze only", kProactiveTabFreezeAndDiscard_FreezeOnly,
...@@ -4235,7 +4235,7 @@ const FeatureEntry kFeatureEntries[] = { ...@@ -4235,7 +4235,7 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_WITH_PARAMS_VALUE_TYPE( FEATURE_WITH_PARAMS_VALUE_TYPE(
features::kProactiveTabFreezeAndDiscard, features::kProactiveTabFreezeAndDiscard,
kProactiveTabFreezeAndDiscardVariations, kProactiveTabFreezeAndDiscardVariations,
resource_coordinator::kProactiveTabFreezeAndDiscardFeatureName)}, features::kProactiveTabFreezeAndDiscard.name)},
{"site-characteristics-database", {"site-characteristics-database",
flag_descriptions::kSiteCharacteristicsDatabaseName, flag_descriptions::kSiteCharacteristicsDatabaseName,
flag_descriptions::kSiteCharacteristicsDatabaseDescription, kOsDesktop, flag_descriptions::kSiteCharacteristicsDatabaseDescription, kOsDesktop,
......
...@@ -30,8 +30,7 @@ const base::Feature kInfiniteSessionRestore{"InfiniteSessionRestore", ...@@ -30,8 +30,7 @@ const base::Feature kInfiniteSessionRestore{"InfiniteSessionRestore",
// Enables proactive tab freezing and discarding. // Enables proactive tab freezing and discarding.
const base::Feature kProactiveTabFreezeAndDiscard{ const base::Feature kProactiveTabFreezeAndDiscard{
resource_coordinator::kProactiveTabFreezeAndDiscardFeatureName, "ProactiveTabFreezeAndDiscard", base::FEATURE_DISABLED_BY_DEFAULT};
base::FEATURE_DISABLED_BY_DEFAULT};
// Enables the site characteristics database. // Enables the site characteristics database.
const base::Feature kSiteCharacteristicsDatabase{ const base::Feature kSiteCharacteristicsDatabase{
...@@ -65,10 +64,8 @@ namespace { ...@@ -65,10 +64,8 @@ namespace {
int GetModerateThresholdTabCountBasedOnSystemMemory( int GetModerateThresholdTabCountBasedOnSystemMemory(
ProactiveTabFreezeAndDiscardParams* params, ProactiveTabFreezeAndDiscardParams* params,
int memory_in_gb) { int memory_in_gb) {
int moderate_loaded_tab_count_per_gb = base::GetFieldTrialParamByFeatureAsInt( int moderate_loaded_tab_count_per_gb =
features::kProactiveTabFreezeAndDiscard, ProactiveTabFreezeAndDiscardParams::kModerateLoadedTabsPerGbRam.Get();
kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamParam,
kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamDefault);
int moderate_level = moderate_loaded_tab_count_per_gb * memory_in_gb; int moderate_level = moderate_loaded_tab_count_per_gb * memory_in_gb;
...@@ -81,146 +78,63 @@ int GetModerateThresholdTabCountBasedOnSystemMemory( ...@@ -81,146 +78,63 @@ int GetModerateThresholdTabCountBasedOnSystemMemory(
} // namespace } // namespace
const char kProactiveTabFreezeAndDiscardFeatureName[] = // Instantiate the feature parameters for proactive tab discarding.
"ProactiveTabFreezeAndDiscard"; constexpr base::FeatureParam<bool>
ProactiveTabFreezeAndDiscardParams::kShouldProactivelyDiscard;
// Field-trial parameter names for proactive tab discarding. constexpr base::FeatureParam<bool>
const char kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam[] = ProactiveTabFreezeAndDiscardParams::kShouldPeriodicallyUnfreeze;
"ShouldProactivelyDiscard"; constexpr base::FeatureParam<bool> ProactiveTabFreezeAndDiscardParams::
const char kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeParam[] = kShouldProtectTabsSharingBrowsingInstance;
"ShouldPeriodicallyUnfreeze"; constexpr base::FeatureParam<int>
const char ProactiveTabFreezeAndDiscardParams::kLowLoadedTabCount;
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceParam constexpr base::FeatureParam<int>
[] = "ShouldProtectTabsSharingBrowsingInstance"; ProactiveTabFreezeAndDiscardParams::kModerateLoadedTabsPerGbRam;
const char kProactiveTabFreezeAndDiscard_LowLoadedTabCountParam[] = constexpr base::FeatureParam<int>
"LowLoadedTabCount"; ProactiveTabFreezeAndDiscardParams::kHighLoadedTabCount;
const char kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamParam[] = constexpr base::FeatureParam<int>
"ModerateLoadedTabsPerGbRam"; ProactiveTabFreezeAndDiscardParams::kLowOccludedTimeout;
const char kProactiveTabFreezeAndDiscard_HighLoadedTabCountParam[] = constexpr base::FeatureParam<int>
"HighLoadedTabCount"; ProactiveTabFreezeAndDiscardParams::kModerateOccludedTimeout;
const char kProactiveTabFreezeAndDiscard_LowOccludedTimeoutParam[] = constexpr base::FeatureParam<int>
"LowOccludedTimeoutSeconds"; ProactiveTabFreezeAndDiscardParams::kHighOccludedTimeout;
const char kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutParam[] = constexpr base::FeatureParam<int>
"ModerateOccludedTimeoutSeconds"; ProactiveTabFreezeAndDiscardParams::kFreezeTimeout;
const char kProactiveTabFreezeAndDiscard_HighOccludedTimeoutParam[] = constexpr base::FeatureParam<int>
"HighOccludedTimeoutSeconds"; ProactiveTabFreezeAndDiscardParams::kUnfreezeTimeout;
const char kProactiveTabFreezeAndDiscard_FreezeTimeoutParam[] = "FreezeTimeout"; constexpr base::FeatureParam<int>
const char kProactiveTabFreezeAndDiscard_UnfreezeTimeoutParam[] = ProactiveTabFreezeAndDiscardParams::kRefreezeTimeout;
"UnfreezeTimeout";
const char kProactiveTabFreezeAndDiscard_RefreezeTimeoutParam[] = // Instantiate the feature parameters for the site characteristics database.
"RefreezeTimeout"; constexpr base::FeatureParam<int>
SiteCharacteristicsDatabaseParams::kFaviconUpdateObservationWindow;
// Field-trial parameter names for the site characteristics database. constexpr base::FeatureParam<int>
const char kSiteCharacteristicsDb_FaviconUpdateObservationWindow[] = SiteCharacteristicsDatabaseParams::kTitleUpdateObservationWindow;
"FaviconUpdateObservationWindow"; constexpr base::FeatureParam<int>
const char kSiteCharacteristicsDb_TitleUpdateObservationWindow[] = SiteCharacteristicsDatabaseParams::kAudioUsageObservationWindow;
"TitleUpdateObservationWindow"; constexpr base::FeatureParam<int>
const char kSiteCharacteristicsDb_AudioUsageObservationWindow[] = SiteCharacteristicsDatabaseParams::kNotificationsUsageObservationWindow;
"AudioUsageObservationWindow"; constexpr base::FeatureParam<int>
const char kSiteCharacteristicsDb_NotificationsUsageObservationWindow[] = SiteCharacteristicsDatabaseParams::kTitleOrFaviconChangeGracePeriod;
"NotificationsUsageObservationWindow"; constexpr base::FeatureParam<int>
const char kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod[] = SiteCharacteristicsDatabaseParams::kAudioUsageGracePeriod;
"TitleOrFaviconChangeGracePeriod";
const char kSiteCharacteristicsDb_AudioUsageGracePeriod[] = // Instantiate the feature parameters for infinite session restore.
"AudioUsageGracePeriod"; constexpr base::FeatureParam<int>
InfiniteSessionRestoreParams::kMinSimultaneousTabLoads;
const char kInfiniteSessionRestore_MinSimultaneousTabLoads[] = constexpr base::FeatureParam<int>
"MinSimultaneousTabLoads"; InfiniteSessionRestoreParams::kMaxSimultaneousTabLoads;
const char kInfiniteSessionRestore_MaxSimultaneousTabLoads[] = constexpr base::FeatureParam<int>
"MaxSimultaneousTabLoads"; InfiniteSessionRestoreParams::kCoresPerSimultaneousTabLoad;
const char kInfiniteSessionRestore_CoresPerSimultaneousTabLoad[] = constexpr base::FeatureParam<int>
"CoresPerSimultaneousTabLoad"; InfiniteSessionRestoreParams::kMinTabsToRestore;
const char kInfiniteSessionRestore_MinTabsToRestore[] = "MinTabsToRestore"; constexpr base::FeatureParam<int>
const char kInfiniteSessionRestore_MaxTabsToRestore[] = "MaxTabsToRestore"; InfiniteSessionRestoreParams::kMaxTabsToRestore;
const char kInfiniteSessionRestore_MbFreeMemoryPerTabToRestore[] = constexpr base::FeatureParam<int>
"MbFreeMemoryPerTabToRestore"; InfiniteSessionRestoreParams::kMbFreeMemoryPerTabToRestore;
const char kInfiniteSessionRestore_MaxTimeSinceLastUseToRestore[] = constexpr base::FeatureParam<int>
"MaxTimeSinceLastUseToRestore"; InfiniteSessionRestoreParams::kMaxTimeSinceLastUseToRestore;
const char kInfiniteSessionRestore_MinSiteEngagementToRestore[] = constexpr base::FeatureParam<int>
"MinSiteEngagementToRestore"; InfiniteSessionRestoreParams::kMinSiteEngagementToRestore;
// Default values for ProactiveTabFreezeAndDiscardParams.
const bool kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardDefault =
false;
const bool kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeDefault =
false;
const bool
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceDefault =
true;
// 50% of people cap out at 4 tabs, so for them proactive discarding won't even
// be invoked. See Tabs.MaxTabsInADay.
// TODO(chrisha): This should eventually be informed by the number of tabs
// typically used over a given time horizon (metric being developed).
const uint32_t kProactiveTabFreezeAndDiscard_LowLoadedTabCountDefault = 4;
// Testing in the lab shows that 2GB devices suffer beyond 6 tabs, and 4GB
// devices suffer beyond about 12 tabs. As a very simple first step, we'll aim
// at allowing 3 tabs per GB of RAM on a system before proactive discarding
// kicks in. This is a system resource dependent max, which is combined with the
// DefaultMaxLoadedTabCount to determine the max on a system.
const uint32_t kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamDefault =
3;
// 99.9% of people cap out with fewer than this number, so only 0.1% of the
// population should ever encounter proactive discarding based on this cap.
const uint32_t kProactiveTabFreezeAndDiscard_HighLoadedTabCountDefault = 100;
// Current discarding uses 10 minutes as a minimum cap. This uses exponentially
// increasing timeouts beyond that.
const base::TimeDelta kProactiveTabFreezeAndDiscard_LowOccludedTimeoutDefault =
base::TimeDelta::FromHours(6);
const base::TimeDelta
kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutDefault =
base::TimeDelta::FromHours(1);
const base::TimeDelta kProactiveTabFreezeAndDiscard_HighOccludedTimeoutDefault =
base::TimeDelta::FromMinutes(10);
const base::TimeDelta kProactiveTabFreezeAndDiscard_FreezeTimeoutDefault =
base::TimeDelta::FromMinutes(10);
const base::TimeDelta kProactiveTabFreezeAndDiscard_UnfreezeTimeoutDefault =
base::TimeDelta::FromMinutes(15);
const base::TimeDelta kProactiveTabFreezeAndDiscard_RefreezeTimeoutDefault =
base::TimeDelta::FromSeconds(10);
// Default values for SiteCharacteristicsDatabaseParams.
//
// Observations windows have a default value of 2 hours, 95% of backgrounded
// tabs don't use any of these features in this time window.
const base::TimeDelta
kSiteCharacteristicsDb_FaviconUpdateObservationWindow_Default =
base::TimeDelta::FromHours(2);
const base::TimeDelta
kSiteCharacteristicsDb_TitleUpdateObservationWindow_Default =
base::TimeDelta::FromHours(2);
const base::TimeDelta
kSiteCharacteristicsDb_AudioUsageObservationWindow_Default =
base::TimeDelta::FromHours(2);
const base::TimeDelta
kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default =
base::TimeDelta::FromHours(2);
// TODO(sebmarchand): Get some real-world data and choose an appropriate value
// here.
const base::TimeDelta
kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod_Default =
base::TimeDelta::FromSeconds(20);
const base::TimeDelta kSiteCharacteristicsDb_AudioUsageGracePeriod_Default =
base::TimeDelta::FromSeconds(10);
// Default values for infinite session restore feature. Many of these are taken
// from thin air, but others are motivated by existing metrics.
const uint32_t kInfiniteSessionRestore_MinSimultaneousTabLoadsDefault = 1;
const uint32_t kInfiniteSessionRestore_MaxSimultaneousTabLoadsDefault = 4;
const uint32_t kInfiniteSessionRestore_CoresPerSimultaneousTabLoadDefault = 2;
const uint32_t kInfiniteSessionRestore_MinTabsToRestoreDefault = 4;
const uint32_t kInfiniteSessionRestore_MaxTabsToRestoreDefault = 20;
// This is the 75th percentile of Memory.Renderer.PrivateMemoryFootprint.
const uint32_t kInfiniteSessionRestore_MbFreeMemoryPerTabToRestoreDefault = 150;
// This is the 75th percentile of SessionRestore.RestoredTab.TimeSinceActive.
const base::TimeDelta
kInfiniteSessionRestore_MaxTimeSinceLastUseToRestoreDefault =
base::TimeDelta::FromHours(6);
// Taken from an informal survey of Googlers on min engagement of things they
// think *must* load. Note that about 25% of session-restore tabs fall above
// this threshold (see SessionRestore.RestoredTab.SiteEngagementScore).
const uint32_t kInfiniteSessionRestore_MinSiteEngagementToRestoreDefault = 15;
ProactiveTabFreezeAndDiscardParams::ProactiveTabFreezeAndDiscardParams() = ProactiveTabFreezeAndDiscardParams::ProactiveTabFreezeAndDiscardParams() =
default; default;
...@@ -240,74 +154,44 @@ ProactiveTabFreezeAndDiscardParams GetProactiveTabFreezeAndDiscardParams( ...@@ -240,74 +154,44 @@ ProactiveTabFreezeAndDiscardParams GetProactiveTabFreezeAndDiscardParams(
int memory_in_gb) { int memory_in_gb) {
ProactiveTabFreezeAndDiscardParams params = {}; ProactiveTabFreezeAndDiscardParams params = {};
params.should_proactively_discard = base::GetFieldTrialParamByFeatureAsBool( params.should_proactively_discard =
features::kProactiveTabFreezeAndDiscard, ProactiveTabFreezeAndDiscardParams::kShouldProactivelyDiscard.Get();
kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam,
kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardDefault);
params.should_periodically_unfreeze = base::GetFieldTrialParamByFeatureAsBool( params.should_periodically_unfreeze =
features::kProactiveTabFreezeAndDiscard, ProactiveTabFreezeAndDiscardParams::kShouldPeriodicallyUnfreeze.Get();
kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeParam,
kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeDefault);
params.should_protect_tabs_sharing_browsing_instance = params.should_protect_tabs_sharing_browsing_instance =
base::GetFieldTrialParamByFeatureAsBool( ProactiveTabFreezeAndDiscardParams::
features::kProactiveTabFreezeAndDiscard, kShouldProtectTabsSharingBrowsingInstance.Get();
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceParam,
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceDefault);
params.low_loaded_tab_count = base::GetFieldTrialParamByFeatureAsInt( params.low_loaded_tab_count =
features::kProactiveTabFreezeAndDiscard, ProactiveTabFreezeAndDiscardParams::kLowLoadedTabCount.Get();
kProactiveTabFreezeAndDiscard_LowLoadedTabCountParam,
kProactiveTabFreezeAndDiscard_LowLoadedTabCountDefault);
params.high_loaded_tab_count = base::GetFieldTrialParamByFeatureAsInt( params.high_loaded_tab_count =
features::kProactiveTabFreezeAndDiscard, ProactiveTabFreezeAndDiscardParams::kHighLoadedTabCount.Get();
kProactiveTabFreezeAndDiscard_HighLoadedTabCountParam,
kProactiveTabFreezeAndDiscard_HighLoadedTabCountDefault);
// |moderate_loaded_tab_count| determined after |high_loaded_tab_count| so it // |moderate_loaded_tab_count| determined after |high_loaded_tab_count| so it
// can be enforced that it is lower than |high_loaded_tab_count|. // can be enforced that it is lower than |high_loaded_tab_count|.
params.moderate_loaded_tab_count = params.moderate_loaded_tab_count =
GetModerateThresholdTabCountBasedOnSystemMemory(&params, memory_in_gb); GetModerateThresholdTabCountBasedOnSystemMemory(&params, memory_in_gb);
params.low_occluded_timeout = params.low_occluded_timeout = base::TimeDelta::FromSeconds(
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt( ProactiveTabFreezeAndDiscardParams::kLowOccludedTimeout.Get());
features::kProactiveTabFreezeAndDiscard,
kProactiveTabFreezeAndDiscard_LowOccludedTimeoutParam, params.moderate_occluded_timeout = base::TimeDelta::FromSeconds(
kProactiveTabFreezeAndDiscard_LowOccludedTimeoutDefault.InSeconds())); ProactiveTabFreezeAndDiscardParams::kModerateOccludedTimeout.Get());
params.moderate_occluded_timeout = params.high_occluded_timeout = base::TimeDelta::FromSeconds(
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt( ProactiveTabFreezeAndDiscardParams::kHighOccludedTimeout.Get());
features::kProactiveTabFreezeAndDiscard,
kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutParam, params.freeze_timeout = base::TimeDelta::FromSeconds(
kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutDefault ProactiveTabFreezeAndDiscardParams::kFreezeTimeout.Get());
.InSeconds()));
params.unfreeze_timeout = base::TimeDelta::FromSeconds(
params.high_occluded_timeout = ProactiveTabFreezeAndDiscardParams::kUnfreezeTimeout.Get());
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kProactiveTabFreezeAndDiscard, params.refreeze_timeout = base::TimeDelta::FromSeconds(
kProactiveTabFreezeAndDiscard_HighOccludedTimeoutParam, ProactiveTabFreezeAndDiscardParams::kRefreezeTimeout.Get());
kProactiveTabFreezeAndDiscard_HighOccludedTimeoutDefault
.InSeconds()));
params.freeze_timeout =
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kProactiveTabFreezeAndDiscard,
kProactiveTabFreezeAndDiscard_FreezeTimeoutParam,
kProactiveTabFreezeAndDiscard_FreezeTimeoutDefault.InSeconds()));
params.unfreeze_timeout =
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kProactiveTabFreezeAndDiscard,
kProactiveTabFreezeAndDiscard_UnfreezeTimeoutParam,
kProactiveTabFreezeAndDiscard_UnfreezeTimeoutDefault.InSeconds()));
params.refreeze_timeout =
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kProactiveTabFreezeAndDiscard,
kProactiveTabFreezeAndDiscard_RefreezeTimeoutParam,
kProactiveTabFreezeAndDiscard_RefreezeTimeoutDefault.InSeconds()));
return params; return params;
} }
...@@ -339,46 +223,25 @@ base::TimeDelta GetTabLoadTimeout(const base::TimeDelta& default_timeout) { ...@@ -339,46 +223,25 @@ base::TimeDelta GetTabLoadTimeout(const base::TimeDelta& default_timeout) {
SiteCharacteristicsDatabaseParams GetSiteCharacteristicsDatabaseParams() { SiteCharacteristicsDatabaseParams GetSiteCharacteristicsDatabaseParams() {
SiteCharacteristicsDatabaseParams params = {}; SiteCharacteristicsDatabaseParams params = {};
params.favicon_update_observation_window = params.favicon_update_observation_window = base::TimeDelta::FromSeconds(
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt( SiteCharacteristicsDatabaseParams::kFaviconUpdateObservationWindow.Get());
features::kSiteCharacteristicsDatabase,
kSiteCharacteristicsDb_FaviconUpdateObservationWindow, params.title_update_observation_window = base::TimeDelta::FromSeconds(
kSiteCharacteristicsDb_FaviconUpdateObservationWindow_Default SiteCharacteristicsDatabaseParams::kTitleUpdateObservationWindow.Get());
.InSeconds()));
params.audio_usage_observation_window = base::TimeDelta::FromSeconds(
params.title_update_observation_window = SiteCharacteristicsDatabaseParams::kAudioUsageObservationWindow.Get());
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kSiteCharacteristicsDatabase, params.notifications_usage_observation_window = base::TimeDelta::FromSeconds(
kSiteCharacteristicsDb_TitleUpdateObservationWindow, SiteCharacteristicsDatabaseParams::kNotificationsUsageObservationWindow
kSiteCharacteristicsDb_TitleUpdateObservationWindow_Default .Get());
.InSeconds()));
params.title_or_favicon_change_grace_period = base::TimeDelta::FromSeconds(
params.audio_usage_observation_window = SiteCharacteristicsDatabaseParams::kTitleOrFaviconChangeGracePeriod
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt( .Get());
features::kSiteCharacteristicsDatabase,
kSiteCharacteristicsDb_AudioUsageObservationWindow, params.audio_usage_grace_period = base::TimeDelta::FromSeconds(
kSiteCharacteristicsDb_AudioUsageObservationWindow_Default SiteCharacteristicsDatabaseParams::kAudioUsageGracePeriod.Get());
.InSeconds()));
params.notifications_usage_observation_window =
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kSiteCharacteristicsDatabase,
kSiteCharacteristicsDb_NotificationsUsageObservationWindow,
kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default
.InSeconds()));
params.title_or_favicon_change_grace_period =
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kSiteCharacteristicsDatabase,
kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod,
kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod_Default
.InSeconds()));
params.audio_usage_grace_period =
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kSiteCharacteristicsDatabase,
kSiteCharacteristicsDb_AudioUsageGracePeriod,
kSiteCharacteristicsDb_AudioUsageGracePeriod_Default.InSeconds()));
return params; return params;
} }
...@@ -393,43 +256,22 @@ GetStaticSiteCharacteristicsDatabaseParams() { ...@@ -393,43 +256,22 @@ GetStaticSiteCharacteristicsDatabaseParams() {
InfiniteSessionRestoreParams GetInfiniteSessionRestoreParams() { InfiniteSessionRestoreParams GetInfiniteSessionRestoreParams() {
InfiniteSessionRestoreParams params = {}; InfiniteSessionRestoreParams params = {};
params.min_simultaneous_tab_loads = base::GetFieldTrialParamByFeatureAsInt( params.min_simultaneous_tab_loads =
features::kInfiniteSessionRestore, InfiniteSessionRestoreParams::kMinSimultaneousTabLoads.Get();
kInfiniteSessionRestore_MinSimultaneousTabLoads, params.max_simultaneous_tab_loads =
kInfiniteSessionRestore_MinSimultaneousTabLoadsDefault); InfiniteSessionRestoreParams::kMaxSimultaneousTabLoads.Get();
params.max_simultaneous_tab_loads = base::GetFieldTrialParamByFeatureAsInt(
features::kInfiniteSessionRestore,
kInfiniteSessionRestore_MaxSimultaneousTabLoads,
kInfiniteSessionRestore_MaxSimultaneousTabLoadsDefault);
params.cores_per_simultaneous_tab_load = params.cores_per_simultaneous_tab_load =
base::GetFieldTrialParamByFeatureAsInt( InfiniteSessionRestoreParams::kCoresPerSimultaneousTabLoad.Get();
features::kInfiniteSessionRestore, params.min_tabs_to_restore =
kInfiniteSessionRestore_CoresPerSimultaneousTabLoad, InfiniteSessionRestoreParams::kMinTabsToRestore.Get();
kInfiniteSessionRestore_CoresPerSimultaneousTabLoadDefault); params.max_tabs_to_restore =
params.min_tabs_to_restore = base::GetFieldTrialParamByFeatureAsInt( InfiniteSessionRestoreParams::kMaxTabsToRestore.Get();
features::kInfiniteSessionRestore,
kInfiniteSessionRestore_MinTabsToRestore,
kInfiniteSessionRestore_MinTabsToRestoreDefault);
params.max_tabs_to_restore = base::GetFieldTrialParamByFeatureAsInt(
features::kInfiniteSessionRestore,
kInfiniteSessionRestore_MaxTabsToRestore,
kInfiniteSessionRestore_MaxTabsToRestoreDefault);
params.mb_free_memory_per_tab_to_restore = params.mb_free_memory_per_tab_to_restore =
base::GetFieldTrialParamByFeatureAsInt( InfiniteSessionRestoreParams::kMbFreeMemoryPerTabToRestore.Get();
features::kInfiniteSessionRestore, params.max_time_since_last_use_to_restore = base::TimeDelta::FromSeconds(
kInfiniteSessionRestore_MbFreeMemoryPerTabToRestore, InfiniteSessionRestoreParams::kMaxTimeSinceLastUseToRestore.Get());
kInfiniteSessionRestore_MbFreeMemoryPerTabToRestoreDefault);
params.max_time_since_last_use_to_restore =
base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
features::kInfiniteSessionRestore,
kInfiniteSessionRestore_MaxTimeSinceLastUseToRestore,
kInfiniteSessionRestore_MaxTimeSinceLastUseToRestoreDefault
.InSeconds()));
params.min_site_engagement_to_restore = params.min_site_engagement_to_restore =
base::GetFieldTrialParamByFeatureAsInt( InfiniteSessionRestoreParams::kMinSiteEngagementToRestore.Get();
features::kInfiniteSessionRestore,
kInfiniteSessionRestore_MinSiteEngagementToRestore,
kInfiniteSessionRestore_MinSiteEngagementToRestoreDefault);
return params; return params;
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CHROME_BROWSER_RESOURCE_COORDINATOR_TAB_MANAGER_FEATURES_H_ #define CHROME_BROWSER_RESOURCE_COORDINATOR_TAB_MANAGER_FEATURES_H_
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "base/no_destructor.h" #include "base/no_destructor.h"
#include "base/sys_info.h" #include "base/sys_info.h"
#include "base/time/time.h" #include "base/time/time.h"
...@@ -24,101 +25,6 @@ extern const base::Feature kTabRanker; ...@@ -24,101 +25,6 @@ extern const base::Feature kTabRanker;
namespace resource_coordinator { namespace resource_coordinator {
// The name of the ProactiveTabFreezeAndDiscard feature.
extern const char kProactiveTabFreezeAndDiscardFeatureName[];
// Variations parameter names related to proactive discarding.
// See ProactiveTabFreezeAndDiscardsParams for details.
//
// TODO(sebmarchand): Use the base::FeatureParam API here.
extern const char kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam[];
extern const char
kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeParam[];
extern const char
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceParam
[];
extern const char kProactiveTabFreezeAndDiscard_LowLoadedTabCountParam[];
extern const char
kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamParam[];
extern const char kProactiveTabFreezeAndDiscard_HighLoadedTabCountParam[];
extern const char kProactiveTabFreezeAndDiscard_LowOccludedTimeoutParam[];
extern const char kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutParam[];
extern const char kProactiveTabFreezeAndDiscard_HighOccludedTimeoutParam[];
extern const char kProactiveTabFreezeAndDiscard_FreezeTimeoutParam[];
extern const char kProactiveTabFreezeAndDiscard_UnfreezeTimeoutParam[];
extern const char kProactiveTabFreezeAndDiscard_RefreezeTimeoutParam[];
// Variations parameter names related to the site characteristics database.
// See ProactiveTabFreezeAndDiscardsParams for details.
extern const char kSiteCharacteristicsDb_FaviconUpdateObservationWindow[];
extern const char kSiteCharacteristicsDb_TitleUpdateObservationWindow[];
extern const char kSiteCharacteristicsDb_AudioUsageObservationWindow[];
extern const char kSiteCharacteristicsDb_NotificationsUsageObservationWindow[];
extern const char kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod[];
extern const char kSiteCharacteristicsDb_AudioUsageGracePeriod[];
// Variation parameter names related to infinite session restore.
extern const char kInfiniteSessionRestore_MinSimultaneousTabLoads[];
extern const char kInfiniteSessionRestore_MaxSimultaneousTabLoads[];
extern const char kInfiniteSessionRestore_CoresPerSimultaneousTabLoad[];
extern const char kInfiniteSessionRestore_MinTabsToRestore[];
extern const char kInfiniteSessionRestore_MaxTabsToRestore[];
extern const char kInfiniteSessionRestore_MbFreeMemoryPerTabToRestore[];
// This is expressed in seconds.
extern const char kInfiniteSessionRestore_MaxTimeSinceLastUseToRestore[];
extern const char kInfiniteSessionRestore_MinSiteEngagementToRestore[];
// Default values of parameters related to the site characteristics database.
// See ProactiveTabFreezeAndDiscardsParams for details.
extern const bool kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardDefault;
extern const bool
kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeDefault;
extern const bool
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceDefault;
extern const uint32_t kProactiveTabFreezeAndDiscard_LowLoadedTabCountDefault;
extern const uint32_t
kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamDefault;
extern const uint32_t kProactiveTabFreezeAndDiscard_HighLoadedTabCountDefault;
extern const base::TimeDelta
kProactiveTabFreezeAndDiscard_LowOccludedTimeoutDefault;
extern const base::TimeDelta
kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutDefault;
extern const base::TimeDelta
kProactiveTabFreezeAndDiscard_HighOccludedTimeoutDefault;
extern const base::TimeDelta kProactiveTabFreezeAndDiscard_FreezeTimeoutDefault;
extern const base::TimeDelta
kProactiveTabFreezeAndDiscard_UnfreezeTimeoutDefault;
extern const base::TimeDelta
kProactiveTabFreezeAndDiscard_RefreezeTimeoutDefault;
// Default values of parameters related to the site characteristics database.
// See SiteCharacteristicsDatabaseParams for details.
extern const base::TimeDelta
kSiteCharacteristicsDb_FaviconUpdateObservationWindow_Default;
extern const base::TimeDelta
kSiteCharacteristicsDb_TitleUpdateObservationWindow_Default;
extern const base::TimeDelta
kSiteCharacteristicsDb_AudioUsageObservationWindow_Default;
extern const base::TimeDelta
kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default;
extern const base::TimeDelta
kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod_Default;
extern const base::TimeDelta
kSiteCharacteristicsDb_AudioUsageGracePeriod_Default;
// Default values for infinite session restore feature.
extern const uint32_t kInfiniteSessionRestore_MinSimultaneousTabLoadsDefault;
extern const uint32_t kInfiniteSessionRestore_MaxSimultaneousTabLoadsDefault;
extern const uint32_t
kInfiniteSessionRestore_CoresPerSimultaneousTabLoadDefault;
extern const uint32_t kInfiniteSessionRestore_MinTabsToRestoreDefault;
extern const uint32_t kInfiniteSessionRestore_MaxTabsToRestoreDefault;
extern const uint32_t
kInfiniteSessionRestore_MbFreeMemoryPerTabToRestoreDefault;
extern const base::TimeDelta
kInfiniteSessionRestore_MaxTimeSinceLastUseToRestoreDefault;
extern const uint32_t kInfiniteSessionRestore_MinSiteEngagementToRestoreDefault;
// Parameters used by the proactive tab discarding feature. // Parameters used by the proactive tab discarding feature.
// //
// Proactive discarding has 5 key parameters: // Proactive discarding has 5 key parameters:
...@@ -159,6 +65,59 @@ struct ProactiveTabFreezeAndDiscardParams { ...@@ -159,6 +65,59 @@ struct ProactiveTabFreezeAndDiscardParams {
ProactiveTabFreezeAndDiscardParams( ProactiveTabFreezeAndDiscardParams(
const ProactiveTabFreezeAndDiscardParams& rhs); const ProactiveTabFreezeAndDiscardParams& rhs);
// Static definition of the different parameters that can be used by this
// feature.
static constexpr base::FeatureParam<bool> kShouldProactivelyDiscard{
&features::kProactiveTabFreezeAndDiscard, "ShouldProactivelyDiscard",
false};
static constexpr base::FeatureParam<bool> kShouldPeriodicallyUnfreeze{
&features::kProactiveTabFreezeAndDiscard, "ShouldPeriodicallyUnfreeze",
false};
static constexpr base::FeatureParam<bool>
kShouldProtectTabsSharingBrowsingInstance{
&features::kProactiveTabFreezeAndDiscard,
"ShouldProtectTabsSharingBrowsingInstance", true};
// 50% of people cap out at 4 tabs, so for them proactive discarding won't
// even be invoked. See Tabs.MaxTabsInADay.
// TODO(chrisha): This should eventually be informed by the number of tabs
// typically used over a given time horizon (metric being developed).
static constexpr base::FeatureParam<int> kLowLoadedTabCount{
&features::kProactiveTabFreezeAndDiscard, "LowLoadedTabCount", 4};
// Testing in the lab shows that 2GB devices suffer beyond 6 tabs, and 4GB
// devices suffer beyond about 12 tabs. As a very simple first step, we'll aim
// at allowing 3 tabs per GB of RAM on a system before proactive discarding
// kicks in. This is a system resource dependent max, which is combined with
// the DefaultMaxLoadedTabCount to determine the max on a system.
static constexpr base::FeatureParam<int> kModerateLoadedTabsPerGbRam{
&features::kProactiveTabFreezeAndDiscard, "ModerateLoadedTabsPerGbRam",
3};
// 99.9% of people cap out with fewer than this number, so only 0.1% of the
// population should ever encounter proactive discarding based on this cap.
static constexpr base::FeatureParam<int> kHighLoadedTabCount{
&features::kProactiveTabFreezeAndDiscard, "HighLoadedTabCount", 100};
// Current discarding uses 10 minutes as a minimum cap. This uses
// exponentially increasing timeouts beyond that.
static constexpr base::FeatureParam<int> kLowOccludedTimeout{
&features::kProactiveTabFreezeAndDiscard, "LowOccludedTimeoutSeconds",
base::TimeDelta::FromHours(6).InSeconds()};
static constexpr base::FeatureParam<int> kModerateOccludedTimeout{
&features::kProactiveTabFreezeAndDiscard,
"ModerateOccludedTimeoutSeconds",
base::TimeDelta::FromHours(1).InSeconds()};
static constexpr base::FeatureParam<int> kHighOccludedTimeout{
&features::kProactiveTabFreezeAndDiscard, "HighOccludedTimeoutSeconds",
static_cast<int>(base::TimeDelta::FromMinutes(10).InSeconds())};
static constexpr base::FeatureParam<int> kFreezeTimeout{
&features::kProactiveTabFreezeAndDiscard, "FreezeTimeout",
base::TimeDelta::FromMinutes(10).InSeconds()};
static constexpr base::FeatureParam<int> kUnfreezeTimeout{
&features::kProactiveTabFreezeAndDiscard, "UnfreezeTimeout",
base::TimeDelta::FromMinutes(15).InSeconds()};
static constexpr base::FeatureParam<int> kRefreezeTimeout{
&features::kProactiveTabFreezeAndDiscard, "RefreezeTimeout",
base::TimeDelta::FromMinutes(10).InSeconds()};
// Whether tabs should be proactively discarded. When the // Whether tabs should be proactively discarded. When the
// |kProactiveTabFreezeAndDiscard| feature is enabled and this is false, only // |kProactiveTabFreezeAndDiscard| feature is enabled and this is false, only
// proactive tab freezing happens. // proactive tab freezing happens.
...@@ -214,6 +173,31 @@ struct SiteCharacteristicsDatabaseParams { ...@@ -214,6 +173,31 @@ struct SiteCharacteristicsDatabaseParams {
SiteCharacteristicsDatabaseParams( SiteCharacteristicsDatabaseParams(
const SiteCharacteristicsDatabaseParams& rhs); const SiteCharacteristicsDatabaseParams& rhs);
// Static definition of the different parameters that can be used by this
// feature.
// Observations windows have a default value of 2 hours, 95% of backgrounded
// tabs don't use any of these features in this time window.
static constexpr base::FeatureParam<int> kFaviconUpdateObservationWindow{
&features::kSiteCharacteristicsDatabase, "FaviconUpdateObservationWindow",
base::TimeDelta::FromHours(2).InSeconds()};
static constexpr base::FeatureParam<int> kTitleUpdateObservationWindow{
&features::kSiteCharacteristicsDatabase, "TitleUpdateObservationWindow",
base::TimeDelta::FromHours(2).InSeconds()};
static constexpr base::FeatureParam<int> kAudioUsageObservationWindow{
&features::kSiteCharacteristicsDatabase, "AudioUsageObservationWindow",
base::TimeDelta::FromHours(2).InSeconds()};
static constexpr base::FeatureParam<int> kNotificationsUsageObservationWindow{
&features::kSiteCharacteristicsDatabase,
"NotificationsUsageObservationWindow",
base::TimeDelta::FromHours(2).InSeconds()};
static constexpr base::FeatureParam<int> kTitleOrFaviconChangeGracePeriod{
&features::kSiteCharacteristicsDatabase,
"TitleOrFaviconChangeGracePeriod", 20 /* 20 seconds */};
static constexpr base::FeatureParam<int> kAudioUsageGracePeriod{
&features::kSiteCharacteristicsDatabase, "AudioUsageGracePeriod",
10 /* 10 seconds */};
// Minimum observation window before considering that this website doesn't // Minimum observation window before considering that this website doesn't
// update its favicon while in background. // update its favicon while in background.
base::TimeDelta favicon_update_observation_window; base::TimeDelta favicon_update_observation_window;
...@@ -243,6 +227,32 @@ struct InfiniteSessionRestoreParams { ...@@ -243,6 +227,32 @@ struct InfiniteSessionRestoreParams {
InfiniteSessionRestoreParams(); InfiniteSessionRestoreParams();
InfiniteSessionRestoreParams(const InfiniteSessionRestoreParams& rhs); InfiniteSessionRestoreParams(const InfiniteSessionRestoreParams& rhs);
// Static definition of the different parameters that can be used by this
// feature.
static constexpr base::FeatureParam<int> kMinSimultaneousTabLoads{
&features::kInfiniteSessionRestore, "MinSimultaneousTabLoads", 1};
static constexpr base::FeatureParam<int> kMaxSimultaneousTabLoads{
&features::kInfiniteSessionRestore, "MaxSimultaneousTabLoads", 4};
static constexpr base::FeatureParam<int> kCoresPerSimultaneousTabLoad{
&features::kInfiniteSessionRestore, "CoresPerSimultaneousTabLoad", 2};
static constexpr base::FeatureParam<int> kMinTabsToRestore{
&features::kInfiniteSessionRestore, "MinTabsToRestore", 4};
static constexpr base::FeatureParam<int> kMaxTabsToRestore{
&features::kInfiniteSessionRestore, "MaxTabsToRestore", 20};
// This is the 75th percentile of Memory.Renderer.PrivateMemoryFootprint.
static constexpr base::FeatureParam<int> kMbFreeMemoryPerTabToRestore{
&features::kInfiniteSessionRestore, "MbFreeMemoryPerTabToRestore", 150};
// This is the 75th percentile of SessionRestore.RestoredTab.TimeSinceActive.
static constexpr base::FeatureParam<int> kMaxTimeSinceLastUseToRestore{
&features::kInfiniteSessionRestore, "MaxTimeSinceLastUseToRestore",
base::TimeDelta::FromHours(6).InSeconds()};
// Taken from an informal survey of Googlers on min engagement of things they
// think *must* load. Note that about 25% of session-restore tabs fall above
// this threshold (see SessionRestore.RestoredTab.SiteEngagementScore).
static constexpr base::FeatureParam<int> kMinSiteEngagementToRestore{
&features::kInfiniteSessionRestore, "MinSiteEngagementToRestore", 15};
// Parameters directly retrieved from the experiment configuration. // Parameters directly retrieved from the experiment configuration.
// The minimum number of tabs to ever load simultaneously. This can be // The minimum number of tabs to ever load simultaneously. This can be
......
...@@ -137,41 +137,73 @@ class TabManagerFeaturesTest : public testing::Test { ...@@ -137,41 +137,73 @@ class TabManagerFeaturesTest : public testing::Test {
void ExpectDefaultProactiveTabFreezeAndDiscardParams() { void ExpectDefaultProactiveTabFreezeAndDiscardParams() {
int memory_in_gb = 4; int memory_in_gb = 4;
ExpectProactiveTabFreezeAndDiscardParams( ExpectProactiveTabFreezeAndDiscardParams(
kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardDefault, ProactiveTabFreezeAndDiscardParams::kShouldProactivelyDiscard
kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeDefault, .default_value,
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceDefault, ProactiveTabFreezeAndDiscardParams::kShouldPeriodicallyUnfreeze
kProactiveTabFreezeAndDiscard_LowLoadedTabCountDefault, .default_value,
kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamDefault * ProactiveTabFreezeAndDiscardParams::
kShouldProtectTabsSharingBrowsingInstance.default_value,
ProactiveTabFreezeAndDiscardParams::kLowLoadedTabCount.default_value,
ProactiveTabFreezeAndDiscardParams::kModerateLoadedTabsPerGbRam
.default_value *
memory_in_gb, memory_in_gb,
kProactiveTabFreezeAndDiscard_HighLoadedTabCountDefault, memory_in_gb, ProactiveTabFreezeAndDiscardParams::kHighLoadedTabCount.default_value,
kProactiveTabFreezeAndDiscard_LowOccludedTimeoutDefault, memory_in_gb,
kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutDefault, base::TimeDelta::FromSeconds(
kProactiveTabFreezeAndDiscard_HighOccludedTimeoutDefault, ProactiveTabFreezeAndDiscardParams::kLowOccludedTimeout
kProactiveTabFreezeAndDiscard_FreezeTimeoutDefault, .default_value),
kProactiveTabFreezeAndDiscard_UnfreezeTimeoutDefault, base::TimeDelta::FromSeconds(
kProactiveTabFreezeAndDiscard_RefreezeTimeoutDefault); ProactiveTabFreezeAndDiscardParams::kModerateOccludedTimeout
.default_value),
base::TimeDelta::FromSeconds(
ProactiveTabFreezeAndDiscardParams::kHighOccludedTimeout
.default_value),
base::TimeDelta::FromSeconds(
ProactiveTabFreezeAndDiscardParams::kFreezeTimeout.default_value),
base::TimeDelta::FromSeconds(
ProactiveTabFreezeAndDiscardParams::kUnfreezeTimeout.default_value),
base::TimeDelta::FromSeconds(
ProactiveTabFreezeAndDiscardParams::kRefreezeTimeout
.default_value));
} }
void ExpectDefaultSiteCharacteristicsDatabaseParams() { void ExpectDefaultSiteCharacteristicsDatabaseParams() {
ExpectSiteCharacteristicsDatabaseParams( ExpectSiteCharacteristicsDatabaseParams(
kSiteCharacteristicsDb_FaviconUpdateObservationWindow_Default, base::TimeDelta::FromSeconds(
kSiteCharacteristicsDb_TitleUpdateObservationWindow_Default, SiteCharacteristicsDatabaseParams::kFaviconUpdateObservationWindow
kSiteCharacteristicsDb_AudioUsageObservationWindow_Default, .default_value),
kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default, base::TimeDelta::FromSeconds(
kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod_Default, SiteCharacteristicsDatabaseParams::kTitleUpdateObservationWindow
kSiteCharacteristicsDb_AudioUsageGracePeriod_Default); .default_value),
base::TimeDelta::FromSeconds(
SiteCharacteristicsDatabaseParams::kAudioUsageObservationWindow
.default_value),
base::TimeDelta::FromSeconds(
SiteCharacteristicsDatabaseParams::
kNotificationsUsageObservationWindow.default_value),
base::TimeDelta::FromSeconds(
SiteCharacteristicsDatabaseParams::kTitleOrFaviconChangeGracePeriod
.default_value),
base::TimeDelta::FromSeconds(
SiteCharacteristicsDatabaseParams::kAudioUsageGracePeriod
.default_value));
} }
void ExpectDefaultInfiniteSessionRestoreParams() { void ExpectDefaultInfiniteSessionRestoreParams() {
ExpectInfiniteSessionRestoreParams( ExpectInfiniteSessionRestoreParams(
kInfiniteSessionRestore_MinSimultaneousTabLoadsDefault, InfiniteSessionRestoreParams::kMinSimultaneousTabLoads.default_value,
kInfiniteSessionRestore_MaxSimultaneousTabLoadsDefault, InfiniteSessionRestoreParams::kMaxSimultaneousTabLoads.default_value,
kInfiniteSessionRestore_CoresPerSimultaneousTabLoadDefault, InfiniteSessionRestoreParams::kCoresPerSimultaneousTabLoad
kInfiniteSessionRestore_MinTabsToRestoreDefault, .default_value,
kInfiniteSessionRestore_MaxTabsToRestoreDefault, InfiniteSessionRestoreParams::kMinTabsToRestore.default_value,
kInfiniteSessionRestore_MbFreeMemoryPerTabToRestoreDefault, InfiniteSessionRestoreParams::kMaxTabsToRestore.default_value,
kInfiniteSessionRestore_MaxTimeSinceLastUseToRestoreDefault, InfiniteSessionRestoreParams::kMbFreeMemoryPerTabToRestore
kInfiniteSessionRestore_MinSiteEngagementToRestoreDefault); .default_value,
base::TimeDelta::FromSeconds(
InfiniteSessionRestoreParams::kMaxTimeSinceLastUseToRestore
.default_value),
InfiniteSessionRestoreParams::kMinSiteEngagementToRestore
.default_value);
} }
private: private:
...@@ -195,43 +227,49 @@ TEST_F(TabManagerFeaturesTest, ...@@ -195,43 +227,49 @@ TEST_F(TabManagerFeaturesTest,
TEST_F(TabManagerFeaturesTest, TEST_F(TabManagerFeaturesTest,
GetProactiveTabFreezeAndDiscardParamsInvalidGoesToDefault) { GetProactiveTabFreezeAndDiscardParamsInvalidGoesToDefault) {
SetParam(kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam, "blah"); SetParam(ProactiveTabFreezeAndDiscardParams::kShouldProactivelyDiscard.name,
SetParam(kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeParam,
"blah"); "blah");
SetParam( SetParam(ProactiveTabFreezeAndDiscardParams::kShouldPeriodicallyUnfreeze.name,
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceParam, "blah");
"bleh"); SetParam(ProactiveTabFreezeAndDiscardParams::
SetParam(kProactiveTabFreezeAndDiscard_LowLoadedTabCountParam, "ab"); kShouldProtectTabsSharingBrowsingInstance.name,
SetParam(kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamParam, "bleh");
SetParam(ProactiveTabFreezeAndDiscardParams::kLowLoadedTabCount.name, "ab");
SetParam(ProactiveTabFreezeAndDiscardParams::kModerateLoadedTabsPerGbRam.name,
"27.8"); "27.8");
SetParam(kProactiveTabFreezeAndDiscard_HighLoadedTabCountParam, "4e8"); SetParam(ProactiveTabFreezeAndDiscardParams::kHighLoadedTabCount.name, "4e8");
SetParam(kProactiveTabFreezeAndDiscard_LowOccludedTimeoutParam, "---"); SetParam(ProactiveTabFreezeAndDiscardParams::kLowOccludedTimeout.name, "---");
SetParam(kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutParam, " "); SetParam(ProactiveTabFreezeAndDiscardParams::kModerateOccludedTimeout.name,
SetParam(kProactiveTabFreezeAndDiscard_HighOccludedTimeoutParam, ""); " ");
SetParam(kProactiveTabFreezeAndDiscard_FreezeTimeoutParam, "b"); SetParam(ProactiveTabFreezeAndDiscardParams::kHighOccludedTimeout.name, "");
SetParam(kProactiveTabFreezeAndDiscard_UnfreezeTimeoutParam, "i"); SetParam(ProactiveTabFreezeAndDiscardParams::kFreezeTimeout.name, "b");
SetParam(kProactiveTabFreezeAndDiscard_RefreezeTimeoutParam, "m"); SetParam(ProactiveTabFreezeAndDiscardParams::kUnfreezeTimeout.name, "i");
SetParam(ProactiveTabFreezeAndDiscardParams::kRefreezeTimeout.name, "m");
EnableProactiveTabFreezeAndDiscard(); EnableProactiveTabFreezeAndDiscard();
ExpectDefaultProactiveTabFreezeAndDiscardParams(); ExpectDefaultProactiveTabFreezeAndDiscardParams();
} }
TEST_F(TabManagerFeaturesTest, GetProactiveTabFreezeAndDiscardParams) { TEST_F(TabManagerFeaturesTest, GetProactiveTabFreezeAndDiscardParams) {
SetParam(kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam, "true"); SetParam(ProactiveTabFreezeAndDiscardParams::kShouldProactivelyDiscard.name,
SetParam(kProactiveTabFreezeAndDiscard_ShouldPeriodicallyUnfreezeParam,
"true"); "true");
SetParam( SetParam(ProactiveTabFreezeAndDiscardParams::kShouldPeriodicallyUnfreeze.name,
kProactiveTabFreezeAndDiscard_ShouldProtectTabsSharingBrowsingInstanceParam, "true");
"true"); SetParam(ProactiveTabFreezeAndDiscardParams::
SetParam(kProactiveTabFreezeAndDiscard_LowLoadedTabCountParam, "7"); kShouldProtectTabsSharingBrowsingInstance.name,
SetParam(kProactiveTabFreezeAndDiscard_ModerateLoadedTabsPerGbRamParam, "4"); "true");
SetParam(kProactiveTabFreezeAndDiscard_HighLoadedTabCountParam, "42"); SetParam(ProactiveTabFreezeAndDiscardParams::kLowLoadedTabCount.name, "7");
SetParam(ProactiveTabFreezeAndDiscardParams::kModerateLoadedTabsPerGbRam.name,
"4");
SetParam(ProactiveTabFreezeAndDiscardParams::kHighLoadedTabCount.name, "42");
// These are expressed in seconds. // These are expressed in seconds.
SetParam(kProactiveTabFreezeAndDiscard_LowOccludedTimeoutParam, "60"); SetParam(ProactiveTabFreezeAndDiscardParams::kLowOccludedTimeout.name, "60");
SetParam(kProactiveTabFreezeAndDiscard_ModerateOccludedTimeoutParam, "120"); SetParam(ProactiveTabFreezeAndDiscardParams::kModerateOccludedTimeout.name,
SetParam(kProactiveTabFreezeAndDiscard_HighOccludedTimeoutParam, "247"); "120");
SetParam(kProactiveTabFreezeAndDiscard_FreezeTimeoutParam, "10"); SetParam(ProactiveTabFreezeAndDiscardParams::kHighOccludedTimeout.name,
SetParam(kProactiveTabFreezeAndDiscard_UnfreezeTimeoutParam, "20"); "247");
SetParam(kProactiveTabFreezeAndDiscard_RefreezeTimeoutParam, "30"); SetParam(ProactiveTabFreezeAndDiscardParams::kFreezeTimeout.name, "10");
SetParam(ProactiveTabFreezeAndDiscardParams::kUnfreezeTimeout.name, "20");
SetParam(ProactiveTabFreezeAndDiscardParams::kRefreezeTimeout.name, "30");
EnableProactiveTabFreezeAndDiscard(); EnableProactiveTabFreezeAndDiscard();
// Should snap |moderate_loaded_tab_count| to |low_loaded_tab_count|, when the // Should snap |moderate_loaded_tab_count| to |low_loaded_tab_count|, when the
...@@ -277,24 +315,45 @@ TEST_F(TabManagerFeaturesTest, ...@@ -277,24 +315,45 @@ TEST_F(TabManagerFeaturesTest,
TEST_F(TabManagerFeaturesTest, TEST_F(TabManagerFeaturesTest,
GetSiteCharacteristicsDatabaseParamsInvalidGoesToDefault) { GetSiteCharacteristicsDatabaseParamsInvalidGoesToDefault) {
SetParam(kSiteCharacteristicsDb_FaviconUpdateObservationWindow, " "); SetParam(
SetParam(kSiteCharacteristicsDb_TitleUpdateObservationWindow, "foo"); SiteCharacteristicsDatabaseParams::kFaviconUpdateObservationWindow.name,
SetParam(kSiteCharacteristicsDb_AudioUsageObservationWindow, "."); " ");
SetParam(kSiteCharacteristicsDb_NotificationsUsageObservationWindow, "abc"); SetParam(
SetParam(kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod, "bleh"); SiteCharacteristicsDatabaseParams::kTitleUpdateObservationWindow.name,
SetParam(kSiteCharacteristicsDb_AudioUsageGracePeriod, "!!!"); "foo");
SetParam(SiteCharacteristicsDatabaseParams::kAudioUsageObservationWindow.name,
".");
SetParam(
SiteCharacteristicsDatabaseParams::kNotificationsUsageObservationWindow
.name,
"abc");
SetParam(
SiteCharacteristicsDatabaseParams::kTitleOrFaviconChangeGracePeriod.name,
"bleh");
SetParam(SiteCharacteristicsDatabaseParams::kAudioUsageGracePeriod.name,
"!!!");
EnableSiteCharacteristicsDatabase(); EnableSiteCharacteristicsDatabase();
ExpectDefaultSiteCharacteristicsDatabaseParams(); ExpectDefaultSiteCharacteristicsDatabaseParams();
} }
TEST_F(TabManagerFeaturesTest, GetSiteCharacteristicsDatabaseParams) { TEST_F(TabManagerFeaturesTest, GetSiteCharacteristicsDatabaseParams) {
SetParam(kSiteCharacteristicsDb_FaviconUpdateObservationWindow, "3600"); SetParam(
SetParam(kSiteCharacteristicsDb_TitleUpdateObservationWindow, "36000"); SiteCharacteristicsDatabaseParams::kFaviconUpdateObservationWindow.name,
SetParam(kSiteCharacteristicsDb_AudioUsageObservationWindow, "360000"); "3600");
SetParam(kSiteCharacteristicsDb_NotificationsUsageObservationWindow, SetParam(
"3600000"); SiteCharacteristicsDatabaseParams::kTitleUpdateObservationWindow.name,
SetParam(kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod, "42"); "36000");
SetParam(kSiteCharacteristicsDb_AudioUsageGracePeriod, "43"); SetParam(SiteCharacteristicsDatabaseParams::kAudioUsageObservationWindow.name,
"360000");
SetParam(
SiteCharacteristicsDatabaseParams::kNotificationsUsageObservationWindow
.name,
"3600000");
SetParam(
SiteCharacteristicsDatabaseParams::kTitleOrFaviconChangeGracePeriod.name,
"42");
SetParam(SiteCharacteristicsDatabaseParams::kAudioUsageGracePeriod.name,
"43");
EnableSiteCharacteristicsDatabase(); EnableSiteCharacteristicsDatabase();
...@@ -307,27 +366,34 @@ TEST_F(TabManagerFeaturesTest, GetSiteCharacteristicsDatabaseParams) { ...@@ -307,27 +366,34 @@ TEST_F(TabManagerFeaturesTest, GetSiteCharacteristicsDatabaseParams) {
TEST_F(TabManagerFeaturesTest, TEST_F(TabManagerFeaturesTest,
GetInfiniteSessionRestoreParamsInvalidGoesToDefault) { GetInfiniteSessionRestoreParamsInvalidGoesToDefault) {
SetParam(kInfiniteSessionRestore_MinSimultaneousTabLoads, " "); SetParam(InfiniteSessionRestoreParams::kMinSimultaneousTabLoads.name, " ");
SetParam(kInfiniteSessionRestore_MaxSimultaneousTabLoads, "a.b"); SetParam(InfiniteSessionRestoreParams::kMaxSimultaneousTabLoads.name, "a.b");
SetParam(kInfiniteSessionRestore_CoresPerSimultaneousTabLoad, "-- "); SetParam(InfiniteSessionRestoreParams::kCoresPerSimultaneousTabLoad.name,
SetParam(kInfiniteSessionRestore_MinTabsToRestore, "hey"); "-- ");
SetParam(kInfiniteSessionRestore_MaxTabsToRestore, "."); SetParam(InfiniteSessionRestoreParams::kMinTabsToRestore.name, "hey");
SetParam(kInfiniteSessionRestore_MbFreeMemoryPerTabToRestore, "0x0"); SetParam(InfiniteSessionRestoreParams::kMaxTabsToRestore.name, ".");
SetParam(kInfiniteSessionRestore_MaxTimeSinceLastUseToRestore, "foo"); SetParam(InfiniteSessionRestoreParams::kMbFreeMemoryPerTabToRestore.name,
SetParam(kInfiniteSessionRestore_MinSiteEngagementToRestore, "bar"); "0x0");
SetParam(InfiniteSessionRestoreParams::kMaxTimeSinceLastUseToRestore.name,
"foo");
SetParam(InfiniteSessionRestoreParams::kMinSiteEngagementToRestore.name,
"bar");
EnableInfiniteSessionRestore(); EnableInfiniteSessionRestore();
ExpectDefaultInfiniteSessionRestoreParams(); ExpectDefaultInfiniteSessionRestoreParams();
} }
TEST_F(TabManagerFeaturesTest, GetInfiniteSessionRestoreParams) { TEST_F(TabManagerFeaturesTest, GetInfiniteSessionRestoreParams) {
SetParam(kInfiniteSessionRestore_MinSimultaneousTabLoads, "10"); SetParam(InfiniteSessionRestoreParams::kMinSimultaneousTabLoads.name, "10");
SetParam(kInfiniteSessionRestore_MaxSimultaneousTabLoads, "20"); SetParam(InfiniteSessionRestoreParams::kMaxSimultaneousTabLoads.name, "20");
SetParam(kInfiniteSessionRestore_CoresPerSimultaneousTabLoad, "2"); SetParam(InfiniteSessionRestoreParams::kCoresPerSimultaneousTabLoad.name,
SetParam(kInfiniteSessionRestore_MinTabsToRestore, "13"); "2");
SetParam(kInfiniteSessionRestore_MaxTabsToRestore, "27"); SetParam(InfiniteSessionRestoreParams::kMinTabsToRestore.name, "13");
SetParam(kInfiniteSessionRestore_MbFreeMemoryPerTabToRestore, "1337"); SetParam(InfiniteSessionRestoreParams::kMaxTabsToRestore.name, "27");
SetParam(kInfiniteSessionRestore_MaxTimeSinceLastUseToRestore, "60"); SetParam(InfiniteSessionRestoreParams::kMbFreeMemoryPerTabToRestore.name,
SetParam(kInfiniteSessionRestore_MinSiteEngagementToRestore, "9"); "1337");
SetParam(InfiniteSessionRestoreParams::kMaxTimeSinceLastUseToRestore.name,
"60");
SetParam(InfiniteSessionRestoreParams::kMinSiteEngagementToRestore.name, "9");
EnableInfiniteSessionRestore(); EnableInfiniteSessionRestore();
ExpectInfiniteSessionRestoreParams(10, 20, 2, 13, 27, 1337, ExpectInfiniteSessionRestoreParams(10, 20, 2, 13, 27, 1337,
base::TimeDelta::FromMinutes(1), 9); base::TimeDelta::FromMinutes(1), 9);
......
...@@ -350,16 +350,20 @@ TEST_F(TabLoaderTest, DelegatePolicyIsApplied) { ...@@ -350,16 +350,20 @@ TEST_F(TabLoaderTest, DelegatePolicyIsApplied) {
// it such that there are 2 max simultaneous tab loads, and 3 maximum tabs to // it such that there are 2 max simultaneous tab loads, and 3 maximum tabs to
// restore. // restore.
std::map<std::string, std::string> params; std::map<std::string, std::string> params;
params[rc::kInfiniteSessionRestore_MinSimultaneousTabLoads] = "2"; params[rc::InfiniteSessionRestoreParams::kMinSimultaneousTabLoads.name] = "2";
params[rc::kInfiniteSessionRestore_MaxSimultaneousTabLoads] = "2"; params[rc::InfiniteSessionRestoreParams::kMaxSimultaneousTabLoads.name] = "2";
params[rc::kInfiniteSessionRestore_CoresPerSimultaneousTabLoad] = "0"; params[rc::InfiniteSessionRestoreParams::kCoresPerSimultaneousTabLoad.name] =
params[rc::kInfiniteSessionRestore_MinTabsToRestore] = "1"; "0";
params[rc::kInfiniteSessionRestore_MaxTabsToRestore] = "3"; params[rc::InfiniteSessionRestoreParams::kMinTabsToRestore.name] = "1";
params[rc::InfiniteSessionRestoreParams::kMaxTabsToRestore.name] = "3";
// Disable these policy features. // Disable these policy features.
params[rc::kInfiniteSessionRestore_MbFreeMemoryPerTabToRestore] = "0"; params[rc::InfiniteSessionRestoreParams::kMbFreeMemoryPerTabToRestore.name] =
params[rc::kInfiniteSessionRestore_MaxTimeSinceLastUseToRestore] = "0"; "0";
params[rc::kInfiniteSessionRestore_MinSiteEngagementToRestore] = "0"; params[rc::InfiniteSessionRestoreParams::kMaxTimeSinceLastUseToRestore.name] =
"0";
params[rc::InfiniteSessionRestoreParams::kMinSiteEngagementToRestore.name] =
"0";
variations::testing::VariationParamsManager variations_manager; variations::testing::VariationParamsManager variations_manager;
variations_manager.SetVariationParamsWithFeatureAssociations( variations_manager.SetVariationParamsWithFeatureAssociations(
......
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