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

Commit edc1f1b0 authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Robert Chou
Browse files

Avoid calling into HWC in onFirstRef

The information is already available - no need to call into HWC.

This saved around 150-200us per onFirstRef call.

Test: atest UiAutomationTest#testWindowContentFrameStats
Test: PerfTransitionTest
Test: LayerTypeTransactionTest#RefreshRateIsInitialized
Bug: 112352758
Change-Id: I406754d33d53d6c60e354f5a403f1d5568f714c4
Merged-In: I406754d33d53d6c60e354f5a403f1d5568f714c4
parent 797f9509
Loading
Loading
Loading
Loading
+1 −16
Original line number Diff line number Diff line
@@ -133,22 +133,7 @@ Layer::Layer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& n
    CompositorTiming compositorTiming;
    flinger->getCompositorTiming(&compositorTiming);
    mFrameEventHistory.initializeCompositorTiming(compositorTiming);
}

void Layer::onFirstRef() NO_THREAD_SAFETY_ANALYSIS {
    if (!isCreatedFromMainThread()) {
        // Grab the SF state lock during this since it's the only way to safely access HWC
        mFlinger->mStateLock.lock();
    }

    const auto& hwc = mFlinger->getHwComposer();
    const auto& activeConfig = hwc.getActiveConfig(HWC_DISPLAY_PRIMARY);
    nsecs_t displayPeriod = activeConfig->getVsyncPeriod();
    mFrameTracker.setDisplayRefreshPeriod(displayPeriod);

    if (!isCreatedFromMainThread()) {
        mFlinger->mStateLock.unlock();
    }
    mFrameTracker.setDisplayRefreshPeriod(compositorTiming.interval);
}

Layer::~Layer() {
+0 −2
Original line number Diff line number Diff line
@@ -618,8 +618,6 @@ protected:
              : mFlinger(flinger), mLayer(layer) {}
    };

    virtual void onFirstRef();

    friend class impl::SurfaceInterceptor;

    void commitTransaction(const State& stateToCommit);