[go: up one dir, main page]

android: Pin Chrome's code in finishNativeInitialization().

Previously, code pinning was done right after library load. At this time, the
feature system may not be initialized, making this racy and not reliable. Move
code pinning to a point where both features and field trials are known to be
available.

(cherry picked from commit ae2490702675c99ec6737a40bd7c6e6813dafe73)

Bug: 929926
Change-Id: Ibfb8ecfa5ac5d50adc2c7ce0943f2aa6d660aea8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1651741
Reviewed-by: Egor Pasko <pasko@chromium.org>
Reviewed-by: Yaron Friedman <yfriedman@chromium.org>
Commit-Queue: Benoit L <lizeb@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#668319}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1664080
Reviewed-by: Benoit L <lizeb@chromium.org>
Cr-Commit-Position: refs/branch-heads/3809@{#405}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryPrefetcher.java b/base/android/java/src/org/chromium/base/library_loader/LibraryPrefetcher.java
index 6466822..2086e73 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryPrefetcher.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryPrefetcher.java
@@ -100,14 +100,13 @@
             }
             // Removes a dead flag, don't remove the removal code before M77 at least.
             ContextUtils.getAppSharedPreferences().edit().remove("dont_prefetch_libraries").apply();
-
-            pinOrderedCodeInMemory();
         });
     }
 
+    // May pin Chrome's code to memory, on platforms that support it.
     @SuppressLint("WrongConstant")
-    public static void pinOrderedCodeInMemory() {
-        try (TraceEvent e = TraceEvent.scoped("LibraryPrefetcher::pinOrderedCodeInMemory")) {
+    public static void maybePinOrderedCodeInMemory() {
+        try (TraceEvent e = TraceEvent.scoped("LibraryPrefetcher::maybePinOrderedCodeInMemory")) {
             OrderedCodeInfo info = nativeGetOrderedCodeInfo();
             if (info == null) return;
             TraceEvent.instant("pinOrderedCodeInMemory", info.toString());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
index 3a7c11ba..613a600 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
@@ -434,6 +434,9 @@
 
         // TODO(crbug.com/960767): Remove this in M77.
         ServiceManagerStartupUtils.cleanupSharedPreferences();
+
+        PostTask.postTask(
+                TaskTraits.BEST_EFFORT_MAY_BLOCK, LibraryPrefetcher::maybePinOrderedCodeInMemory);
     }
 
     private ActivityStateListener createActivityStateListener() {