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

Commit 046a16c0 authored by Matthew Hui's avatar Matthew Hui Committed by Steve Kondik
Browse files

Postpone sending scroll message to webcore thread

Post a message to the UI thread instead, to send the
scroll message later.

Change-Id: Iff94af37e9070e63e0797195c7588343ab077bb3
parent 2bd07c10
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -3785,6 +3785,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
            invalidate();  // So we draw again

            if (!mScroller.isFinished()) {
                mSendScroll.setPostpone(true);
                int rangeX = computeMaxScrollX();
                int rangeY = computeMaxScrollY();
                int overflingDistance = mOverflingDistance;
@@ -3812,6 +3813,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                if (mOverScrollGlow != null) {
                    mOverScrollGlow.absorbGlow(x, y, oldX, oldY, rangeX, rangeY);
                }
                mSendScroll.setPostpone(false);
            } else {
                if (mTouchMode == TOUCH_DRAG_LAYER_MODE) {
                    // Update the layer position instead of WebView.
@@ -3831,7 +3833,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                    }
                }
                if (oldX != getScrollX() || oldY != getScrollY()) {
                    sendOurVisibleRect();
                    mSendScroll.send(true);
                }
            }
        } else {
@@ -4636,7 +4638,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
            if (oldScrollX != getScrollX() || oldScrollY != getScrollY()) {
                mWebViewPrivate.onScrollChanged(getScrollX(), getScrollY(), oldScrollX, oldScrollY);
            } else {
                sendOurVisibleRect();
                mSendScroll.send(true);
            }
        }
    }
@@ -5611,10 +5613,31 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
        contentScrollTo(scrollX, scrollY, false);
    }

    private final class SendScrollToWebCore implements Runnable {
        public void run() {
            if (!mInOverScrollMode) {
                sendOurVisibleRect();
            }
        }
        private boolean mPostpone = false;
        public void setPostpone(boolean set) { mPostpone = set; }
        public void send(boolean force) {
            mPrivateHandler.removeCallbacks(this);
            if (!mPostpone || force) {
                run();
            } else {
                mPrivateHandler.postAtFrontOfQueue(this);
            }
        }
    }

    SendScrollToWebCore mSendScroll = new SendScrollToWebCore();

    @Override
    public void onScrollChanged(int l, int t, int oldl, int oldt) {
        mSendScroll.send(false);

        if (!mInOverScrollMode) {
            sendOurVisibleRect();
            // update WebKit if visible title bar height changed. The logic is same
            // as getVisibleTitleHeightImpl.
            int titleHeight = getTitleHeight();