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

Commit 6b903996 authored by Rob Carr's avatar Rob Carr Committed by Android (Google) Code Review
Browse files

Merge "Avoid traversal in tunnel mode reporter" into sc-dev

parents f8f6d4af 3e2a2991
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -540,10 +540,16 @@ bool BufferStateLayer::setApi(int32_t api) {

bool BufferStateLayer::setSidebandStream(const sp<NativeHandle>& sidebandStream) {
    if (mDrawingState.sidebandStream == sidebandStream) return false;

    if (mDrawingState.sidebandStream != nullptr && sidebandStream == nullptr) {
        mFlinger->mTunnelModeEnabledReporter->decrementTunnelModeCount();
    } else if (sidebandStream != nullptr) {
        mFlinger->mTunnelModeEnabledReporter->incrementTunnelModeCount();
    }

    mDrawingState.sidebandStream = sidebandStream;
    mDrawingState.modified = true;
    setTransactionFlags(eTransactionNeeded);

    if (!mSidebandStreamChanged.exchange(true)) {
        // mSidebandStreamChanged was false
        mFlinger->signalLayerUpdate();
+5 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@
#include "MonitoredProducer.h"
#include "SurfaceFlinger.h"
#include "TimeStats/TimeStats.h"
#include "TunnelModeEnabledReporter.h"
#include "input/InputWindow.h"

#define DEBUG_RESIZE 0
@@ -172,6 +173,10 @@ Layer::~Layer() {

    mFrameTracker.logAndResetStats(mName);
    mFlinger->onLayerDestroyed(this);

    if (mDrawingState.sidebandStream != nullptr) {
        mFlinger->mTunnelModeEnabledReporter->decrementTunnelModeCount();
    }
}

LayerCreationArgs::LayerCreationArgs(SurfaceFlinger* flinger, sp<Client> client, std::string name,
+1 −1
Original line number Diff line number Diff line
@@ -342,6 +342,7 @@ SurfaceFlinger::SurfaceFlinger(Factory& factory, SkipInitializationTag)
        mEventQueue(mFactory.createMessageQueue()),
        mCompositionEngine(mFactory.createCompositionEngine()),
        mHwcServiceName(base::GetProperty("debug.sf.hwc_service_name"s, "default"s)),
        mTunnelModeEnabledReporter(new TunnelModeEnabledReporter()),
        mInternalDisplayDensity(getDensityFromProperty("ro.sf.lcd_density", true)),
        mEmulatedDisplayDensity(getDensityFromProperty("qemu.sf.lcd_density", false)) {
    ALOGI("Using HWComposer service: %s", mHwcServiceName.c_str());
@@ -3153,7 +3154,6 @@ void SurfaceFlinger::initScheduler(const DisplayDeviceState& displayState) {
    mRegionSamplingThread =
            new RegionSamplingThread(*this, RegionSamplingThread::EnvironmentTimingTunables());
    mFpsReporter = new FpsReporter(*mFrameTimeline, *this);
    mTunnelModeEnabledReporter = new TunnelModeEnabledReporter(*this);
    // Dispatch a mode change request for the primary display on scheduler
    // initialization, so that the EventThreads always contain a reference to a
    // prior configuration.
+1 −0
Original line number Diff line number Diff line
@@ -364,6 +364,7 @@ private:
    // For unit tests
    friend class TestableSurfaceFlinger;
    friend class TransactionApplicationTest;
    friend class TunnelModeEnabledReporterTest;

    using RefreshRate = scheduler::RefreshRateConfigs::RefreshRate;
    using VsyncModulator = scheduler::VsyncModulator;
+2 −9
Original line number Diff line number Diff line
@@ -26,17 +26,10 @@

namespace android {

TunnelModeEnabledReporter::TunnelModeEnabledReporter(SurfaceFlinger& flinger) : mFlinger(flinger) {}
TunnelModeEnabledReporter::TunnelModeEnabledReporter() {}

void TunnelModeEnabledReporter::updateTunnelModeStatus() {
    bool tunnelModeEnabled = false;
    mFlinger.mCurrentState.traverse([&](Layer* layer) {
        auto& state = layer->getDrawingState();
        if (state.sidebandStream != nullptr) {
            tunnelModeEnabled = true;
            return;
        }
    });
    bool tunnelModeEnabled = mTunnelModeCount > 0;
    dispatchTunnelModeEnabled(tunnelModeEnabled);
}

Loading