diff options
author | John Reck <jreck@google.com> | 2011-07-22 11:28:05 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-22 11:28:05 -0700 |
commit | 7c6a6dcb2fafab1ceca86e70c84095d21a0671b3 (patch) | |
tree | d9d689a2912fe8efcbf0c116c99c49877121b842 | |
parent | b765583492ef90c163b61588d16789d58f941b7b (diff) | |
parent | f57c029329e874399199259b5e69f4d0b8a12a38 (diff) | |
download | packages_apps_Browser-7c6a6dcb2fafab1ceca86e70c84095d21a0671b3.zip packages_apps_Browser-7c6a6dcb2fafab1ceca86e70c84095d21a0671b3.tar.gz packages_apps_Browser-7c6a6dcb2fafab1ceca86e70c84095d21a0671b3.tar.bz2 |
Merge "Startup optimization"
-rw-r--r-- | src/com/android/browser/BrowserActivity.java | 14 | ||||
-rw-r--r-- | src/com/android/browser/BrowserSettings.java | 17 | ||||
-rw-r--r-- | src/com/android/browser/Controller.java | 34 | ||||
-rw-r--r-- | src/com/android/browser/CrashRecoveryHandler.java | 9 |
4 files changed, 42 insertions, 32 deletions
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java index b2a83e1..3ab45f7 100644 --- a/src/com/android/browser/BrowserActivity.java +++ b/src/com/android/browser/BrowserActivity.java @@ -57,6 +57,13 @@ public class BrowserActivity extends Activity { } super.onCreate(icicle); + // If this was a web search request, pass it on to the default web + // search provider and finish this activity. + if (IntentHandler.handleWebSearchIntent(this, null, getIntent())) { + finish(); + return; + } + BrowserSettings settings = BrowserSettings.getInstance(); // render the browser in OpenGL @@ -69,13 +76,6 @@ public class BrowserActivity extends Activity { this.getWindow().setFlags(0, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); } - // If this was a web search request, pass it on to the default web - // search provider and finish this activity. - if (IntentHandler.handleWebSearchIntent(this, null, getIntent())) { - finish(); - return; - } - AccessibilityManager accessibilityManager = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE); if (accessibilityManager != null && accessibilityManager.isEnabled()) { diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java index 97769fc..a4f0f04 100644 --- a/src/com/android/browser/BrowserSettings.java +++ b/src/com/android/browser/BrowserSettings.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Build; +import android.os.Looper; import android.os.Message; import android.preference.PreferenceManager; import android.provider.Browser; @@ -103,6 +104,10 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener, private AutofillHandler mAutofillHandler; private WeakHashMap<WebSettings, String> mCustomUserAgents; private boolean mInitialized = false; + // Looper shared between some lightweight background operations + // Specifically, this is created on the thread that initializes browser settings + // and is then reused by CrashRecoveryHandler + private Looper mBackgroundLooper; // Cached values private int mPageCacheCapacity = 1; @@ -127,7 +132,7 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener, mCustomUserAgents = new WeakHashMap<WebSettings, String>(); mPrefs.registerOnSharedPreferenceChangeListener(this); mAutofillHandler.asyncLoadFromDb(); - new Thread(mInitialization, "BrowserSettingsInitialization").start(); + new Thread(mSetupAndLoop, "BackgroundLooper").start(); } public void setController(Controller controller) { @@ -139,6 +144,11 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener, } } + public Looper getBackgroundLooper() { + requireInitialization(); + return mBackgroundLooper; + } + public void startManagingSettings(WebSettings settings) { synchronized (mManagedSettings) { syncStaticSettings(settings); @@ -147,7 +157,7 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener, } } - private Runnable mInitialization = new Runnable() { + private Runnable mSetupAndLoop = new Runnable() { @Override public void run() { @@ -189,10 +199,13 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener, } mPrefs.edit().remove(PREF_TEXT_SIZE).apply(); } + Looper.prepare(); + mBackgroundLooper = Looper.myLooper(); synchronized (BrowserSettings.this) { mInitialized = true; BrowserSettings.this.notifyAll(); } + Looper.loop(); } }; diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 03e2d8b..731da18 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -206,7 +206,6 @@ public class Controller // Checks to see when the bookmarks database has changed, and updates the // Tabs' notion of whether they represent bookmarked sites. private ContentObserver mBookmarksObserver; - private DataController mDataController; private CrashRecoveryHandler mCrashRecoveryHandler; private boolean mSimulateActionBarOverlayMode; @@ -228,7 +227,6 @@ public class Controller public Controller(Activity browser) { mActivity = browser; mSettings = BrowserSettings.getInstance(); - mDataController = DataController.getInstance(mActivity); mTabControl = new TabControl(this); mSettings.setController(this); mCrashRecoveryHandler = CrashRecoveryHandler.initialize(this); @@ -239,10 +237,6 @@ public class Controller mPageDialogsHandler = new PageDialogsHandler(mActivity, this); mNfcHandler = new NfcHandler(mActivity, this); - PowerManager pm = (PowerManager) mActivity - .getSystemService(Context.POWER_SERVICE); - mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser"); - startHandler(); mBookmarksObserver = new ContentObserver(mHandler) { @Override @@ -518,7 +512,7 @@ public class Controller break; case RELEASE_WAKELOCK: - if (mWakeLock.isHeld()) { + if (mWakeLock != null && mWakeLock.isHeld()) { mWakeLock.release(); // if we reach here, Browser should be still in the // background loading after WAKELOCK_TIMEOUT (5-min). @@ -622,6 +616,11 @@ public class Controller if (tab != null) { tab.pause(); if (!pauseWebViewTimers(tab)) { + if (mWakeLock == null) { + PowerManager pm = (PowerManager) mActivity + .getSystemService(Context.POWER_SERVICE); + mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser"); + } mWakeLock.acquire(); mHandler.sendMessageDelayed(mHandler .obtainMessage(RELEASE_WAKELOCK), WAKELOCK_TIMEOUT); @@ -662,10 +661,7 @@ public class Controller current.resume(); resumeWebViewTimers(current); } - if (mWakeLock.isHeld()) { - mHandler.removeMessages(RELEASE_WAKELOCK); - mWakeLock.release(); - } + releaseWakeLock(); mUi.onResume(); mNetworkHandler.onResume(); @@ -673,6 +669,13 @@ public class Controller WebView.enablePlatformNotifications(); } + private void releaseWakeLock() { + if (mWakeLock != null && mWakeLock.isHeld()) { + mHandler.removeMessages(RELEASE_WAKELOCK); + mWakeLock.release(); + } + } + /** * resume all WebView timers using the WebView instance of the given tab * @param tab guaranteed non-null @@ -832,10 +835,7 @@ public class Controller // pause the WebView timer and release the wake lock if it is finished // while BrowserActivity is in pause state. if (mActivityPaused && pauseWebViewTimers(tab)) { - if (mWakeLock.isHeld()) { - mHandler.removeMessages(RELEASE_WAKELOCK); - mWakeLock.release(); - } + releaseWakeLock(); } // Performance probe @@ -890,7 +890,7 @@ public class Controller } // Update the title in the history database if not in private browsing mode if (!tab.isPrivateBrowsingEnabled()) { - mDataController.updateHistoryTitle(pageUrl, title); + DataController.getInstance(mActivity).updateHistoryTitle(pageUrl, title); } } @@ -937,7 +937,7 @@ public class Controller || url.regionMatches(true, 0, "about:", 0, 6)) { return; } - mDataController.updateVisitedHistory(url); + DataController.getInstance(mActivity).updateVisitedHistory(url); WebIconDatabase.getInstance().retainIconForPageUrl(url); if (!mActivityPaused) { // Since we clear the state in onPause, don't backup the current diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java index 8d7f243..6e40ffd 100644 --- a/src/com/android/browser/CrashRecoveryHandler.java +++ b/src/com/android/browser/CrashRecoveryHandler.java @@ -25,9 +25,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; -import android.os.HandlerThread; +import android.os.Looper; import android.os.Parcel; -import android.os.Process; import android.util.Log; import java.io.ByteArrayOutputStream; @@ -73,10 +72,8 @@ public class CrashRecoveryHandler { private CrashRecoveryHandler(Controller controller) { mController = controller; mForegroundHandler = new Handler(); - HandlerThread thread = new HandlerThread(LOGTAG, - Process.THREAD_PRIORITY_BACKGROUND); - thread.start(); - mBackgroundHandler = new Handler(thread.getLooper()); + Looper looper = BrowserSettings.getInstance().getBackgroundLooper(); + mBackgroundHandler = new Handler(looper); } public void backupState() { |