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

Commit 71be9749 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix caching runtime toggle"

parents cedbe18b cdd722bb
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -136,6 +136,14 @@ void Output::setLayerCachingEnabled(bool enabled) {
    } else {
        mPlanner.reset();
    }

    for (auto* outputLayer : getOutputLayersOrderedByZ()) {
        if (!outputLayer) {
            continue;
        }

        outputLayer->editState().overrideInfo = {};
    }
}

void Output::setProjection(ui::Rotation orientation, const Rect& layerStackSpaceRect,
+21 −0
Original line number Diff line number Diff line
@@ -259,6 +259,27 @@ TEST_F(OutputTest, setLayerCachingEnabled_disablesCaching) {
    EXPECT_FALSE(mOutput->plannerEnabled());
}

TEST_F(OutputTest, setLayerCachingEnabled_disablesCachingAndResetsOverrideInfo) {
    renderengine::mock::RenderEngine renderEngine;
    const auto kSize = ui::Size(1, 1);
    EXPECT_CALL(*mRenderSurface, getSize()).WillRepeatedly(ReturnRef(kSize));
    mOutput->setLayerCachingEnabled(true);

    // Inject some layers
    InjectedLayer layer;
    layer.outputLayerState.overrideInfo.buffer = std::make_shared<
            renderengine::ExternalTexture>(new GraphicBuffer(), renderEngine,
                                           renderengine::ExternalTexture::Usage::READABLE |
                                                   renderengine::ExternalTexture::Usage::WRITEABLE);
    injectOutputLayer(layer);
    // inject a null layer to check for null exceptions
    injectNullOutputLayer();

    EXPECT_NE(nullptr, layer.outputLayerState.overrideInfo.buffer);
    mOutput->setLayerCachingEnabled(false);
    EXPECT_EQ(nullptr, layer.outputLayerState.overrideInfo.buffer);
}

/*
 * Output::setProjection()
 */
+26 −17
Original line number Diff line number Diff line
@@ -5627,9 +5627,12 @@ status_t SurfaceFlinger::onTransact(uint32_t code, const Parcel& data, Parcel* r
            // Second argument is an optional uint64 - if present, then limits enabling/disabling
            // caching to a particular physical display
            case 1040: {
                status_t error =
                        schedule([&] {
                            n = data.readInt32();
                            std::optional<PhysicalDisplayId> inputId = std::nullopt;
                if (uint64_t inputDisplayId; data.readUint64(&inputDisplayId) == NO_ERROR) {
                            if (uint64_t inputDisplayId;
                                data.readUint64(&inputDisplayId) == NO_ERROR) {
                                inputId = DisplayId::fromValue<PhysicalDisplayId>(inputDisplayId);
                                if (!inputId || getPhysicalDisplayToken(*inputId)) {
                                    ALOGE("No display with id: %" PRIu64, inputDisplayId);
@@ -5645,6 +5648,12 @@ status_t SurfaceFlinger::onTransact(uint32_t code, const Parcel& data, Parcel* r
                                    }
                                }
                            }
                            return OK;
                        }).get();

                if (error != OK) {
                    return error;
                }
                invalidateHwcGeometry();
                repaintEverything();
                return NO_ERROR;