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

Commit 3cf66a40 authored by Winson Chung's avatar Winson Chung Committed by Android (Google) Code Review
Browse files

Merge "Skip redrawing the bars if the surface aspect ratio matches" into qt-dev

parents e8d09721 357deda0
Loading
Loading
Loading
Loading
+21 −9
Original line number Diff line number Diff line
@@ -317,6 +317,11 @@ class TaskSnapshotSurface implements StartingSurface {
            throw new IllegalStateException("mSurface does not hold a valid surface.");
        }
        final SurfaceSession session = new SurfaceSession();
        // We consider nearly matched dimensions as there can be rounding errors and the user won't
        // notice very minute differences from scaling one dimension more than the other
        final boolean aspectRatioMismatch = Math.abs(
                ((float) buffer.getWidth() / buffer.getHeight())
                - ((float) mFrame.width() / mFrame.height())) > 0.01f;

        // Keep a reference to it such that it doesn't get destroyed when finalized.
        mChildSurfaceControl = new SurfaceControl.Builder(session)
@@ -328,16 +333,21 @@ class TaskSnapshotSurface implements StartingSurface {
        Surface surface = new Surface();
        surface.copyFrom(mChildSurfaceControl);

        // Clip off ugly navigation bar.
        final Rect crop = calculateSnapshotCrop();
        final Rect frame = calculateSnapshotFrame(crop);
        final Rect frame;
        SurfaceControl.openTransaction();
        try {
            // We can just show the surface here as it will still be hidden as the parent is
            // still hidden.
            mChildSurfaceControl.show();
            if (aspectRatioMismatch) {
                // Clip off ugly navigation bar.
                final Rect crop = calculateSnapshotCrop();
                frame = calculateSnapshotFrame(crop);
                mChildSurfaceControl.setWindowCrop(crop);
                mChildSurfaceControl.setPosition(frame.left, frame.top);
            } else {
                frame = null;
            }

            // Scale the mismatch dimensions to fill the task bounds
            final float scale = 1 / mSnapshot.getScale();
@@ -348,11 +358,13 @@ class TaskSnapshotSurface implements StartingSurface {
        surface.attachAndQueueBuffer(buffer);
        surface.release();

        if (aspectRatioMismatch) {
            final Canvas c = mSurface.lockCanvas(null);
            drawBackgroundAndBars(c, frame);
            mSurface.unlockCanvasAndPost(c);
            mSurface.release();
        }
    }

    /**
     * Calculates the snapshot crop in snapshot coordinate space.