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

Commit 79e8d179 authored by Tomasz Mikolajewski's avatar Tomasz Mikolajewski
Browse files

Speed up initiating resizing.

This CL effectively starts resizing on mouse down click on the window
edges by forcing reporting a resize before any bounds changes.

As a result the app will kick in the backdrop renderer before
configuration change applies, so before a potential activity restart.

Test: Try to resize Play store quickly. Should resize smoother.
Bug: 64327032
Change-Id: I668ea9f4c264e18ddee3ed9e8d03365631f10417
parent 0afe0849
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -399,6 +399,27 @@ class TaskPositioner implements DimLayer.DimLayerUser {
        mStartOrientationWasLandscape = startBounds.width() >= startBounds.height();
        mWindowOriginalBounds.set(startBounds);

        // Notify the app that resizing has started, even though we haven't received any new
        // bounds yet. This will guarantee that the app starts the backdrop renderer before
        // configuration changes which could cause an activity restart.
        if (mResizing) {
            synchronized (mService.mWindowMap) {
                notifyMoveLocked(startX, startY);
            }

            // Perform the resize on the WMS handler thread when we don't have the WMS lock held
            // to ensure that we don't deadlock WMS and AMS. Note that WindowPositionerEventReceiver
            // callbacks are delivered on the same handler so this initial resize is always
            // guaranteed to happen before subsequent drag resizes.
            mService.mH.post(() -> {
                try {
                    mService.mActivityManager.resizeTask(
                            mTask.mTaskId, startBounds, RESIZE_MODE_USER_FORCED);
                } catch (RemoteException e) {
                }
            });
        }

        // Make sure we always have valid drag bounds even if the drag ends before any move events
        // have been handled.
        mWindowDragBounds.set(startBounds);