Commit 0d0a9bac authored by Robert Ogden's avatar Robert Ogden Committed by Commit Bot

Use a delayed post task for Omnibox Spare Renderer on Android

We'll experiment with the delay to find something ideal.

Bug: 730587
Change-Id: Ib583939abfbf641f43ce15103ce20e75a9fae4e8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2412551Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Reviewed-by: default avatarRyan Sturm <ryansturm@chromium.org>
Commit-Queue: Robert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#807539}
parent d67e0b8e
...@@ -27,7 +27,6 @@ import org.chromium.base.metrics.RecordHistogram; ...@@ -27,7 +27,6 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.task.AsyncTask; import org.chromium.base.task.AsyncTask;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.toolbar.ControlContainer; import org.chromium.chrome.browser.toolbar.ControlContainer;
import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.components.embedder_support.util.UrlConstants;
...@@ -333,12 +332,9 @@ public class WarmupManager { ...@@ -333,12 +332,9 @@ public class WarmupManager {
public void createSpareRenderProcessHost(Profile profile) { public void createSpareRenderProcessHost(Profile profile) {
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
if (!LibraryLoader.getInstance().isInitialized()) return; if (!LibraryLoader.getInstance().isInitialized()) return;
if (ChromeFeatureList.isEnabled(ChromeFeatureList.OMNIBOX_SPARE_RENDERER)) {
// Spare WebContents should not be used with spare RenderProcessHosts, but if one destroySpareWebContents();
// has been created, destroy it in order not to consume too many processes. WarmupManagerJni.get().warmupSpareRenderer(profile);
destroySpareWebContents();
WarmupManagerJni.get().warmupSpareRenderer(profile);
}
} }
/** /**
......
...@@ -13,9 +13,12 @@ import androidx.annotation.VisibleForTesting; ...@@ -13,9 +13,12 @@ import androidx.annotation.VisibleForTesting;
import androidx.collection.ArraySet; import androidx.collection.ArraySet;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.NativeMethods; import org.chromium.base.annotations.NativeMethods;
import org.chromium.base.task.PostTask;
import org.chromium.chrome.browser.WarmupManager; import org.chromium.chrome.browser.WarmupManager;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType; import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteResult.GroupDetails; import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteResult.GroupDetails;
...@@ -25,6 +28,7 @@ import org.chromium.chrome.browser.profiles.Profile; ...@@ -25,6 +28,7 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.components.omnibox.SuggestionAnswer; import org.chromium.components.omnibox.SuggestionAnswer;
import org.chromium.components.query_tiles.QueryTile; import org.chromium.components.query_tiles.QueryTile;
import org.chromium.content_public.browser.UiThreadTaskTraits;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.url.GURL; import org.chromium.url.GURL;
...@@ -168,10 +172,23 @@ public class AutocompleteController { ...@@ -168,10 +172,23 @@ public class AutocompleteController {
assert mListener != null : "Ensure a listener is set prior to calling."; assert mListener != null : "Ensure a listener is set prior to calling.";
if (profile == null || TextUtils.isEmpty(url)) return; if (profile == null || TextUtils.isEmpty(url)) return;
if (!NewTabPage.isNTPUrl(url)) { // Proactively start up a renderer, to reduce the time to display search results,
// Proactively start up a renderer, to reduce the time to display search results, // especially if a Service Worker is used. This is done in a PostTask with a
// especially if a Service Worker is used. // experiment-configured delay so that the CPU usage associated with starting a new renderer
WarmupManager.getInstance().createSpareRenderProcessHost(profile); // process does not impact the Omnibox initialization. Note that there's a small chance the
// renderer will be started after the next navigation if the delay is too long, but the
// spare renderer will probably get used anyways by a later navigation.
if (!NewTabPage.isNTPUrl(url)
&& ChromeFeatureList.isEnabled(ChromeFeatureList.OMNIBOX_SPARE_RENDERER)) {
PostTask.postDelayedTask(UiThreadTaskTraits.BEST_EFFORT,
()
-> {
ThreadUtils.assertOnUiThread();
WarmupManager.getInstance().createSpareRenderProcessHost(profile);
},
ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
ChromeFeatureList.OMNIBOX_SPARE_RENDERER,
"omnibox_spare_renderer_delay_ms", 0));
} }
mNativeAutocompleteControllerAndroid = mNativeAutocompleteControllerAndroid =
AutocompleteControllerJni.get().init(AutocompleteController.this, profile); AutocompleteControllerJni.get().init(AutocompleteController.this, profile);
......
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