diff options
author | Owen Lin <owenlin@google.com> | 2012-10-24 20:35:45 +0800 |
---|---|---|
committer | Owen Lin <owenlin@google.com> | 2012-10-25 12:24:52 +0800 |
commit | 9ed5587681d216168ab000ae254da4bdbdcf7a34 (patch) | |
tree | 102d3201aab82f92c90b668eb732229f959af23b | |
parent | 26e7a71df39c4b6923c0d36e32cc7ae0ebd72a05 (diff) | |
download | android_packages_apps_Snap-9ed5587681d216168ab000ae254da4bdbdcf7a34.tar.gz android_packages_apps_Snap-9ed5587681d216168ab000ae254da4bdbdcf7a34.tar.bz2 android_packages_apps_Snap-9ed5587681d216168ab000ae254da4bdbdcf7a34.zip |
Fix tiling effect when open a photo.
1. Don't draw the tiles of full image before screen nail is ready.
2. Upload multiple tiles in each frame in order to show photo quickly.
bug: 7403409
Change-Id: Ic5a88a29fe302068e97ab81ab260d0cc572dd7ff
-rw-r--r-- | src/com/android/gallery3d/ui/TiledScreenNail.java | 4 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/TiledTexture.java | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/ui/TiledScreenNail.java b/src/com/android/gallery3d/ui/TiledScreenNail.java index d2b34e3bf..74665f584 100644 --- a/src/com/android/gallery3d/ui/TiledScreenNail.java +++ b/src/com/android/gallery3d/ui/TiledScreenNail.java @@ -189,6 +189,10 @@ public class TiledScreenNail implements ScreenNail { } public boolean isAnimating() { + // The TiledTexture may not be uploaded completely yet. + // In that case, we count it as animating state and we will draw + // the placeholder in TileImageView. + if (mTexture == null || !mTexture.isReady()) return true; if (mAnimationStartTime < 0) return false; if (AnimationTime.get() - mAnimationStartTime >= DURATION) { mAnimationStartTime = ANIMATION_DONE; diff --git a/src/com/android/gallery3d/ui/TiledTexture.java b/src/com/android/gallery3d/ui/TiledTexture.java index 8598a3fff..4352ed425 100644 --- a/src/com/android/gallery3d/ui/TiledTexture.java +++ b/src/com/android/gallery3d/ui/TiledTexture.java @@ -24,6 +24,7 @@ import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.RectF; +import android.os.SystemClock; import com.android.gallery3d.ui.GLRoot.OnGLIdleListener; @@ -40,6 +41,10 @@ public class TiledTexture implements Texture { private static final int TILE_SIZE = CONTENT_SIZE + 2 * BORDER_SIZE; private static final int INIT_CAPACITY = 8; + // We are targeting at 60fps, so we have 16ms for each frame. + // In this 16ms, we use about 4~8 ms to upload tiles. + private static final long UPLOAD_TILE_LIMIT = 4; // ms + private static Tile sFreeTileHead = null; private static final Object sFreeTileLock = new Object(); @@ -79,17 +84,19 @@ public class TiledTexture implements Texture { mGlRoot.addOnGLIdleListener(this); } - @Override public boolean onGLIdle(GLCanvas canvas, boolean renderRequested) { ArrayDeque<TiledTexture> deque = mTextures; synchronized (this) { - if (!deque.isEmpty()) { + long now = SystemClock.uptimeMillis(); + long dueTime = now + UPLOAD_TILE_LIMIT; + while(now < dueTime && !deque.isEmpty()) { TiledTexture t = deque.peekFirst(); if (t.uploadNextTile(canvas)) { deque.removeFirst(); mGlRoot.requestRender(); } + now = SystemClock.uptimeMillis(); } mIsQueued = !mTextures.isEmpty(); |