diff options
author | Teng-Hui Zhu <ztenghui@google.com> | 2012-03-01 15:18:05 -0800 |
---|---|---|
committer | Teng-Hui Zhu <ztenghui@google.com> | 2012-03-01 15:37:58 -0800 |
commit | d9624138723c55a0ac2af58a2e78e98cd51eba27 (patch) | |
tree | b4b402a35bd8beefc4e66adb9730257fdf5504c5 | |
parent | fdd646b2b105e23cdc8517ac055448340a667e37 (diff) | |
download | frameworks_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.java | 3 | ||||
-rw-r--r-- | core/java/android/view/WindowManagerImpl.java | 14 |
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; |