Add chrome://flags for probabilistic memory saver

Bug: 1469337
Change-Id: Ib8237520d057205183452fd1936cd4c235a9ab68
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5028300
Commit-Queue: Anthony Vallée-Dubois <anthonyvd@chromium.org>
Reviewed-by: Patrick Monette <pmonette@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1225495}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 337049e..5daa55f 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3439,6 +3439,24 @@
          std::size(kMemorySavingsReportingVeryFrequent), nullptr},
 };
 
+const FeatureEntry::FeatureParam kProbabilisticMemorySaverSimulated[] = {
+    {"proactive_discarding_target_false_positive_percent", "35"},
+    {"proactive_discarding_sampling_interval", "10m"},
+    {"proactive_discarding_simulation_mode", "true"},
+};
+
+const FeatureEntry::FeatureParam kProbabilisticMemorySaverActive[] = {
+    {"proactive_discarding_target_false_positive_percent", "35"},
+    {"proactive_discarding_sampling_interval", "10m"},
+    {"proactive_discarding_simulation_mode", "false"},
+};
+
+const FeatureEntry::FeatureVariation kProbabilisticMemorySaverMode[] = {
+    {"Simulated", kProbabilisticMemorySaverSimulated,
+     std::size(kProbabilisticMemorySaverSimulated), nullptr},
+    {"Active", kProbabilisticMemorySaverActive,
+     std::size(kProbabilisticMemorySaverActive), nullptr},
+};
 #endif  // !BUILDFLAG(IS_ANDROID)
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -10233,6 +10251,14 @@
          kHighEfficiencyMemorySavingsReportingVariations,
          "MemorySavingsReportingImprovements")},
 
+    {"probabilistic-memory-saver",
+     flag_descriptions::kProbabilisticMemorySaverName,
+     flag_descriptions::kProbabilisticMemorySaverDescription, kOsDesktop,
+     FEATURE_WITH_PARAMS_VALUE_TYPE(
+         performance_manager::features::kProbabilisticProactiveDiscarding,
+         kProbabilisticMemorySaverMode,
+         "ProbabilisticProactiveDiscarding")},
+
 #endif
 
     {"webui-omnibox-popup", flag_descriptions::kWebUIOmniboxPopupName,
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index b61f809..66390b26 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -6615,7 +6615,13 @@
     "owners": [ "lyf@chromium.org", "phao@chromium.org", "chrome-security-owp-team@google.com" ],
     "expiry_milestone": 124
   },
-  {    "name": "productivity-launcher",
+  {
+    "name": "probabilistic-memory-saver",
+    "owners": ["chrome-performance-ui-team@google.com"],
+    "expiry_milestone": 125
+  },
+  {
+    "name": "productivity-launcher",
     "owners": [ "cros-system-ui-eng@google.com" ],
     "expiry_milestone": 106
   },
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 9bbebaa..09aa9a1 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -5058,6 +5058,11 @@
     "Omnibox Drive suggestions don't require the user to have enabled Chrome "
     "Sync and are available when all other requirements are met.";
 
+const char kProbabilisticMemorySaverName[] = "Probabilistic Memory Saver Mode";
+const char kProbabilisticMemorySaverDescription[] =
+    "Memory Saver uses some probability distributions to estimate the chance "
+    "of tab revisit based on observations about the tab's state.";
+
 const char kRealboxSecondaryZeroSuggestName[] =
     "Enables showing secondary zero-prefix suggestions in NTP realbox.";
 const char kRealboxSecondaryZeroSuggestDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 4acb7cb..815199c 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2933,6 +2933,9 @@
 extern const char kOmniboxDriveSuggestionsNoSyncRequirementName[];
 extern const char kOmniboxDriveSuggestionsNoSyncRequirementDescription[];
 
+extern const char kProbabilisticMemorySaverName[];
+extern const char kProbabilisticMemorySaverDescription[];
+
 extern const char kRealboxSecondaryZeroSuggestName[];
 extern const char kRealboxSecondaryZeroSuggestDescription[];
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 93b6cfe..0200314 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -34513,6 +34513,7 @@
       label="IncognitoBrandConsistencyForAndroid:disabled"/>
   <int value="-2037280696" label="EcheSWASendStartSignaling:disabled"/>
   <int value="-2036629516" label="SideSearchStatePerTab:enabled"/>
+  <int value="-2036355481" label="ProbabilisticProactiveDiscarding:disabled"/>
   <int value="-2036268747" label="OmniboxExpandedLayout:disabled"/>
   <int value="-2036149591" label="FaviconsFromWebManifest:disabled"/>
   <int value="-2036127998" label="LocalWebApprovals:disabled"/>
@@ -38118,6 +38119,7 @@
   <int value="-324099334" label="HatsUseNewHistograms:disabled"/>
   <int value="-323913169" label="PasswordNotesWithBackup:enabled"/>
   <int value="-323831744" label="token-binding:enabled"/>
+  <int value="-323666431" label="ProbabilisticProactiveDiscarding:enabled"/>
   <int value="-323508281" label="VrWebInputEditing:disabled"/>
   <int value="-322937746" label="disable-desktop-capture-picker-new-ui"/>
   <int value="-322827131" label="tab-management-experiment-type-basil"/>