New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 825947 link

Starred by 5 users

Issue metadata

Status: Available
Owner:
Last visit > 30 days ago
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 3
Type: Feature

Blocking:
issue 718936



Sign in to add a comment

//base way to do Java background work

Project Member Reported by dskiba@chromium.org, Mar 26 2018

Issue description

It would be nice to have Java background thread where potentially heavy work could be offloaded from the main thread.

In absence of such thread components either start their own threads (e.g. SafetyNetHandlerThread in //clank), just do things on the main thread (e.g. ActivityManager.getMyMemoryState() call in MemoryPressureMonitor) or simply use AsyncTasks (not good, very bad).

At least we need something with a Looper, but we also can think of a task-scheduler like API.
 

Comment 1 by boliu@chromium.org, Mar 26 2018

Cc: dtrainor@chromium.org torne@chromium.org gab@chromium.org nyquist@chromium.org yfried...@chromium.org
we really do need TaskScheduler in java, ie with API entry points in java and all the threads be java looper threads instead of native threads

if only someone actually has time to work on it..
we discussed this with gab@ last week and I thought he was supportive of doing this with TaskScheduler but needed someone with Clank knowledge to help get it going

Comment 3 by dskiba@chromium.org, Mar 26 2018

But note that we need that thing before native is even loaded (and library loader itself uses single thread executor / AsyncTask).

Comment 4 by boliu@chromium.org, Mar 26 2018

I don't think #2 and #3 are in conflict :)
Heh, agreed. I think we would model our Java API based on TaskScheduler but under the hood potentially use async task's threaded executor until we can swap over to native. Something to that effect anyway

Comment 6 by boliu@chromium.org, Mar 26 2018

> potentially use async task's threaded executor

<puts webview hat on>

that's a really bad idea for webview, because those thread pools are shared with the app, so can't make any assumption about what happens on those threads

and we should not put things that don't work well on webview in base (or anywhere under content)
Right! Thanks for the reminder :)

Comment 8 by gab@chromium.org, Mar 26 2018

Components: Internals>TaskScheduler
Re. #2 : I'm excited to support this and consult if need be but don't have Java expertise nor bandwidth to drive it. Thanks!
I apologize for the naive question, but why are AsyncTasks bad?

To Bo's point, I understand why sharing the existing Executors are bad, but why don't we just introduce our own Executors that avoid conflict with the containing application or any third party libraries that are included within chromium?

Are you specifically looking for the additional capabilities of the TaskScheduler (i.e. the traits supplied with the task)?
Cc: tedc...@chromium.org

Comment 11 by boliu@chromium.org, Apr 26 2018

So one key thing we may want is the ability to post to the same from the same sequence from both java and native (and in java before native is loaded). Specifically, this is required to get rid of the launcher thread, because android wants to start posting to the launcher thread (or sequence) before native library is loaded (for warm up).

Also it's kind of weird to have java and native have completely different thread pools.
Also, gab@ et al are working on intelligent scheduling of work via TaskScheduler. So for example an IPC from background renderer should get lower priority than foreground work. If we don't speak the same language it limits TaskScheduler's ability

Currently we often also erroneously use AsyncTasks for potentially blocking but user-facing work. TaskScheduler has this notion but AsyncTask doesn't and runs on a lower-priority thread. In this vein Egor got a performance win from using a dedicated thread as opposed to AsyncTask threadpool.

GMSCore also has a bunch of reasons they found to use their own threadpool: https://sites.google.com/corp/view/a/google.com/gmscore-perf/thread-pooling

I think that for Chrome, TaskScheduler is the logical piece to build on. To your point, we could try starting just by defining appropriate executors and supporting the AsyncTask API for existing work and only then if necessary see whether a TaskScheduler-like API is necessary?
Just realized that since for WebView ThreadUtils.UiThread might not be the same as Android main thread, ThreadUtils.assertOnUiThread() check guarding AsyncTask usage is wrong and won't prevent races.

Comment 14 by gab@chromium.org, May 3 2018

Labels: -Type-Bug Type-Feature
Blocking: 718936

Comment 16 by boliu@chromium.org, Jun 18 2018

Cc: skyos...@chromium.org
+skyostil: your comment in https://bugs.chromium.org/p/chromium/issues/detail?id=843745#c24 is more inline with this bug/discussion :)
Thanks, this is pretty much what I meant.

Re: running tasks before native is there, I wonder if we should have Java be in charge of creating threads for base::TaskScheduler (at least for the threads that need to run Java tasks)?

Comment 18 by gab@chromium.org, Jun 19 2018

At the moment, it's not safe to create threads used by //content before BrowserMainLoop::CreateThreads().

As such, it would be possible to create these threads earlier but we would need a fence that prevents anything from running on them from the moment we enter //content to BrowserMainLoop::CreateThreads() (i.e. right after BrowserMainLoop::PreCreateThreads() and all its related hooks). That or just have TaskScheduler not be aware of them (being handed those off in TaskScheduler::Start()) to maintain the invariant that everything posted from //content and above only gets to run in parallel after thread-unsafe initialization is complete.
Interesting -- I suppose we could still run Java tasks on them initially and then hand them off to TaskScheduler after CreateThreads()? I think in the current setup we might have a bit of a thundering herd problem with the multiple thread pools during startup, but I haven't collected evidence of that yet.

Comment 20 by gab@chromium.org, Jun 19 2018

Yes, we should definitely coalesce, we just need to find a way for content not to be able to run stuff in parallel before it's thread unsafe initialization is complete. Either by pausing while initializing content or by hiding the threads from it until later.

FWIW, we've been moving things in this space a lot recently because of servicification which requires a runtime environment before content is initialized (and it needs to be functional, not just queuing, because it'll soon be possible to bring up chrome services without chrome itself -- e.g. download service to continue download while browser is dead).

We now bring up the IO thread before CreateThreads(), we just don't label it as BrowserThread::IO until then (creating a sync point for content initialization).

Comment 21 by wnwen@chromium.org, Jun 20 2018

Cc: wnwen@chromium.org

Comment 22 by boliu@chromium.org, Jun 27 2018

> At the moment, it's not safe to create threads used by //content before BrowserMainLoop::CreateThreads().

Can you elaborate on the problem here a bit. I'm not really understanding the problem.

We create what used to be the launcher thread before the native library is loaded, and start running content java code on it immediately without calling into any c++ code.

Comment 23 by gab@chromium.org, Jun 28 2018

It's not safe to create threads on which tasks from //content will run. In particular tasks that will use globals initialized by //content and its embedder in its single-threaded phase (e.g. in PreCreateThreads()).

Some threads that do not run generic //content tasks which may touch such globals are okay.
Cc: smaier@chromium.org
Owner: alexclarke@chromium.org
Assigning to alex@ since he's implementing a lot of this.
Project Member

Comment 26 by bugdroid1@chromium.org, Sep 10

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e02065f62f29ed4b951e49d9f29463d329f0161e

commit e02065f62f29ed4b951e49d9f29463d329f0161e
Author: Sam Maier <smaier@chromium.org>
Date: Mon Sep 10 15:50:17 2018

Android: copying AsyncTask over to base/

We aren't removing the third_party/ copy yet to avoid a breakage
downstream. Once downstream is updated, we will move all usages over and
remove the third_party/ folder.

Bug: 825947
Change-Id: I392779043cc3f3d971df86ebeef4144a0c9cc5dc
Reviewed-on: https://chromium-review.googlesource.com/1213534
Reviewed-by: agrieve <agrieve@chromium.org>
Commit-Queue: Sam Maier <smaier@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589926}
[modify] https://crrev.com/e02065f62f29ed4b951e49d9f29463d329f0161e/base/BUILD.gn
[add] https://crrev.com/e02065f62f29ed4b951e49d9f29463d329f0161e/base/android/java/src/org/chromium/base/task/AsyncTask.java
[add] https://crrev.com/e02065f62f29ed4b951e49d9f29463d329f0161e/base/android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java
[add] https://crrev.com/e02065f62f29ed4b951e49d9f29463d329f0161e/base/android/java/src/org/chromium/base/task/OWNERS
[add] https://crrev.com/e02065f62f29ed4b951e49d9f29463d329f0161e/base/android/java/src/org/chromium/base/task/SerialExecutor.java

Project Member

Comment 27 by bugdroid1@chromium.org, Sep 19

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/82c761c56cb7fc52dd33b60666af5c9abad6d12e

commit 82c761c56cb7fc52dd33b60666af5c9abad6d12e
Author: Sam Maier <smaier@chromium.org>
Date: Wed Sep 19 17:40:35 2018

Android: copied AsyncTask test helpers to base/task/test

These are being copied over before the originals are removed to
accommodate downstream.

TBR=agrieve@chromium.org

Bug: 825947
Change-Id: I29a9db48c9d51d80cac8fd2c2d0287844ab8ff75
Reviewed-on: https://chromium-review.googlesource.com/1233718
Commit-Queue: Sam Maier <smaier@chromium.org>
Reviewed-by: Sam Maier <smaier@chromium.org>
Cr-Commit-Position: refs/heads/master@{#592460}
[modify] https://crrev.com/82c761c56cb7fc52dd33b60666af5c9abad6d12e/base/BUILD.gn
[add] https://crrev.com/82c761c56cb7fc52dd33b60666af5c9abad6d12e/base/test/android/junit/src/org/chromium/base/task/test/BackgroundShadowAsyncTask.java
[add] https://crrev.com/82c761c56cb7fc52dd33b60666af5c9abad6d12e/base/test/android/junit/src/org/chromium/base/task/test/CustomShadowAsyncTask.java
[add] https://crrev.com/82c761c56cb7fc52dd33b60666af5c9abad6d12e/third_party/robolectric/custom_asynctask/DEPS
[add] https://crrev.com/82c761c56cb7fc52dd33b60666af5c9abad6d12e/third_party/robolectric/custom_asynctask/java/src/org/chromium/base/task/test/ShadowAsyncTask.java
[add] https://crrev.com/82c761c56cb7fc52dd33b60666af5c9abad6d12e/third_party/robolectric/custom_asynctask/java/src/org/chromium/base/task/test/ShadowAsyncTaskBridge.java

Project Member

Comment 28 by bugdroid1@chromium.org, Sep 20

The following revision refers to this bug:
  https://chrome-internal.googlesource.com/clank/internal/apps/+/e44ca81e0810e3d73de91038bfe8811effa33953

commit e44ca81e0810e3d73de91038bfe8811effa33953
Author: Sam Maier <smaier@chromium.org>
Date: Thu Sep 20 00:29:51 2018

Project Member

Comment 29 by bugdroid1@chromium.org, Sep 24

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b

commit 67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b
Author: Sam Maier <smaier@chromium.org>
Date: Mon Sep 24 16:38:36 2018

Android: moving over to base/ copy of AsyncTask

TBR=smaier@chromium.org (mechanical refactor)

Bug: 825947
Cq-Include-Trybots: luci.chromium.try:ios-simulator-cronet;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win10_chromium_x64_rel_ng;master.tryserver.chromium.android:android_cronet_tester
Change-Id: I378c64c40f3c7ce9522f3d8f534eaee88225880b
Reviewed-on: https://chromium-review.googlesource.com/1231989
Commit-Queue: Sam Maier <smaier@chromium.org>
Reviewed-by: Sam Maier <smaier@chromium.org>
Reviewed-by: agrieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593565}
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/android_webview/java/src/org/chromium/android_webview/AwContents.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/android_webview/java/src/org/chromium/android_webview/DefaultVideoPosterRequestHandler.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/android_webview/java/src/org/chromium/android_webview/services/AwVariationsSeedFetcher.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/base/BUILD.gn
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/base/android/java/src/org/chromium/base/PathUtils.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/base/android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java
[rename] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/base/android/javatests/src/org/chromium/base/task/AsyncTaskTest.java
[delete] https://crrev.com/732d346c64d780488523bfea6e0cc0d7418c1d7c/base/test/android/junit/src/org/chromium/base/test/asynctask/BackgroundShadowAsyncTask.java
[delete] https://crrev.com/732d346c64d780488523bfea6e0cc0d7418c1d7c/base/test/android/junit/src/org/chromium/base/test/asynctask/CustomShadowAsyncTask.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/DefaultBrowserInfo.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/SSLClientCertificateRequest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/autofill/CardUnmaskPrompt.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsCustomContextMenuItem.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsTabModelSelector.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/cookies/CookiesFetcher.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/crypto/CipherFactory.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabTabPersistencePolicy.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/RequestThrottler.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleLoader.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadDirectoryProvider.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerDelegate.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/OMADownloadHandler.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/home/glue/FileDeletionQueue.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/CalendarFactory.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/home/storage/StorageSummaryProvider.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/DownloadManagerUi.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/download/ui/SpaceDisplay.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/IntentWithGesturesHandler.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/feedback/AsyncFeedbackSourceAdapter.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ConnectivityChecker.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoDisclosureActivity.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/infobar/DuplicateDownloadInfoBar.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitTaskRunner.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderImpl.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/invalidation/DelayedInvalidationsController.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/invalidation/InvalidationController.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaViewerUtils.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaUrlResolver.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/metrics/UmaSessionStats.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/metrics/WebApkUma.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/evaluation/OfflinePageEvaluationBridge.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/ConnectivityDetector.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaService.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/geo/VisibleNetworksTracker.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/partnerbookmarks/PartnerBookmarksReader.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/partnercustomizations/PartnerBrowserCustomizations.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapScalerTask.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/FileEnumWorkerTask.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerBitmapViewHolder.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/services/AccountsChangedReceiver.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/InvalidationGcmUpstreamSender.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/share/OptionalShareTargetsManager.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareHelper.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninView.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountTrackerService.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninHelper.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileRenderer.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/survey/ChromeSurveyController.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/DocumentModeAssassin.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabbedModeTabPersistencePolicy.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/StorageDelegate.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/upgrade/PackageReplacedBroadcastReceiver.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInstaller.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappAuthenticator.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDirectoryManager.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/widget/DateDividedAdapter.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/java/src/org/chromium/chrome/browser/widget/ThumbnailDiskStorage.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/javatests/src/org/chromium/chrome/browser/ShareIntentTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabTabPersistencePolicyTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/javatests/src/org/chromium/chrome/browser/util/ChromeFileProviderTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/AccessorySheetControllerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/KeyboardAccessoryControllerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/keyboard_accessory/PasswordAccessorySheetControllerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/init/AsyncInitTaskRunnerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/installedapp/InstalledAppProviderTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/invalidation/InvalidationControllerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/media/remote/MediaUrlResolverTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/omnibox/geo/VisibleNetworksTrackerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDirectoryManagerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/webapk/libs/client/DEPS
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/webapk/libs/client/junit/src/org/chromium/webapk/lib/client/WebApkIdentityServiceClientTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/webapk/libs/client/junit/src/org/chromium/webapk/lib/client/WebApkServiceConnectionManagerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkServiceConnectionManager.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/AsyncTaskRunner.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/ElidedLogcatProvider.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/ExternalServiceDeviceLogcatProvider.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/AsyncTaskRunnerTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTask.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/components/cronet/android/BUILD.gn
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/components/cronet/android/test/javaperftests/src/org/chromium/net/CronetPerfTestActivity.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerFacade.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/components/signin/core/browser/android/junit/src/org/chromium/components/signin/test/AccountManagerFacadeRobolectricTest.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/components/sync/test/android/javatests/src/org/chromium/components/sync/test/util/MockSyncContentResolverDelegate.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionProvider.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/remoting/android/java/src/org/chromium/chromoting/OAuthTokenConsumer.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/remoting/android/java/src/org/chromium/chromoting/base/OAuthTokenFetcher.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionImpl.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/third_party/robolectric/custom_asynctask/java/src/org/chromium/base/task/test/ShadowAsyncTaskBridge.java
[delete] https://crrev.com/732d346c64d780488523bfea6e0cc0d7418c1d7c/third_party/robolectric/custom_asynctask/java/src/org/chromium/base/test/asynctask/ShadowAsyncTask.java
[delete] https://crrev.com/732d346c64d780488523bfea6e0cc0d7418c1d7c/third_party/robolectric/custom_asynctask/java/src/org/chromium/base/test/asynctask/ShadowAsyncTaskBridge.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoAndroidAsyncTaskCheck.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/ui/android/java/src/org/chromium/ui/resources/ResourceExtractor.java
[modify] https://crrev.com/67025f5a3a66d54d511f8f8a1b97a5b6ad30dd7b/ui/android/java/src/org/chromium/ui/resources/async/AsyncPreloadResourceLoader.java

Sign in to add a comment