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

Commit 74d031c5 authored by Yisroel Forta's avatar Yisroel Forta Committed by Android (Google) Code Review
Browse files

Merge "Remove lock from send start timestamps" into main

parents 866a8d2e b056f98c
Loading
Loading
Loading
Loading
+24 −37
Original line number Diff line number Diff line
@@ -304,6 +304,7 @@ import java.util.OptionalInt;
import java.util.Queue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
import java.util.function.Predicate;
/**
@@ -1201,8 +1202,7 @@ public final class ViewRootImpl implements ViewParent,
    private String mLargestViewTraceName;
    private final boolean mAppStartInfoTimestampsFlagValue;
    @GuardedBy("this")
    private boolean mAppStartTimestampsSent = false;
    private AtomicBoolean mAppStartTimestampsSent = new AtomicBoolean(false);
    private boolean mAppStartTrackingStarted = false;
    private long mRenderThreadDrawStartTimeNs = -1;
    private long mFirstFramePresentedTimeNs = -1;
@@ -2647,7 +2647,7 @@ public final class ViewRootImpl implements ViewParent,
                destroySurface();
                // Reset so they can be sent again for warm starts.
                mAppStartTimestampsSent = false;
                mAppStartTimestampsSent.set(false);
                mAppStartTrackingStarted = false;
                mRenderThreadDrawStartTimeNs = -1;
                mFirstFramePresentedTimeNs = -1;
@@ -4503,43 +4503,30 @@ public final class ViewRootImpl implements ViewParent,
    }
    private void maybeSendAppStartTimes() {
        synchronized (this) {
            if (mAppStartTimestampsSent) {
        if (mAppStartTimestampsSent.get()) {
            // Don't send timestamps more than once.
            return;
        }
            // If we already have {@link mRenderThreadDrawStartTimeNs} then pass it through, if not
            // post to main thread and check if we have it there.
            if (mRenderThreadDrawStartTimeNs != -1) {
                sendAppStartTimesLocked();
            } else {
        // Post to main thread
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                        synchronized (ViewRootImpl.this) {
                if (mRenderThreadDrawStartTimeNs == -1) {
                    return;
                }
                            sendAppStartTimesLocked();
                        }
                    }
                });
            }
        }
    }
    @GuardedBy("this")
    private void sendAppStartTimesLocked() {
                try {
                    ActivityManager.getService().reportStartInfoViewTimestamps(
                            mRenderThreadDrawStartTimeNs, mFirstFramePresentedTimeNs);
            mAppStartTimestampsSent = true;
                    mAppStartTimestampsSent.set(true);
                } catch (RemoteException e) {
                    // Ignore, timestamps may be lost.
                    if (DBG) Log.d(TAG, "Exception attempting to report start timestamps.", e);
                }
            }
        });
    }
    /**
     * Helper used to notify the service to block projection when a sensitive