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

Commit e0dbd002 authored by Jeff Brown's avatar Jeff Brown
Browse files

Mark input and sensor messages as asynchronous.

Set a barrier on traversals.

Vsync is still not enabled by default in this patch so there
should be no observable effect from these changes.

Change-Id: Ie12081b95a8f1e81ed686edf747cc62f2e044b7e
parent 0f85ce38
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -616,6 +616,7 @@ public class SensorManager
            Message msg = Message.obtain();
            Message msg = Message.obtain();
            msg.what = 0;
            msg.what = 0;
            msg.obj = t;
            msg.obj = t;
            msg.setAsynchronous(true);
            mHandler.sendMessage(msg);
            mHandler.sendMessage(msg);
        }
        }
    }
    }
+9 −4
Original line number Original line Diff line number Diff line
@@ -235,8 +235,9 @@ public final class Choreographer {
                if (isRunningOnLooperThreadLocked()) {
                if (isRunningOnLooperThreadLocked()) {
                    doScheduleVsyncLocked();
                    doScheduleVsyncLocked();
                } else {
                } else {
                    mHandler.sendMessageAtFrontOfQueue(
                    Message msg = mHandler.obtainMessage(MSG_DO_SCHEDULE_VSYNC);
                            mHandler.obtainMessage(MSG_DO_SCHEDULE_VSYNC));
                    msg.setAsynchronous(true);
                    mHandler.sendMessageAtFrontOfQueue(msg);
                }
                }
            } else {
            } else {
                final long now = SystemClock.uptimeMillis();
                final long now = SystemClock.uptimeMillis();
@@ -244,7 +245,9 @@ public final class Choreographer {
                if (DEBUG) {
                if (DEBUG) {
                    Log.d(TAG, "Scheduling animation in " + (nextAnimationTime - now) + " ms.");
                    Log.d(TAG, "Scheduling animation in " + (nextAnimationTime - now) + " ms.");
                }
                }
                mHandler.sendEmptyMessageAtTime(MSG_DO_ANIMATION, nextAnimationTime);
                Message msg = mHandler.obtainMessage(MSG_DO_ANIMATION);
                msg.setAsynchronous(true);
                mHandler.sendMessageAtTime(msg, nextAnimationTime);
            }
            }
        }
        }
    }
    }
@@ -258,7 +261,9 @@ public final class Choreographer {
                if (DEBUG) {
                if (DEBUG) {
                    Log.d(TAG, "Scheduling draw immediately.");
                    Log.d(TAG, "Scheduling draw immediately.");
                }
                }
                mHandler.sendEmptyMessage(MSG_DO_DRAW);
                Message msg = mHandler.obtainMessage(MSG_DO_DRAW);
                msg.setAsynchronous(true);
                mHandler.sendMessage(msg);
            }
            }
        }
        }
    }
    }
+12 −2
Original line number Original line Diff line number Diff line
@@ -213,6 +213,7 @@ public final class ViewRootImpl implements ViewParent,
    final Rect mVisRect; // used to retrieve visible rect of focused view.
    final Rect mVisRect; // used to retrieve visible rect of focused view.


    boolean mTraversalScheduled;
    boolean mTraversalScheduled;
    int mTraversalBarrier;
    long mLastTraversalFinishedTimeNanos;
    long mLastTraversalFinishedTimeNanos;
    long mLastDrawFinishedTimeNanos;
    long mLastDrawFinishedTimeNanos;
    boolean mWillDrawSoon;
    boolean mWillDrawSoon;
@@ -839,22 +840,28 @@ public final class ViewRootImpl implements ViewParent,
    public void scheduleTraversals() {
    public void scheduleTraversals() {
        if (!mTraversalScheduled) {
        if (!mTraversalScheduled) {
            mTraversalScheduled = true;
            mTraversalScheduled = true;
            mTraversalBarrier = mHandler.getLooper().postSyncBarrier();
            scheduleFrame();
            scheduleFrame();
        }
        }
    }
    }


    public void unscheduleTraversals() {
    public void unscheduleTraversals() {
        if (mTraversalScheduled) {
            mTraversalScheduled = false;
            mTraversalScheduled = false;
            mHandler.getLooper().removeSyncBarrier(mTraversalBarrier);
        }
    }
    }


    void scheduleFrame() {
    void scheduleFrame() {
        if (!mFrameScheduled) {
        if (!mFrameScheduled) {
            mChoreographer.postDrawCallback(mFrameRunnable);
            mFrameScheduled = true;
            mFrameScheduled = true;
            mChoreographer.postDrawCallback(mFrameRunnable);
        }
        }
    }
    }


    void unscheduleFrame() {
    void unscheduleFrame() {
        unscheduleTraversals();

        if (mFrameScheduled) {
        if (mFrameScheduled) {
            mFrameScheduled = false;
            mFrameScheduled = false;
            mChoreographer.removeDrawCallback(mFrameRunnable);
            mChoreographer.removeDrawCallback(mFrameRunnable);
@@ -869,6 +876,7 @@ public final class ViewRootImpl implements ViewParent,


        if (mTraversalScheduled) {
        if (mTraversalScheduled) {
            mTraversalScheduled = false;
            mTraversalScheduled = false;
            mHandler.getLooper().removeSyncBarrier(mTraversalBarrier);
            doTraversal();
            doTraversal();
        }
        }
    }
    }
@@ -3989,11 +3997,13 @@ public final class ViewRootImpl implements ViewParent,


    public void dispatchKey(KeyEvent event) {
    public void dispatchKey(KeyEvent event) {
        Message msg = mHandler.obtainMessage(MSG_DISPATCH_KEY, event);
        Message msg = mHandler.obtainMessage(MSG_DISPATCH_KEY, event);
        msg.setAsynchronous(true);
        mHandler.sendMessage(msg);
        mHandler.sendMessage(msg);
    }
    }


    public void dispatchKeyFromIme(KeyEvent event) {
    public void dispatchKeyFromIme(KeyEvent event) {
        Message msg = mHandler.obtainMessage(MSG_DISPATCH_KEY_FROM_IME, event);
        Message msg = mHandler.obtainMessage(MSG_DISPATCH_KEY_FROM_IME, event);
        msg.setAsynchronous(true);
        mHandler.sendMessage(msg);
        mHandler.sendMessage(msg);
    }
    }


+0 −1
Original line number Original line Diff line number Diff line
@@ -19,7 +19,6 @@ package android.view.inputmethod;
import android.content.Context;
import android.content.Context;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.os.SystemClock;
import android.text.Editable;
import android.text.Editable;
import android.text.NoCopySpan;
import android.text.NoCopySpan;