Skip to content

Commit da7ec36

Browse files
committed
Add new PreloadingPredictor for "eager" viewport heuristics
This CL introduces a new `preloading_predictor` for viewport-based heuristics that operate with "eager" eagerness settings. To differentiate this from the existing viewport predictor (which operates at "moderate" eagerness), the following changes are made: * The existing `preloading_predictor::kViewportHeuristic` is renamed to `kModerateViewportHeuristic`. * A new `preloading_predictor::kEagerViewportHeuristic` is added. * `PreloadingDecider` is updated to configure and handle both predictors independently, associating each with its respective eagerness level and feature flag. Note that the string-serialized name of `kModerateViewportHeuristic` is kept "ViewportHeuristic" for the metrics compatibility. Bug: 436705485 Change-Id: I56591a74dea99bbf6066f5b2b12443ba0d5d9425 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7053023 Commit-Queue: Takashi Nakayama <[email protected]> Reviewed-by: Rakina Zata Amni <[email protected]> Reviewed-by: Hiroki Nakagawa <[email protected]> Cr-Commit-Position: refs/heads/main@{#1532383}
1 parent 55e0899 commit da7ec36

File tree

2 files changed

+38
-13
lines changed

2 files changed

+38
-13
lines changed

content/browser/preloading/preloading_decider.cc

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ bool PredictionOccursInOtherWebContents(
8787
class PreloadingDecider::BehaviorConfig {
8888
public:
8989
BehaviorConfig()
90-
: ml_model_eagerness_{blink::mojom::SpeculationEagerness::kModerate},
90+
: eager_viewport_heuristic_eagerness_{blink::mojom::SpeculationEagerness::
91+
kEager},
92+
ml_model_eagerness_{blink::mojom::SpeculationEagerness::kModerate},
9193
ml_model_enacts_candidates_(
9294
blink::features::kPreloadingModelEnactCandidates.Get()),
9395
ml_model_prefetch_moderate_threshold_{std::clamp(
@@ -116,7 +118,7 @@ class PreloadingDecider::BehaviorConfig {
116118
static const base::FeatureParam<std::string> kViewportHeuristicEagerness{
117119
&blink::features::kPreloadingModerateViewportHeuristics,
118120
"viewport_heuristic_eagerness", "moderate"};
119-
viewport_heuristic_eagerness_ =
121+
moderate_viewport_heuristic_eagerness_ =
120122
EagernessSetFromFeatureParam(kViewportHeuristicEagerness.Get());
121123
}
122124

@@ -126,8 +128,10 @@ class PreloadingDecider::BehaviorConfig {
126128
return pointer_down_eagerness_;
127129
} else if (predictor == preloading_predictor::kUrlPointerHoverOnAnchor) {
128130
return pointer_hover_eagerness_;
129-
} else if (predictor == preloading_predictor::kViewportHeuristic) {
130-
return viewport_heuristic_eagerness_;
131+
} else if (predictor == preloading_predictor::kModerateViewportHeuristic) {
132+
return moderate_viewport_heuristic_eagerness_;
133+
} else if (predictor == preloading_predictor::kEagerViewportHeuristic) {
134+
return eager_viewport_heuristic_eagerness_;
131135
} else if (predictor ==
132136
preloading_predictor::kPreloadingHeuristicsMLModel) {
133137
return ml_model_eagerness_;
@@ -144,7 +148,9 @@ class PreloadingDecider::BehaviorConfig {
144148
return kNoThreshold;
145149
} else if (predictor == preloading_predictor::kUrlPointerHoverOnAnchor) {
146150
return kNoThreshold;
147-
} else if (predictor == preloading_predictor::kViewportHeuristic) {
151+
} else if (predictor == preloading_predictor::kModerateViewportHeuristic) {
152+
return kNoThreshold;
153+
} else if (predictor == preloading_predictor::kEagerViewportHeuristic) {
148154
return kNoThreshold;
149155
} else if (predictor ==
150156
preloading_predictor::kPreloadingHeuristicsMLModel) {
@@ -176,7 +182,8 @@ class PreloadingDecider::BehaviorConfig {
176182

177183
EagernessSet pointer_down_eagerness_;
178184
EagernessSet pointer_hover_eagerness_;
179-
EagernessSet viewport_heuristic_eagerness_;
185+
EagernessSet moderate_viewport_heuristic_eagerness_;
186+
const EagernessSet eager_viewport_heuristic_eagerness_;
180187
const EagernessSet ml_model_eagerness_;
181188
const bool ml_model_enacts_candidates_ = false;
182189
const PreloadingConfidence ml_model_prefetch_moderate_threshold_{
@@ -352,14 +359,16 @@ void PreloadingDecider::OnViewportHeuristicTriggered(const GURL& url) {
352359
"enact_candidates", BUILDFLAG(IS_ANDROID)};
353360
const bool should_enact_candidates = kShouldEnactCandidates.Get();
354361
if (!should_enact_candidates) {
355-
AddPreloadingPrediction(url, preloading_predictor::kViewportHeuristic,
362+
AddPreloadingPrediction(url,
363+
preloading_predictor::kModerateViewportHeuristic,
356364
PreloadingConfidence(100));
357365
return;
358366
}
359367

360-
MaybeEnactCandidate(
361-
url, preloading_predictor::kViewportHeuristic, PreloadingConfidence{100},
362-
/*fallback_to_preconnect=*/false, /*eagerness_to_exclude=*/{});
368+
MaybeEnactCandidate(url, preloading_predictor::kModerateViewportHeuristic,
369+
PreloadingConfidence{100},
370+
/*fallback_to_preconnect=*/false,
371+
/*eagerness_to_exclude=*/{});
363372
}
364373

365374
void PreloadingDecider::MaybeEnactCandidate(
@@ -471,7 +480,12 @@ void PreloadingDecider::UpdateSpeculationCandidates(
471480
if (base::FeatureList::IsEnabled(
472481
blink::features::kPreloadingModerateViewportHeuristics)) {
473482
preloading_data->SetIsNavigationInDomainCallback(
474-
preloading_predictor::kViewportHeuristic, is_new_link_nav);
483+
preloading_predictor::kModerateViewportHeuristic, is_new_link_nav);
484+
}
485+
if (base::FeatureList::IsEnabled(
486+
blink::features::kPreloadingEagerViewportHeuristics)) {
487+
preloading_data->SetIsNavigationInDomainCallback(
488+
preloading_predictor::kEagerViewportHeuristic, is_new_link_nav);
475489
}
476490

477491
// Here we look for all preloading candidates that are safe to perform, but

content/public/browser/preloading.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,19 @@ inline constexpr PreloadingPredictor kPreloadingHeuristicsMLModel(
145145
5,
146146
"PreloadingHeuristicsMLModel");
147147

148-
// Preloading is triggered by a deterministic viewport-based heuristic.
149-
inline constexpr PreloadingPredictor kViewportHeuristic(6, "ViewportHeuristic");
148+
// Preloading is triggered by a deterministic viewport-based heuristic for
149+
// the "moderate" eagerness. Note that this predictor does nothing for the other
150+
// eagerness like "eager" while the name of this predictor is general for
151+
// historical reasons.
152+
inline constexpr PreloadingPredictor kModerateViewportHeuristic(
153+
6,
154+
"ViewportHeuristic");
155+
156+
// Preloading is triggered by a deterministic viewport-based heuristic for
157+
// the "eager" eagerness.
158+
inline constexpr PreloadingPredictor kEagerViewportHeuristic(
159+
7,
160+
"EagerViewportHeuristic");
150161
} // namespace preloading_predictor
151162
// LINT.ThenChange()
152163

0 commit comments

Comments
 (0)