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

Commit 33ed738d authored by Romain Guy's avatar Romain Guy
Browse files

Expose View.executeHardwareAction()

Bug #10911502

Views creating hardware resources need a way to safely interact
with the hardware. This new method invokes HardwareRenderer.safelyRun()
which executes a Runnable after making sure the hardawre rendering
context is in a valid state.

With the OpenGL backend, executeHardwareAction() tries to call
eglMakeCurrent() if needed. This method is not guaranteed to
work.

Change-Id: I38ec65132eeba85605cffb1a6de12b7a0184e213
parent c449613e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -213,8 +213,8 @@ public class TextureView extends View {
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if (mLayer != null && mAttachInfo != null && mAttachInfo.mHardwareRenderer != null) {
            boolean success = mAttachInfo.mHardwareRenderer.safelyRun(new Runnable() {
        if (mLayer != null) {
            boolean success = executeHardwareAction(new Runnable() {
                @Override
                public void run() {
                    destroySurface();
+27 −0
Original line number Diff line number Diff line
@@ -12368,6 +12368,33 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        }
    }
    /**
     * This method ensures the hardware renderer is in a valid state
     * before executing the specified action.
     *
     * This method will attempt to set a valid state even if the window
     * the renderer is attached to was destroyed.
     *
     * This method is not guaranteed to work. If the hardware renderer
     * does not exist or cannot be put in a valid state, this method
     * will not executed the specified action.
     *
     * The specified action is executed synchronously.
     *
     * @param action The action to execute after the renderer is in a valid state
     *
     * @return True if the specified Runnable was executed, false otherwise
     *
     * @hide
     */
    public boolean executeHardwareAction(Runnable action) {
        //noinspection SimplifiableIfStatement
        if (mAttachInfo != null && mAttachInfo.mHardwareRenderer != null) {
            return mAttachInfo.mHardwareRenderer.safelyRun(action);
        }
        return false;
    }
    void invalidateInheritedLayoutMode(int layoutModeOfRoot) {
    }