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 Original line Diff line number Diff line
@@ -540,10 +540,16 @@ bool BufferStateLayer::setApi(int32_t api) {


bool BufferStateLayer::setSidebandStream(const sp<NativeHandle>& sidebandStream) {
bool BufferStateLayer::setSidebandStream(const sp<NativeHandle>& sidebandStream) {
    if (mDrawingState.sidebandStream == sidebandStream) return false;
    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.sidebandStream = sidebandStream;
    mDrawingState.modified = true;
    mDrawingState.modified = true;
    setTransactionFlags(eTransactionNeeded);
    setTransactionFlags(eTransactionNeeded);

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


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


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

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


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


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


namespace android {
namespace android {


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


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


Loading