static void startTrimMemory(int level) {
      if (sEgl == null || sEglConfig == null) return;

      Gl20RendererEglContext managedContext = (Gl20RendererEglContext) sEglContextStorage.get();
      // We do not have OpenGL objects
      if (managedContext == null) {
        return;
      } else {
        usePbufferSurface(managedContext.getContext());
      }

      if (level >= ComponentCallbacks2.TRIM_MEMORY_COMPLETE) {
        GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_FULL);
      } else if (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
        GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_MODERATE);
      }
    }
    @Override
    boolean safelyRun(Runnable action) {
      boolean needsContext = true;
      if (isEnabled() && checkCurrent() != SURFACE_STATE_ERROR) needsContext = false;

      if (needsContext) {
        Gl20RendererEglContext managedContext = (Gl20RendererEglContext) sEglContextStorage.get();
        if (managedContext == null) return false;
        usePbufferSurface(managedContext.getContext());
      }

      try {
        action.run();
      } finally {
        if (needsContext) {
          sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
        }
      }

      return true;
    }