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

Commit f83de3a5 authored by Winson Chung's avatar Winson Chung Committed by android-build-merger
Browse files

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

am: 3cf66a40

Change-Id: Ib330ddf34877350b7cea509de31730d297215b78
parents 298baf22 3cf66a40
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.