Commit a5cee9f8 authored by Robert Ogden's avatar Robert Ogden Committed by Commit Bot

Add PostTask to starting spare renderer

Adds a configurable delay as well, but by default is zero so that the
spare renderer request happens in the next message loop.

Bug: 1115259
Change-Id: I787cd9cf60c517ea9ac83d28d0484928355007e0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2392766Reviewed-by: default avatarTarun Bansal <tbansal@chromium.org>
Commit-Queue: Robert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#804430}
parent e88e36c3
...@@ -7,13 +7,17 @@ ...@@ -7,13 +7,17 @@
#include <algorithm> #include <algorithm>
#include <vector> #include <vector>
#include "base/bind.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/metrics/field_trial_params.h" #include "base/metrics/field_trial_params.h"
#include "base/system/sys_info.h" #include "base/system/sys_info.h"
#include "base/task/post_task.h"
#include "base/time/default_tick_clock.h" #include "base/time/default_tick_clock.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/search_engines/template_url_service_factory.h"
#include "components/search_engines/template_url_service.h" #include "components/search_engines/template_url_service.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
#include "url/gurl.h" #include "url/gurl.h"
#include "url/origin.h" #include "url/origin.h"
...@@ -58,7 +62,12 @@ NavigationPredictorRendererWarmupClient:: ...@@ -58,7 +62,12 @@ NavigationPredictorRendererWarmupClient::
base::GetFieldTrialParamByFeatureAsInt( base::GetFieldTrialParamByFeatureAsInt(
kNavigationPredictorRendererWarmup, kNavigationPredictorRendererWarmup,
"cooldown_duration_ms", "cooldown_duration_ms",
60 * 1000))) { 60 * 1000))),
renderer_warmup_delay_(base::TimeDelta::FromMilliseconds(
base::GetFieldTrialParamByFeatureAsInt(
kNavigationPredictorRendererWarmup,
"renderer_warmup_delay_ms",
0))) {
if (clock) { if (clock) {
tick_clock_ = clock; tick_clock_ = clock;
} else { } else {
...@@ -197,5 +206,10 @@ void NavigationPredictorRendererWarmupClient::RecordMetricsAndMaybeDoWarmup() { ...@@ -197,5 +206,10 @@ void NavigationPredictorRendererWarmupClient::RecordMetricsAndMaybeDoWarmup() {
return; return;
} }
DoRendererWarmpup(); content::GetUIThreadTaskRunner({})->PostDelayedTask(
FROM_HERE,
base::BindOnce(
&NavigationPredictorRendererWarmupClient::DoRendererWarmpup,
weak_factory_.GetWeakPtr()),
renderer_warmup_delay_);
} }
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CHROME_BROWSER_NAVIGATION_PREDICTOR_NAVIGATION_PREDICTOR_RENDERER_WARMUP_CLIENT_H_ #define CHROME_BROWSER_NAVIGATION_PREDICTOR_NAVIGATION_PREDICTOR_RENDERER_WARMUP_CLIENT_H_
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/time/tick_clock.h" #include "base/time/tick_clock.h"
#include "base/time/time.h" #include "base/time/time.h"
...@@ -88,6 +89,12 @@ class NavigationPredictorRendererWarmupClient ...@@ -88,6 +89,12 @@ class NavigationPredictorRendererWarmupClient
// The amount of time to wait in-between doing a renderer warmup. // The amount of time to wait in-between doing a renderer warmup.
const base::TimeDelta cooldown_duration_; const base::TimeDelta cooldown_duration_;
// The amount of time to delay starting a spare renderer.
const base::TimeDelta renderer_warmup_delay_;
base::WeakPtrFactory<NavigationPredictorRendererWarmupClient> weak_factory_{
this};
DISALLOW_COPY_AND_ASSIGN(NavigationPredictorRendererWarmupClient); DISALLOW_COPY_AND_ASSIGN(NavigationPredictorRendererWarmupClient);
}; };
......
...@@ -42,7 +42,10 @@ class TestNavigationPredictorRendererWarmupClient ...@@ -42,7 +42,10 @@ class TestNavigationPredictorRendererWarmupClient
: NavigationPredictorRendererWarmupClient(profile, clock) {} : NavigationPredictorRendererWarmupClient(profile, clock) {}
~TestNavigationPredictorRendererWarmupClient() override = default; ~TestNavigationPredictorRendererWarmupClient() override = default;
bool DidDoRendererWarmup() const { return did_renderer_warmup_; } bool DidDoRendererWarmup() const {
base::RunLoop().RunUntilIdle();
return did_renderer_warmup_;
}
void Reset() { did_renderer_warmup_ = false; } void Reset() { did_renderer_warmup_ = false; }
......
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