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

Commit a4d5444d authored by Minsu Han's avatar Minsu Han Committed by John Reck
Browse files

Update surface for the HardwareRenderer.

When using lockHardwareCanvas() on Surface, if the device is rotated,
then the changed size information is not set to the HardwareRenderer.
So as the area to be drawn changes, there is a problem where only some areas are drawn.
The problem occurs only on Skiagl, but it is also necessary to make this correction for all renderer like Skiavk.

Test: make
Flag: EXEMPT bugfix
Fixes: 386837581

Change-Id: I31ebff7e982d3ae8ca8ccea77764bbcf27c26b05
parent 41995c9d
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -1419,6 +1419,8 @@ public class Surface implements Parcelable {
        private HardwareRenderer mHardwareRenderer;
        private HardwareRenderer mHardwareRenderer;
        private RecordingCanvas mCanvas;
        private RecordingCanvas mCanvas;
        private final boolean mIsWideColorGamut;
        private final boolean mIsWideColorGamut;
        private int mWidth;
        private int mHeight;


        HwuiContext(boolean isWideColorGamut) {
        HwuiContext(boolean isWideColorGamut) {
            mRenderNode = RenderNode.create("HwuiCanvas", null);
            mRenderNode = RenderNode.create("HwuiCanvas", null);
@@ -1435,12 +1437,20 @@ public class Surface implements Parcelable {
                            : ActivityInfo.COLOR_MODE_DEFAULT);
                            : ActivityInfo.COLOR_MODE_DEFAULT);
            mHardwareRenderer.setLightSourceAlpha(0.0f, 0.0f);
            mHardwareRenderer.setLightSourceAlpha(0.0f, 0.0f);
            mHardwareRenderer.setLightSourceGeometry(0.0f, 0.0f, 0.0f, 0.0f);
            mHardwareRenderer.setLightSourceGeometry(0.0f, 0.0f, 0.0f, 0.0f);
            Point p = Surface.this.getDefaultSize();
            mWidth = p.x;
            mHeight = p.y;
        }
        }


        Canvas lockCanvas(int width, int height) {
        Canvas lockCanvas(int width, int height) {
            if (mCanvas != null) {
            if (mCanvas != null) {
                throw new IllegalStateException("Surface was already locked!");
                throw new IllegalStateException("Surface was already locked!");
            }
            }
            if (mWidth != width || mHeight != height) {
                mWidth = width;
                mHeight = height;
                mHardwareRenderer.setSurface(Surface.this, true);
            }
            mCanvas = mRenderNode.beginRecording(width, height);
            mCanvas = mRenderNode.beginRecording(width, height);
            return mCanvas;
            return mCanvas;
        }
        }