Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(840)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java

Issue 2580523002: Reland "Android: Switch to thread pool executor" (Closed)
Patch Set: Fix creation task. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
index 312dd77cb1011dfe1cc08efcacc1d58c233eefc4..4bbbb4cdf1ec392afee4fa90a27ea82ddd26765b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BackgroundSyncLauncher.java
@@ -24,7 +24,7 @@ import org.chromium.chrome.browser.externalauth.UserRecoverableErrorHandler;
/**
* The {@link BackgroundSyncLauncher} singleton is created and owned by the C++ browser. It
* registers interest in waking up the browser the next time the device goes online after the
- * browser closes via the {@link #setLaunchWhenNextOnline} method.
+ * browser closes via the {@link #launchBrowserIfStopped} method.
*
* Thread model: This class is to be run on the UI thread only.
*/
@@ -50,6 +50,9 @@ public class BackgroundSyncLauncher {
*/
private static boolean sGCMEnabled = true;
+ @VisibleForTesting
+ protected AsyncTask<Void, Void, Void> mLaunchBrowserIfStoppedTask;
+
/**
* Create a BackgroundSyncLauncher object, which is owned by C++.
* @param context The app context.
@@ -79,18 +82,21 @@ public class BackgroundSyncLauncher {
* Callback for {@link #shouldLaunchBrowserIfStopped}. The run method is invoked on the UI
* thread.
*/
- public static interface ShouldLaunchCallback { public void run(Boolean shouldLaunch); }
+ public interface ShouldLaunchCallback { void run(Boolean shouldLaunch); }
/**
* Returns whether the browser should be launched when the device next goes online.
* This is set by C++ and reset to false each time {@link BackgroundSyncLauncher}'s singleton is
* created (the native browser is started). This call is asynchronous and will run the callback
* on the UI thread when complete.
- * @param context The application context.
- * @param sharedPreferences The shared preferences.
+ *
+ * {@link AsyncTask} is necessary as the browser process will not have warmed up the
+ * {@link SharedPreferences} before it is used here. This is likely the first usage of
+ * {@link ContextUtils#getAppSharedPreferences}.
+ *
+ * @param callback The callback after fetching prefs.
*/
- protected static void shouldLaunchBrowserIfStopped(
- final Context context, final ShouldLaunchCallback callback) {
+ protected static void shouldLaunchBrowserIfStopped(final ShouldLaunchCallback callback) {
new AsyncTask<Void, Void, Boolean>() {
@Override
protected Boolean doInBackground(Void... params) {
@@ -101,7 +107,7 @@ public class BackgroundSyncLauncher {
protected void onPostExecute(Boolean shouldLaunch) {
callback.run(shouldLaunch);
}
- }.execute();
+ }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
/**
@@ -110,15 +116,16 @@ public class BackgroundSyncLauncher {
* This method is called by C++ as background sync registrations are added and removed. When the
* {@link BackgroundSyncLauncher} singleton is created (on browser start), this is called to
* remove any pre-existing scheduled tasks.
- * @param context The application context.
+ *
+ * See {@link #shouldLaunchBrowserIfStopped} for {@link AsyncTask}.
+ *
* @param shouldLaunch Whether or not to launch the browser in the background.
* @param minDelayMs The minimum time to wait before checking on the browser process.
*/
@VisibleForTesting
@CalledByNative
- protected void launchBrowserIfStopped(
- final Context context, final boolean shouldLaunch, final long minDelayMs) {
- new AsyncTask<Void, Void, Void>() {
+ protected void launchBrowserIfStopped(final boolean shouldLaunch, final long minDelayMs) {
+ mLaunchBrowserIfStoppedTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
@@ -133,7 +140,7 @@ public class BackgroundSyncLauncher {
if (shouldLaunch) {
RecordHistogram.recordBooleanHistogram(
"BackgroundSync.LaunchTask.ScheduleSuccess",
- scheduleLaunchTask(context, mScheduler, minDelayMs));
+ scheduleLaunchTask(mScheduler, minDelayMs));
} else {
RecordHistogram.recordBooleanHistogram(
"BackgroundSync.LaunchTask.CancelSuccess",
@@ -141,7 +148,7 @@ public class BackgroundSyncLauncher {
}
}
}
- }.execute();
+ }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
/**
@@ -154,7 +161,7 @@ public class BackgroundSyncLauncher {
protected BackgroundSyncLauncher(Context context) {
mScheduler = GcmNetworkManager.getInstance(context);
- launchBrowserIfStopped(context, false, 0);
+ launchBrowserIfStopped(false, 0);
}
private static boolean canUseGooglePlayServices(Context context) {
@@ -188,8 +195,7 @@ public class BackgroundSyncLauncher {
return !sGCMEnabled;
}
- private static boolean scheduleLaunchTask(
- Context context, GcmNetworkManager scheduler, long minDelayMs) {
+ private static boolean scheduleLaunchTask(GcmNetworkManager scheduler, long minDelayMs) {
// Google Play Services may not be up to date, if the application was not installed through
// the Play Store. In this case, scheduling the task will fail silently.
final long minDelaySecs = minDelayMs / 1000;
@@ -252,11 +258,11 @@ public class BackgroundSyncLauncher {
// without delay and let the browser reschedule if necessary.
// TODO(iclelland): If this fails, report the failure via UMA (not now,
// since the browser is not running, but on next startup.)
- scheduleLaunchTask(context, scheduler, 0);
+ scheduleLaunchTask(scheduler, 0);
}
}
};
- BackgroundSyncLauncher.shouldLaunchBrowserIfStopped(context, callback);
+ BackgroundSyncLauncher.shouldLaunchBrowserIfStopped(callback);
}
@VisibleForTesting
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/BackgroundSyncLauncherTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698