summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2011-07-22 11:28:05 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-07-22 11:28:05 -0700
commit7c6a6dcb2fafab1ceca86e70c84095d21a0671b3 (patch)
treed9d689a2912fe8efcbf0c116c99c49877121b842
parentb765583492ef90c163b61588d16789d58f941b7b (diff)
parentf57c029329e874399199259b5e69f4d0b8a12a38 (diff)
downloadpackages_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.java14
-rw-r--r--src/com/android/browser/BrowserSettings.java17
-rw-r--r--src/com/android/browser/Controller.java34
-rw-r--r--src/com/android/browser/CrashRecoveryHandler.java9
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() {