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

Commit d0750319 authored by Romain Guy's avatar Romain Guy
Browse files

Improve profiling by using Choreographer

This will avoid jank and lead to better measurements.

Change-Id: Id18587a0a0b7d45adb3a65dfc427800565cc5d0b
parent c653df46
Loading
Loading
Loading
Loading
+12 −23
Original line number Diff line number Diff line
@@ -289,8 +289,8 @@ public final class ViewRootImpl implements ViewParent,
    final PointF mLastTouchPoint = new PointF();
    
    private boolean mProfileRendering;    
    private Thread mRenderProfiler;
    private volatile boolean mRenderProfilingEnabled;
    private Choreographer.FrameCallback mRenderProfiler;
    private boolean mRenderProfilingEnabled;

    // Variables to track frames per second, enabled via DEBUG_FPS flag
    private long mFpsStartTime = -1;
@@ -2037,30 +2037,19 @@ public final class ViewRootImpl implements ViewParent,
        if (mProfileRendering) {
            mRenderProfilingEnabled = enabled;
            if (mRenderProfiler == null) {
                mRenderProfiler = new Thread(new Runnable() {
                mRenderProfiler = new Choreographer.FrameCallback() {
                    @Override
                    public void run() {
                        Log.d(TAG, "Starting profiling thread");
                        while (mRenderProfilingEnabled) {
                            mAttachInfo.mHandler.post(new Runnable() {
                                @Override
                                public void run() {
                    public void doFrame(long frameTimeNanos) {
                        mDirty.set(0, 0, mWidth, mHeight);
                        scheduleTraversals();
                                }
                            });
                            try {
                                // TODO: This should use vsync when we get an API
                                Thread.sleep(15);
                            } catch (InterruptedException e) {
                                Log.d(TAG, "Exiting profiling thread");
                        if (mRenderProfilingEnabled) {
                            Choreographer.getInstance().postFrameCallback(mRenderProfiler);
                        }
                    }
                    }
                }, "Rendering Profiler");
                mRenderProfiler.start();
                };
                Choreographer.getInstance().postFrameCallback(mRenderProfiler);
            } else {
                mRenderProfiler.interrupt();
                Choreographer.getInstance().removeFrameCallback(mRenderProfiler);
                mRenderProfiler = null;
            }
        }