Loading services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +57 −26 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading @@ -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; } Loading Loading @@ -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); } Loading Loading @@ -711,6 +739,7 @@ Error AidlComposer::execute() { return Error::NONE; } { // scope for results std::vector<CommandResultPayload> results; auto status = mAidlComposerClient->executeCommands(commands, &results); if (!status.isOk()) { Loading @@ -718,7 +747,8 @@ Error AidlComposer::execute() { 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) { Loading Loading @@ -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; } Loading Loading
services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +57 −26 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; } Loading Loading @@ -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; } Loading @@ -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; } Loading Loading @@ -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); } Loading Loading @@ -711,6 +739,7 @@ Error AidlComposer::execute() { return Error::NONE; } { // scope for results std::vector<CommandResultPayload> results; auto status = mAidlComposerClient->executeCommands(commands, &results); if (!status.isOk()) { Loading @@ -718,7 +747,8 @@ Error AidlComposer::execute() { 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) { Loading Loading @@ -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; } Loading