зеркало из https://github.com/mozilla/gecko-dev.git
Bug 709103 - Optimize creating and saving thumbnail bitmaps r=blassey a=java-only
This commit is contained in:
Родитель
338b725ffd
Коммит
07b82a9779
|
@ -563,21 +563,26 @@ abstract public class GeckoApp
|
|||
super.onSaveInstanceState(outState);
|
||||
if (mOwnActivityDepth > 0)
|
||||
return; // we're showing one of our own activities and likely won't get paged out
|
||||
|
||||
if (outState == null)
|
||||
outState = new Bundle();
|
||||
mRememberLastScreenRunnable.run();
|
||||
|
||||
new SessionSnapshotRunnable(null).run();
|
||||
|
||||
outState.putString(SAVED_STATE_URI, mLastUri);
|
||||
outState.putString(SAVED_STATE_TITLE, mLastTitle);
|
||||
outState.putString(SAVED_STATE_VIEWPORT, mLastViewport);
|
||||
outState.putByteArray(SAVED_STATE_SCREEN, mLastScreen);
|
||||
}
|
||||
|
||||
Runnable mRememberLastScreenRunnable = new Runnable() {;
|
||||
public void run() {
|
||||
synchronized (this) {
|
||||
if (mUserDefinedProfile)
|
||||
return;
|
||||
public class SessionSnapshotRunnable implements Runnable {
|
||||
Tab mThumbnailTab;
|
||||
SessionSnapshotRunnable(Tab thumbnailTab) {
|
||||
mThumbnailTab = thumbnailTab;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
synchronized (mSoftwareLayerClient) {
|
||||
Tab tab = Tabs.getInstance().getSelectedTab();
|
||||
if (tab == null)
|
||||
return;
|
||||
|
@ -598,6 +603,10 @@ abstract public class GeckoApp
|
|||
mLastTitle = lastHistoryEntry.mTitle;
|
||||
Bitmap bitmap = mSoftwareLayerClient.getBitmap();
|
||||
if (bitmap != null) {
|
||||
// Make a thumbnail for the given tab, if it's still selected
|
||||
if (tab == mThumbnailTab)
|
||||
mThumbnailTab.updateThumbnail(bitmap);
|
||||
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 0, bos);
|
||||
mLastScreen = bos.toByteArray();
|
||||
|
@ -606,7 +615,7 @@ abstract public class GeckoApp
|
|||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void maybeCancelFaviconLoad(Tab tab) {
|
||||
long faviconLoadId = tab.getFaviconLoadId();
|
||||
|
@ -928,7 +937,7 @@ abstract public class GeckoApp
|
|||
mMainHandler.postAtFrontOfQueue(r);
|
||||
}
|
||||
|
||||
public class AboutHomeRunnable implements Runnable {
|
||||
public class AboutHomeRunnable implements Runnable {
|
||||
boolean mShow;
|
||||
AboutHomeRunnable(boolean show) {
|
||||
mShow = show;
|
||||
|
@ -1023,10 +1032,6 @@ abstract public class GeckoApp
|
|||
}
|
||||
|
||||
void handleSelectTab(int tabId) {
|
||||
Tab selTab = Tabs.getInstance().getSelectedTab();
|
||||
if (selTab != null)
|
||||
selTab.updateThumbnail(mSoftwareLayerClient.getBitmap());
|
||||
|
||||
final Tab tab = Tabs.getInstance().selectTab(tabId);
|
||||
if (tab == null)
|
||||
return;
|
||||
|
@ -1084,6 +1089,9 @@ abstract public class GeckoApp
|
|||
onTabsChanged(tab);
|
||||
}
|
||||
});
|
||||
|
||||
Runnable r = new SessionSnapshotRunnable(tab);
|
||||
GeckoAppShell.getHandler().postDelayed(r, 500);
|
||||
}
|
||||
|
||||
void handleShowToast(final String message, final String duration) {
|
||||
|
@ -1106,18 +1114,17 @@ abstract public class GeckoApp
|
|||
|
||||
tab.updateTitle(title);
|
||||
|
||||
// Make the UI changes
|
||||
mMainHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
loadFavicon(tab);
|
||||
|
||||
if (Tabs.getInstance().isSelectedTab(tab)) {
|
||||
if (Tabs.getInstance().isSelectedTab(tab))
|
||||
mBrowserToolbar.setTitle(tab.getDisplayTitle());
|
||||
tab.updateThumbnail(mSoftwareLayerClient.getBitmap());
|
||||
}
|
||||
|
||||
onTabsChanged(tab);
|
||||
}
|
||||
});
|
||||
GeckoAppShell.getHandler().postDelayed(mRememberLastScreenRunnable, 500);
|
||||
}
|
||||
|
||||
void handleTitleChanged(int tabId, String title) {
|
||||
|
@ -1502,7 +1509,8 @@ abstract public class GeckoApp
|
|||
{
|
||||
Log.i(LOGTAG, "pause");
|
||||
|
||||
GeckoAppShell.getHandler().post(mRememberLastScreenRunnable);
|
||||
Runnable r = new SessionSnapshotRunnable(null);
|
||||
GeckoAppShell.getHandler().post(r);
|
||||
|
||||
GeckoAppShell.sendEventToGecko(new GeckoEvent(GeckoEvent.ACTIVITY_PAUSING));
|
||||
// The user is navigating away from this activity, but nothing
|
||||
|
|
|
@ -58,6 +58,7 @@ import org.mozilla.gecko.db.BrowserDB;
|
|||
public class Tab {
|
||||
public static enum AgentMode { MOBILE, DESKTOP };
|
||||
private static final String LOGTAG = "GeckoTab";
|
||||
private static final int kThumbnailSize = 96;
|
||||
|
||||
static int sMinDim = 0;
|
||||
private int mId;
|
||||
|
@ -141,7 +142,8 @@ public class Tab {
|
|||
sMinDim = Math.min(metrics.widthPixels, metrics.heightPixels);
|
||||
}
|
||||
if (b != null) {
|
||||
Bitmap bitmap = Bitmap.createBitmap(b, 0, 0, sMinDim, sMinDim);
|
||||
Bitmap cropped = Bitmap.createBitmap(b, 0, 0, sMinDim, sMinDim);
|
||||
Bitmap bitmap = Bitmap.createScaledBitmap(cropped, kThumbnailSize, kThumbnailSize, false);
|
||||
mThumbnail = new BitmapDrawable(bitmap);
|
||||
saveThumbnailToDB((BitmapDrawable) mThumbnail);
|
||||
} else {
|
||||
|
@ -407,5 +409,4 @@ public class Tab {
|
|||
public AgentMode getAgentMode() {
|
||||
return mAgentMode;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче