diff options
author | Andy Quan <andyq@google.com> | 2023-06-02 14:50:13 -0700 |
---|---|---|
committer | Andy Quan <andyq@google.com> | 2023-06-02 14:50:13 -0700 |
commit | d62835f99043f85ecfc1d7283add550b047068f9 (patch) | |
tree | 9f13793d31ef6c216531cc322e5780fe38a84fbe /graphics/composer/aidl/vts/VtsComposerClient.cpp | |
parent | 9f3a2e40bf3ca1e866f5c6ec774620b05a06439b (diff) | |
parent | 8c308539d804a6efb2272e4c9e73407241966f34 (diff) |
DO NOT MERGE - Merge tm-qpr3-release TQ3A.230605.010 into tm-platform-merge
Bug: 279962103
Change-Id: I1192811ddd629eab6b0ddfc9c04ff4cf63685346
Diffstat (limited to 'graphics/composer/aidl/vts/VtsComposerClient.cpp')
-rw-r--r-- | graphics/composer/aidl/vts/VtsComposerClient.cpp | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/graphics/composer/aidl/vts/VtsComposerClient.cpp b/graphics/composer/aidl/vts/VtsComposerClient.cpp index 2b607038fe..dd4161e836 100644 --- a/graphics/composer/aidl/vts/VtsComposerClient.cpp +++ b/graphics/composer/aidl/vts/VtsComposerClient.cpp @@ -393,14 +393,31 @@ std::pair<ScopedAStatus, std::vector<VtsDisplay>> VtsComposerClient::getDisplays return {std::move(configs.first), vtsDisplays}; } for (int config : configs.second) { - auto status = updateDisplayProperties(&vtsDisplay, config); + auto status = addDisplayConfig(&vtsDisplay, config); if (!status.isOk()) { - ALOGE("Unable to get the displays for test, failed to update the properties " + ALOGE("Unable to get the displays for test, failed to add config " "for display %" PRId64, display); return {std::move(status), vtsDisplays}; } } + + auto config = getActiveConfig(display); + if (!config.first.isOk()) { + ALOGE("Unable to get the displays for test, failed to get active config " + "for display %" PRId64, display); + return {std::move(config.first), vtsDisplays}; + } + + auto status = updateDisplayProperties(&vtsDisplay, config.second); + if (!status.isOk()) { + ALOGE("Unable to get the displays for test, " + "failed to update the properties " + "for display %" PRId64, + display); + return {std::move(status), vtsDisplays}; + } + vtsDisplays.emplace_back(vtsDisplay); addDisplayToDisplayResources(display, /*isVirtual*/ false); } @@ -409,7 +426,7 @@ std::pair<ScopedAStatus, std::vector<VtsDisplay>> VtsComposerClient::getDisplays } } -ScopedAStatus VtsComposerClient::updateDisplayProperties(VtsDisplay* vtsDisplay, int32_t config) { +ScopedAStatus VtsComposerClient::addDisplayConfig(VtsDisplay* vtsDisplay, int32_t config) { const auto width = getDisplayAttribute(vtsDisplay->getDisplayId(), config, DisplayAttribute::WIDTH); const auto height = @@ -420,7 +437,6 @@ ScopedAStatus VtsComposerClient::updateDisplayProperties(VtsDisplay* vtsDisplay, getDisplayAttribute(vtsDisplay->getDisplayId(), config, DisplayAttribute::CONFIG_GROUP); if (width.first.isOk() && height.first.isOk() && vsyncPeriod.first.isOk() && configGroup.first.isOk()) { - vtsDisplay->setDimensions(width.second, height.second); vtsDisplay->addDisplayConfig(config, {vsyncPeriod.second, configGroup.second}); return ScopedAStatus::ok(); } @@ -431,6 +447,21 @@ ScopedAStatus VtsComposerClient::updateDisplayProperties(VtsDisplay* vtsDisplay, return ScopedAStatus::fromServiceSpecificError(IComposerClient::EX_BAD_CONFIG); } +ScopedAStatus VtsComposerClient::updateDisplayProperties(VtsDisplay* vtsDisplay, int32_t config) { + const auto width = + getDisplayAttribute(vtsDisplay->getDisplayId(), config, DisplayAttribute::WIDTH); + const auto height = + getDisplayAttribute(vtsDisplay->getDisplayId(), config, DisplayAttribute::HEIGHT); + if (width.first.isOk() && height.first.isOk()) { + vtsDisplay->setDimensions(width.second, height.second); + return ScopedAStatus::ok(); + } + + LOG(ERROR) << "Failed to update display property for width: " << width.first.isOk() + << ", height: " << height.first.isOk(); + return ScopedAStatus::fromServiceSpecificError(IComposerClient::EX_BAD_CONFIG); +} + ScopedAStatus VtsComposerClient::addDisplayToDisplayResources(int64_t display, bool isVirtual) { if (mDisplayResources.insert({display, DisplayResource(isVirtual)}).second) { return ScopedAStatus::ok(); @@ -488,10 +519,13 @@ bool VtsComposerClient::verifyComposerCallbackParams() { } bool VtsComposerClient::destroyAllLayers() { - for (const auto& it : mDisplayResources) { - const auto& [display, resource] = it; + std::unordered_map<int64_t, DisplayResource> physicalDisplays; + while (!mDisplayResources.empty()) { + const auto& it = mDisplayResources.begin(); + const auto& [display, resource] = *it; - for (auto layer : resource.layers) { + while (!resource.layers.empty()) { + auto layer = *resource.layers.begin(); const auto status = destroyLayer(display, layer); if (!status.isOk()) { ALOGE("Unable to destroy all the layers, failed at layer %" PRId64 " with error %s", @@ -507,8 +541,12 @@ bool VtsComposerClient::destroyAllLayers() { status.getDescription().c_str()); return false; } + } else { + auto extractIter = mDisplayResources.extract(it); + physicalDisplays.insert(std::move(extractIter)); } } + mDisplayResources.swap(physicalDisplays); mDisplayResources.clear(); return true; } |