From de79278d18eefb3bb30fc2d4bb7dba8f63136bb5 Mon Sep 17 00:00:00 2001 From: Ady Abraham Date: Mon, 20 Dec 2021 10:00:49 -0800 Subject: SF: cleanup CommandWriterBase and CommandReaderBase part 2 Bug: 208856704 Test: VTS Change-Id: I10f228e2c7b49cb6e2bece40605d55509cd8b5b4 --- .../DisplayHardware/AidlComposerHal.cpp | 83 +++++++++++++++------- 1 file changed, 57 insertions(+), 26 deletions(-) diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp index 081f526356..d97a399dec 100644 --- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp @@ -373,10 +373,14 @@ Error AidlComposer::getActiveConfig(Display display, Config* outConfig) { Error AidlComposer::getChangedCompositionTypes( Display display, std::vector* outLayers, std::vector* outTypes) { - std::vector layers; - mReader.takeChangedCompositionTypes(translate(display), &layers, outTypes); + const auto changedLayers = mReader.takeChangedCompositionTypes(translate(display)); + outLayers->reserve(changedLayers.size()); + outTypes->reserve(changedLayers.size()); - *outLayers = translate(layers); + for (const auto& layer : changedLayers) { + outLayers->emplace_back(translate(layer.layer)); + outTypes->emplace_back(layer.composition); + } return Error::NONE; } @@ -429,10 +433,15 @@ Error AidlComposer::getDisplayName(Display display, std::string* outName) { Error AidlComposer::getDisplayRequests(Display display, uint32_t* outDisplayRequestMask, std::vector* outLayers, std::vector* outLayerRequestMasks) { - std::vector layers; - mReader.takeDisplayRequests(translate(display), outDisplayRequestMask, &layers, - outLayerRequestMasks); - *outLayers = translate(layers); + const auto displayRequests = mReader.takeDisplayRequests(translate(display)); + *outDisplayRequestMask = translate(displayRequests.mask); + outLayers->reserve(displayRequests.layerRequests.size()); + outLayerRequestMasks->reserve(displayRequests.layerRequests.size()); + + for (const auto& layer : displayRequests.layerRequests) { + outLayers->emplace_back(translate(layer.layer)); + outLayerRequestMasks->emplace_back(translate(layer.mask)); + } return Error::NONE; } @@ -469,9 +478,17 @@ Error AidlComposer::getHdrCapabilities(Display display, std::vector* outTyp Error AidlComposer::getReleaseFences(Display display, std::vector* outLayers, std::vector* outReleaseFences) { - std::vector layers; - mReader.takeReleaseFences(translate(display), &layers, outReleaseFences); - *outLayers = translate(layers); + auto fences = mReader.takeReleaseFences(translate(display)); + outLayers->reserve(fences.size()); + outReleaseFences->reserve(fences.size()); + + for (auto& fence : fences) { + outLayers->emplace_back(translate(fence.layer)); + // take ownership + const int fenceOwner = fence.fence.get(); + *fence.fence.getR() = -1; + outReleaseFences->emplace_back(fenceOwner); + } return Error::NONE; } @@ -484,8 +501,10 @@ Error AidlComposer::presentDisplay(Display display, int* outPresentFence) { return error; } - mReader.takePresentFence(translate(display), outPresentFence); - + auto fence = mReader.takePresentFence(translate(display)); + // take ownership + *outPresentFence = fence.get(); + *fence.getR() = -1; return Error::NONE; } @@ -597,13 +616,22 @@ Error AidlComposer::presentOrValidateDisplay(Display display, nsecs_t expectedPr return error; } - mReader.takePresentOrValidateStage(translate(display), state); + const auto result = mReader.takePresentOrValidateStage(translate(display)); + if (!result.has_value()) { + *state = translate(-1); + return Error::NO_RESOURCES; + } + + *state = translate(*result); - if (*state == 1) { // Present succeeded - mReader.takePresentFence(translate(display), outPresentFence); + if (*result == PresentOrValidate::Result::Presented) { + auto fence = mReader.takePresentFence(translate(display)); + // take ownership + *outPresentFence = fence.get(); + *fence.getR() = -1; } - if (*state == 0) { // Validate succeeded. + if (*result == PresentOrValidate::Result::Validated) { mReader.hasChanges(translate(display), outNumTypes, outNumRequests); } @@ -711,14 +739,16 @@ Error AidlComposer::execute() { return Error::NONE; } - std::vector results; - auto status = mAidlComposerClient->executeCommands(commands, &results); - if (!status.isOk()) { - ALOGE("executeCommands failed %s", status.getDescription().c_str()); - return static_cast(status.getServiceSpecificError()); - } + { // scope for results + std::vector results; + auto status = mAidlComposerClient->executeCommands(commands, &results); + if (!status.isOk()) { + ALOGE("executeCommands failed %s", status.getDescription().c_str()); + return static_cast(status.getServiceSpecificError()); + } - mReader.parse(results); + mReader.parse(std::move(results)); + } const auto commandErrors = mReader.takeErrors(); Error error = Error::NONE; for (const auto& cmdErr : commandErrors) { @@ -993,9 +1023,10 @@ V2_4::Error AidlComposer::getLayerGenericMetadataKeys( Error AidlComposer::getClientTargetProperty( Display display, IComposerClient::ClientTargetProperty* outClientTargetProperty, float* whitePointNits) { - ClientTargetProperty property; - mReader.takeClientTargetProperty(translate(display), &property, whitePointNits); - *outClientTargetProperty = translate(property); + const auto property = mReader.takeClientTargetProperty(translate(display)); + *outClientTargetProperty = + translate(property.clientTargetProperty); + *whitePointNits = property.whitePointNits; return Error::NONE; } -- cgit v1.2.3-59-g8ed1b