• Clark DuVall's avatar
    Reland "Preload chrome split on startup" · fb7bb96f
    Clark DuVall authored
    This is a reland of 9124dffe
    
    Reason for reland: This was breaking Android N by accessing the base
    context too early: crbug.com/1156018c. Changes from original are from
    patchset 1 on.
    
    Original change's description:
    > Preload chrome split on startup
    >
    > The chrome split can take a long time to load, so we get significant
    > improvements in startup time if this work is offloaded to a background
    > thread. Ideally, we would give as much time as possible to allow this
    > preload to finish, which means running as much code as possible which
    > does not depend on the chrome split during the preload. This required
    > refactoring much of attachBaseContext into the base module, and moving
    > the pieces which could not be easily moved to the base module into
    > onCreate.
    >
    > The order of startup generally goes:
    > 1. Application.attachBaseContext
    > 2. Each provider is instantiated in order, and onCreate is called
    > 3. Application.onCreate
    >
    > If a provider lives in a split, it will call createContextForSplit on
    > the application. This will end up being the first thing needing the
    > chrome split, which will wait for the preload to complete. This is why
    > ChromeFileProvider was moved to the base module, so there could be more
    > time to preload.
    >
    > Pinpoint runs:
    > Pixel 2: https://pinpoint-dot-chromeperf.appspot.com/job/16925180d20000
    > -7% messageloop_start_time
    > -3% first_contentful_paint_time
    > -3.8% navigation_commit_time
    >
    > Android Go: https://pinpoint-dot-chromeperf.appspot.com/job/115e53e7520000
    > -18.7% messageloop_start_time
    > -1.5% first_contentful_paint_time
    > -2.1% navigation_commit_time
    >
    > A couple notes:
    > - setUsageAndCrashReportingFromNative was removed from UmaUtils because
    >   it is never used, and allowed for much more easily bringing UmaUtils
    >   into the base module.
    > - I wanted to make sure PureJavaExceptionHandler is still set up as
    >   early as possible, so left it in attachBaseContext. This required
    >   loading PureJavaExceptionReporter by reflection if an exception
    >   happens, since it has many hooks into chrome code.
    > - MainDexApplicationImpl is no longer needed since all the common code
    >   was moved to SplitCompatApplication
    >
    > Bug: 1150600
    > Change-Id: Idd6c11293e47fa5e8bd6eb30c14535e60c204867
    > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2570125
    > Commit-Queue: Clark DuVall <cduvall@chromium.org>
    > Reviewed-by: Andrew Grieve <agrieve@chromium.org>
    > Cr-Commit-Position: refs/heads/master@{#833923}
    
    Bug: 1150600
    Change-Id: Id9de8d25e74b18199fa10fb12a669384908acdb6
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2577546
    Commit-Queue: Clark DuVall <cduvall@chromium.org>
    Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#834317}
    fb7bb96f
chrome_java_sources.gni 129 KB