diff options
| author | 2021-12-20 10:00:49 -0800 | |
|---|---|---|
| committer | 2021-12-23 03:39:22 +0000 | |
| commit | de79278d18eefb3bb30fc2d4bb7dba8f63136bb5 (patch) | |
| tree | 4fce3253f11b2dcdafcab14814f7adb549b26620 | |
| parent | c451b5e35cf3d7aef6cea8a75746585aa9890d96 (diff) | |
SF: cleanup CommandWriterBase and CommandReaderBase part 2
Bug: 208856704
Test: VTS
Change-Id: I10f228e2c7b49cb6e2bece40605d55509cd8b5b4
| -rw-r--r-- | services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp | 83 |
1 files 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<Layer>* outLayers, std::vector<aidl::android::hardware::graphics::composer3::Composition>* outTypes) { - std::vector<int64_t> layers; - mReader.takeChangedCompositionTypes(translate<int64_t>(display), &layers, outTypes); + const auto changedLayers = mReader.takeChangedCompositionTypes(translate<int64_t>(display)); + outLayers->reserve(changedLayers.size()); + outTypes->reserve(changedLayers.size()); - *outLayers = translate<Layer>(layers); + for (const auto& layer : changedLayers) { + outLayers->emplace_back(translate<Layer>(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<Layer>* outLayers, std::vector<uint32_t>* outLayerRequestMasks) { - std::vector<int64_t> layers; - mReader.takeDisplayRequests(translate<int64_t>(display), outDisplayRequestMask, &layers, - outLayerRequestMasks); - *outLayers = translate<Layer>(layers); + const auto displayRequests = mReader.takeDisplayRequests(translate<int64_t>(display)); + *outDisplayRequestMask = translate<uint32_t>(displayRequests.mask); + outLayers->reserve(displayRequests.layerRequests.size()); + outLayerRequestMasks->reserve(displayRequests.layerRequests.size()); + + for (const auto& layer : displayRequests.layerRequests) { + outLayers->emplace_back(translate<Layer>(layer.layer)); + outLayerRequestMasks->emplace_back(translate<uint32_t>(layer.mask)); + } return Error::NONE; } @@ -469,9 +478,17 @@ Error AidlComposer::getHdrCapabilities(Display display, std::vector<Hdr>* outTyp Error AidlComposer::getReleaseFences(Display display, std::vector<Layer>* outLayers, std::vector<int>* outReleaseFences) { - std::vector<int64_t> layers; - mReader.takeReleaseFences(translate<int64_t>(display), &layers, outReleaseFences); - *outLayers = translate<Layer>(layers); + auto fences = mReader.takeReleaseFences(translate<int64_t>(display)); + outLayers->reserve(fences.size()); + outReleaseFences->reserve(fences.size()); + + for (auto& fence : fences) { + outLayers->emplace_back(translate<Layer>(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<int64_t>(display), outPresentFence); - + auto fence = mReader.takePresentFence(translate<int64_t>(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<int64_t>(display), state); + const auto result = mReader.takePresentOrValidateStage(translate<int64_t>(display)); + if (!result.has_value()) { + *state = translate<uint32_t>(-1); + return Error::NO_RESOURCES; + } + + *state = translate<uint32_t>(*result); - if (*state == 1) { // Present succeeded - mReader.takePresentFence(translate<int64_t>(display), outPresentFence); + if (*result == PresentOrValidate::Result::Presented) { + auto fence = mReader.takePresentFence(translate<int64_t>(display)); + // take ownership + *outPresentFence = fence.get(); + *fence.getR() = -1; } - if (*state == 0) { // Validate succeeded. + if (*result == PresentOrValidate::Result::Validated) { mReader.hasChanges(translate<int64_t>(display), outNumTypes, outNumRequests); } @@ -711,14 +739,16 @@ Error AidlComposer::execute() { return Error::NONE; } - std::vector<CommandResultPayload> results; - auto status = mAidlComposerClient->executeCommands(commands, &results); - if (!status.isOk()) { - ALOGE("executeCommands failed %s", status.getDescription().c_str()); - return static_cast<Error>(status.getServiceSpecificError()); - } + { // scope for results + std::vector<CommandResultPayload> results; + auto status = mAidlComposerClient->executeCommands(commands, &results); + if (!status.isOk()) { + ALOGE("executeCommands failed %s", status.getDescription().c_str()); + return static_cast<Error>(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<int64_t>(display), &property, whitePointNits); - *outClientTargetProperty = translate<IComposerClient::ClientTargetProperty>(property); + const auto property = mReader.takeClientTargetProperty(translate<int64_t>(display)); + *outClientTargetProperty = + translate<IComposerClient::ClientTargetProperty>(property.clientTargetProperty); + *whitePointNits = property.whitePointNits; return Error::NONE; } |