Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1768998 authored by Jack Palevich's avatar Jack Palevich
Browse files

Improve our EGL management when pausing / resuming.

We now release the EGL context when pausing. This
is required to reduce the chance of running out of
contexts on devices which support a limited number
of active EGL contexts.

Someday we may implement a global EGL context
manager that will allow us to let EGL contexts
persist until another activity needs an EGL
context. But for now, without such a manager,
we take the conservative approach.

Separately, we now terminate EGL when
pausing on Sapphire. This is a requirement of the
Sapphire OpenGL driver.
parent 07353a1e
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -1179,6 +1179,12 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
                                        Log.i("GLThread", "releasing EGL context because paused tid=" + getId());
                                    }
                                }
                                if (sGLThreadManager.shouldTerminateEGLWhenPausing()) {
                                    mEglHelper.finish();
                                    if (LOG_SURFACE) {
                                        Log.i("GLThread", "terminating EGL because paused tid=" + getId());
                                    }
                                }
                            }

                            // Have we lost the surface view surface?
@@ -1549,6 +1555,13 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
        }

        public synchronized boolean shouldReleaseEGLContextWhenPausing() {
            // Release the EGL context when pausing even if
            // the hardware supports multiple EGL contexts.
            // Otherwise the device could run out of EGL contexts.
            return true;
        }

        public synchronized boolean shouldTerminateEGLWhenPausing() {
            checkGLESVersion();
            return !mMultipleGLESContextsAllowed;
        }