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