summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/gallery3d/ui/TextureUploader.java2
-rw-r--r--src/com/android/gallery3d/ui/TileImageView.java13
2 files changed, 9 insertions, 6 deletions
diff --git a/src/com/android/gallery3d/ui/TextureUploader.java b/src/com/android/gallery3d/ui/TextureUploader.java
index 714b09795..9a8c47fc6 100644
--- a/src/com/android/gallery3d/ui/TextureUploader.java
+++ b/src/com/android/gallery3d/ui/TextureUploader.java
@@ -29,7 +29,7 @@ public class TextureUploader implements OnGLIdleListener {
private final ArrayDeque<UploadedTexture> mBgTextures =
new ArrayDeque<UploadedTexture>(INIT_CAPACITY);
private final GLRoot mGLRoot;
- private transient boolean mIsQueued = false;
+ private volatile boolean mIsQueued = false;
public TextureUploader(GLRoot root) {
mGLRoot = root;
diff --git a/src/com/android/gallery3d/ui/TileImageView.java b/src/com/android/gallery3d/ui/TileImageView.java
index fc61efd64..9eb4f4787 100644
--- a/src/com/android/gallery3d/ui/TileImageView.java
+++ b/src/com/android/gallery3d/ui/TileImageView.java
@@ -270,6 +270,7 @@ public class TileImageView extends GLView {
protected synchronized void invalidateTiles() {
mDecodeQueue.clean();
mUploadQueue.clean();
+
// TODO disable decoder
int n = mActiveTiles.size();
for (int i = 0; i < n; i++) {
@@ -553,21 +554,23 @@ public class TileImageView extends GLView {
@Override
public boolean onGLIdle(GLCanvas canvas, boolean renderRequested) {
- if (renderRequested) return false;
+ // Skips uploading if there is a pending rendering request.
+ // Returns true to keep uploading in next rendering loop.
+ if (renderRequested) return true;
int quota = UPLOAD_LIMIT;
- Tile tile;
- while (true) {
+ Tile tile = null;
+ while (quota > 0) {
synchronized (TileImageView.this) {
tile = mUploadQueue.pop();
}
- if (tile == null || quota <= 0) break;
+ if (tile == null) break;
if (!tile.isContentValid()) {
Utils.assertTrue(tile.mTileState == STATE_DECODED);
tile.updateContent(canvas);
--quota;
}
}
- mActive.set(tile != null);
+ if (tile == null) mActive.set(false);
return tile != null;
}
}