summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChih-Chung Chang <chihchung@google.com>2012-05-10 11:03:35 +0800
committerChih-Chung Chang <chihchung@google.com>2012-05-10 16:31:03 +0800
commit34e6b587229c4863bb805859d9515abecd8abc5d (patch)
tree414a5d96b56fd8336d86aa1e478a3a150271b7a8
parent82f7ac999aae05b251cfe2c886020780832cd4a3 (diff)
downloadandroid_packages_apps_Snap-34e6b587229c4863bb805859d9515abecd8abc5d.tar.gz
android_packages_apps_Snap-34e6b587229c4863bb805859d9515abecd8abc5d.tar.bz2
android_packages_apps_Snap-34e6b587229c4863bb805859d9515abecd8abc5d.zip
Add freeze/unfreeze for GLRootView.
Change-Id: Ieb78041fea22b064d176ea1318cf5883d5d4c94f
-rw-r--r--src/com/android/gallery3d/ui/GLRoot.java2
-rw-r--r--src/com/android/gallery3d/ui/GLRootView.java24
-rw-r--r--tests/src/com/android/gallery3d/ui/GLRootMock.java2
-rw-r--r--tests/src/com/android/gallery3d/ui/GLRootStub.java2
4 files changed, 30 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/ui/GLRoot.java b/src/com/android/gallery3d/ui/GLRoot.java
index 313d81a5f..5ed323a88 100644
--- a/src/com/android/gallery3d/ui/GLRoot.java
+++ b/src/com/android/gallery3d/ui/GLRoot.java
@@ -41,4 +41,6 @@ public interface GLRoot {
public int getDisplayRotation();
public int getCompensation();
public Matrix getCompensationMatrix();
+ public void freeze();
+ public void unfreeze();
}
diff --git a/src/com/android/gallery3d/ui/GLRootView.java b/src/com/android/gallery3d/ui/GLRootView.java
index 7f8f1f4ff..1f25b9085 100644
--- a/src/com/android/gallery3d/ui/GLRootView.java
+++ b/src/com/android/gallery3d/ui/GLRootView.java
@@ -33,6 +33,7 @@ import com.android.gallery3d.util.Profile;
import java.util.ArrayDeque;
import java.util.ArrayList;
+import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
import javax.microedition.khronos.egl.EGLConfig;
@@ -97,6 +98,9 @@ public class GLRootView extends GLSurfaceView
private final IdleRunner mIdleRunner = new IdleRunner();
private final ReentrantLock mRenderLock = new ReentrantLock();
+ private final Condition mFreezeCondition =
+ mRenderLock.newCondition();
+ private boolean mFreeze;
private long mLastDrawFinishTime;
private boolean mInDownState = false;
@@ -301,6 +305,11 @@ public class GLRootView extends GLSurfaceView
t0 = System.nanoTime();
}
mRenderLock.lock();
+
+ while (mFreeze) {
+ mFreezeCondition.awaitUninterruptibly();
+ }
+
try {
onDrawFrameLocked(gl);
} finally {
@@ -486,4 +495,19 @@ public class GLRootView extends GLSurfaceView
public Matrix getCompensationMatrix() {
return mCompensationMatrix;
}
+
+ @Override
+ public void freeze() {
+ mRenderLock.lock();
+ mFreeze = true;
+ mRenderLock.unlock();
+ }
+
+ @Override
+ public void unfreeze() {
+ mRenderLock.lock();
+ mFreeze = false;
+ mFreezeCondition.signalAll();
+ mRenderLock.unlock();
+ }
}
diff --git a/tests/src/com/android/gallery3d/ui/GLRootMock.java b/tests/src/com/android/gallery3d/ui/GLRootMock.java
index 4af7a1f59..1253e50ae 100644
--- a/tests/src/com/android/gallery3d/ui/GLRootMock.java
+++ b/tests/src/com/android/gallery3d/ui/GLRootMock.java
@@ -39,4 +39,6 @@ public class GLRootMock implements GLRoot {
public int getDisplayRotation() { return 0; }
public int getCompensation() { return 0; }
public Matrix getCompensationMatrix() { return null; }
+ public void freeze() {}
+ public void unfreeze() {}
}
diff --git a/tests/src/com/android/gallery3d/ui/GLRootStub.java b/tests/src/com/android/gallery3d/ui/GLRootStub.java
index 878eeddb4..5c88c47ec 100644
--- a/tests/src/com/android/gallery3d/ui/GLRootStub.java
+++ b/tests/src/com/android/gallery3d/ui/GLRootStub.java
@@ -32,4 +32,6 @@ public class GLRootStub implements GLRoot {
public int getDisplayRotation() { return 0; }
public int getCompensation() { return 0; }
public Matrix getCompensationMatrix() { return null; }
+ public void freeze() {}
+ public void unfreeze() {}
}