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

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

Issue 2207933002: Reland of Separate deferred startup into tasks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix one-line. Created 4 years, 4 months 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/java/src/org/chromium/chrome/browser/ChromeApplication.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/ChromeActivity.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
index 229deff15cfccb787b2b3cec375b489803071936..b052938307e50d7adf4f85b135f131c5cf7cd8a3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -20,8 +20,6 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
-import android.os.Looper;
-import android.os.MessageQueue;
import android.os.SystemClock;
import android.support.v7.app.AlertDialog;
import android.util.DisplayMetrics;
@@ -162,9 +160,6 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
*/
static final int NO_CONTROL_CONTAINER = -1;
- /** Delay in ms after first page load finishes before we initiate deferred startup actions. */
- private static final int DEFERRED_STARTUP_DELAY_MS = 1000;
-
private static final int RECORD_MULTI_WINDOW_SCREEN_WIDTH_DELAY_MS = 5000;
/**
@@ -187,8 +182,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
protected IntentHandler mIntentHandler;
- /** Whether onDeferredStartup() has been run. */
- private boolean mDeferredStartupNotified;
+ private boolean mDeferredStartupPosted;
// The class cannot implement TouchExplorationStateChangeListener,
// because it is only available for Build.VERSION_CODES.KITKAT and later.
@@ -221,7 +215,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
// A set of views obscuring all tabs. When this set is nonempty,
// all tab content will be hidden from the accessibility tree.
- private List<View> mViewsObscuringAllTabs = new ArrayList<View>();
+ private List<View> mViewsObscuringAllTabs = new ArrayList<>();
private static AppMenuHandlerFactory sAppMenuHandlerFactory = new AppMenuHandlerFactory() {
@Override
@@ -694,38 +688,57 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
return false;
}
+ /**
+ * Overriding methods should queue tasks on the DeferredStartupHandler before or after calling
+ * super depending on whether the tasks should run before or after these ones.
+ */
@Override
protected void onDeferredStartup() {
super.onDeferredStartup();
- DeferredStartupHandler.getInstance().onDeferredStartupForApp();
- onDeferredStartupForActivity();
+ initDeferredStartupForActivity();
+ DeferredStartupHandler.getInstance().initDeferredStartupForApp();
+ DeferredStartupHandler.getInstance().queueDeferredTasksOnIdleHandler();
}
/**
* All deferred startup tasks that require the activity rather than the app should go here.
*/
- private void onDeferredStartupForActivity() {
- BeamController.registerForBeam(this, new BeamProvider() {
+ private void initDeferredStartupForActivity() {
+ DeferredStartupHandler.getInstance().addDeferredTask(new Runnable() {
@Override
- public String getTabUrlForBeam() {
- if (isOverlayVisible()) return null;
- if (getActivityTab() == null) return null;
- return getActivityTab().getUrl();
+ public void run() {
+ if (isActivityDestroyed()) return;
+ BeamController.registerForBeam(ChromeActivity.this, new BeamProvider() {
+ @Override
+ public String getTabUrlForBeam() {
+ if (isOverlayVisible()) return null;
+ if (getActivityTab() == null) return null;
+ return getActivityTab().getUrl();
+ }
+ });
+
+ UpdateMenuItemHelper.getInstance().checkForUpdateOnBackgroundThread(
+ ChromeActivity.this);
}
});
- UpdateMenuItemHelper.getInstance().checkForUpdateOnBackgroundThread(this);
-
- if (mToolbarManager != null) {
- String simpleName = getClass().getSimpleName();
- RecordHistogram.recordTimesHistogram("MobileStartup.ToolbarInflationTime." + simpleName,
- mInflateInitialLayoutDurationMs, TimeUnit.MILLISECONDS);
- mToolbarManager.onDeferredStartup(getOnCreateTimestampMs(), simpleName);
- }
+ DeferredStartupHandler.getInstance().addDeferredTask(new Runnable() {
+ @Override
+ public void run() {
+ if (isActivityDestroyed()) return;
+ if (mToolbarManager != null) {
+ String simpleName = getClass().getSimpleName();
+ RecordHistogram.recordTimesHistogram(
+ "MobileStartup.ToolbarInflationTime." + simpleName,
+ mInflateInitialLayoutDurationMs, TimeUnit.MILLISECONDS);
+ mToolbarManager.onDeferredStartup(getOnCreateTimestampMs(), simpleName);
+ }
- if (MultiWindowUtils.getInstance().isInMultiWindowMode(this)) {
- onDeferredStartupForMultiWindowMode();
- }
+ if (MultiWindowUtils.getInstance().isInMultiWindowMode(ChromeActivity.this)) {
+ onDeferredStartupForMultiWindowMode();
+ }
+ }
+ });
}
/**
@@ -1655,29 +1668,13 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
}
protected final void postDeferredStartupIfNeeded() {
- if (!mDeferredStartupNotified) {
+ if (!mDeferredStartupPosted) {
+ mDeferredStartupPosted = true;
RecordHistogram.recordLongTimesHistogram(
- "UMA.Debug.EnableCrashUpload.PostDeferredStartUptime",
- SystemClock.uptimeMillis() - UmaUtils.getMainEntryPointTime(),
+ "UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2",
+ SystemClock.uptimeMillis() - UmaUtils.getForegroundStartTime(),
TimeUnit.MILLISECONDS);
-
- // We want to perform deferred startup tasks a short time after the first page
- // load completes, but only when the main thread Looper has become idle.
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- if (!mDeferredStartupNotified && !isActivityDestroyed()) {
- mDeferredStartupNotified = true;
- Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
- @Override
- public boolean queueIdle() {
- onDeferredStartup();
- return false; // Remove this idle handler.
- }
- });
- }
- }
- }, DEFERRED_STARTUP_DELAY_MS);
+ onDeferredStartup();
}
}
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698