summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeng-Hui Zhu <ztenghui@google.com>2012-03-01 15:18:05 -0800
committerTeng-Hui Zhu <ztenghui@google.com>2012-03-01 15:37:58 -0800
commitd9624138723c55a0ac2af58a2e78e98cd51eba27 (patch)
treeb4b402a35bd8beefc4e66adb9730257fdf5504c5
parentfdd646b2b105e23cdc8517ac055448340a667e37 (diff)
downloadframeworks_base-d9624138723c55a0ac2af58a2e78e98cd51eba27.zip
frameworks_base-d9624138723c55a0ac2af58a2e78e98cd51eba27.tar.gz
frameworks_base-d9624138723c55a0ac2af58a2e78e98cd51eba27.tar.bz2
Allow webview to delete GL resource in a valid EGL context
bug:6079959 Change-Id: Idee1031b0bcc4aeb498a18eb01970a8ed7efd285
-rw-r--r--core/java/android/app/ActivityThread.java3
-rw-r--r--core/java/android/view/WindowManagerImpl.java14
2 files changed, 14 insertions, 3 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index d4b9a36..1ba41d4 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3751,6 +3751,7 @@ public final class ActivityThread {
}
final void handleTrimMemory(int level) {
+ WindowManagerImpl.getDefault().trimMemory(level);
ArrayList<ComponentCallbacks2> callbacks;
synchronized (mPackages) {
@@ -3761,7 +3762,7 @@ public final class ActivityThread {
for (int i=0; i<N; i++) {
callbacks.get(i).onTrimMemory(level);
}
- WindowManagerImpl.getDefault().trimMemory(level);
+ WindowManagerImpl.getDefault().terminateEgl();
}
private void setupGraphicsSupport(LoadedApk info) {
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java
index 6dbdedb..f56dd10 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -105,6 +105,7 @@ public class WindowManagerImpl implements WindowManager {
private View[] mViews;
private ViewRootImpl[] mRoots;
private WindowManager.LayoutParams[] mParams;
+ private boolean mNeedsEglTerminate;
private final static Object sLock = new Object();
private final static WindowManagerImpl sWindowManager = new WindowManagerImpl();
@@ -447,8 +448,7 @@ public class WindowManagerImpl implements WindowManager {
mRoots[i].terminateHardwareResources();
}
}
- // Terminate the hardware renderer to free all resources
- ManagedEGLContext.doTerminate();
+ mNeedsEglTerminate = true;
break;
}
// high end gfx devices fall through to next case
@@ -461,6 +461,16 @@ public class WindowManagerImpl implements WindowManager {
/**
* @hide
*/
+ public void terminateEgl() {
+ if (mNeedsEglTerminate) {
+ ManagedEGLContext.doTerminate();
+ mNeedsEglTerminate = false;
+ }
+ }
+
+ /**
+ * @hide
+ */
public void trimLocalMemory() {
synchronized (this) {
if (mViews == null) return;