From 98ae3eea83452382e6a71ff28cb92ac718eb6873 Mon Sep 17 00:00:00 2001 From: Kui1 Wu Date: Tue, 14 Dec 2021 13:08:22 +0800 Subject: [PATCH] fix VtsHalGraphicsComposerV2_2TargetTest timeout failed run VtsHalGraphicsComposerV2_2TargetTest will timeout failed when there is dual displays. use `std::unordered_set` Display type, `std::vector(mDisplays.begin(), mDisplays.end())` as getDisplays return value, mDisplays elements order may not be same as the order of hotplug events during boot matters. We should store `mDisplays` as `std::vector`, since the order of hotplug events during boot matters in determining the primary display. Bug: 209409863 Test: run vts -m VtsHalGraphicsComposerV2_2TargetTest Signed-off-by: Kui1 Wu Change-Id: I628ad593640f28fb8a916822a91ac2c578cc299d --- .../utils/vts/GraphicsComposerCallback.cpp | 17 +++++++++----- .../2.1/GraphicsComposerCallback.h | 4 ++-- .../utils/vts/GraphicsComposerCallback.cpp | 22 +++++++++++++------ .../2.4/GraphicsComposerCallback.h | 4 ++-- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/graphics/composer/2.1/utils/vts/GraphicsComposerCallback.cpp b/graphics/composer/2.1/utils/vts/GraphicsComposerCallback.cpp index 1ead138efc..ccbc5b1292 100644 --- a/graphics/composer/2.1/utils/vts/GraphicsComposerCallback.cpp +++ b/graphics/composer/2.1/utils/vts/GraphicsComposerCallback.cpp @@ -30,7 +30,7 @@ void GraphicsComposerCallback::setVsyncAllowed(bool allowed) { std::vector GraphicsComposerCallback::getDisplays() const { std::lock_guard lock(mMutex); - return std::vector(mDisplays.begin(), mDisplays.end()); + return mDisplays; } int GraphicsComposerCallback::getInvalidHotplugCount() const { @@ -51,12 +51,17 @@ int GraphicsComposerCallback::getInvalidVsyncCount() const { Return GraphicsComposerCallback::onHotplug(Display display, Connection connection) { std::lock_guard lock(mMutex); + auto it = std::find(mDisplays.begin(), mDisplays.end(), display); if (connection == Connection::CONNECTED) { - if (!mDisplays.insert(display).second) { + if (it == mDisplays.end()) { + mDisplays.push_back(display); + } else { mInvalidHotplugCount++; } } else if (connection == Connection::DISCONNECTED) { - if (!mDisplays.erase(display)) { + if (it != mDisplays.end()) { + mDisplays.erase(it); + } else { mInvalidHotplugCount++; } } @@ -67,7 +72,8 @@ Return GraphicsComposerCallback::onHotplug(Display display, Connection con Return GraphicsComposerCallback::onRefresh(Display display) { std::lock_guard lock(mMutex); - if (mDisplays.count(display) == 0) { + auto it = std::find(mDisplays.begin(), mDisplays.end(), display); + if (it == mDisplays.end()) { mInvalidRefreshCount++; } @@ -77,7 +83,8 @@ Return GraphicsComposerCallback::onRefresh(Display display) { Return GraphicsComposerCallback::onVsync(Display display, int64_t) { std::lock_guard lock(mMutex); - if (!mVsyncAllowed || mDisplays.count(display) == 0) { + auto it = std::find(mDisplays.begin(), mDisplays.end(), display); + if (!mVsyncAllowed || it == mDisplays.end()) { mInvalidVsyncCount++; } diff --git a/graphics/composer/2.1/utils/vts/include/composer-vts/2.1/GraphicsComposerCallback.h b/graphics/composer/2.1/utils/vts/include/composer-vts/2.1/GraphicsComposerCallback.h index e3c348f7de..da640528ab 100644 --- a/graphics/composer/2.1/utils/vts/include/composer-vts/2.1/GraphicsComposerCallback.h +++ b/graphics/composer/2.1/utils/vts/include/composer-vts/2.1/GraphicsComposerCallback.h @@ -19,7 +19,7 @@ #include #include -#include +#include namespace android { namespace hardware { @@ -48,7 +48,7 @@ class GraphicsComposerCallback : public IComposerCallback { mutable std::mutex mMutex; // the set of all currently connected displays - std::unordered_set mDisplays; + std::vector mDisplays; // true only when vsync is enabled bool mVsyncAllowed = true; diff --git a/graphics/composer/2.4/utils/vts/GraphicsComposerCallback.cpp b/graphics/composer/2.4/utils/vts/GraphicsComposerCallback.cpp index c9366a8495..51e1ab75f8 100644 --- a/graphics/composer/2.4/utils/vts/GraphicsComposerCallback.cpp +++ b/graphics/composer/2.4/utils/vts/GraphicsComposerCallback.cpp @@ -25,7 +25,7 @@ void GraphicsComposerCallback::setVsyncAllowed(bool allowed) { std::vector GraphicsComposerCallback::getDisplays() const { std::lock_guard lock(mMutex); - return std::vector(mDisplays.begin(), mDisplays.end()); + return mDisplays; } int32_t GraphicsComposerCallback::getInvalidHotplugCount() const { @@ -71,12 +71,17 @@ GraphicsComposerCallback::takeLastVsyncPeriodChangeTimeline() { Return GraphicsComposerCallback::onHotplug(Display display, Connection connection) { std::lock_guard lock(mMutex); + auto it = std::find(mDisplays.begin(), mDisplays.end(), display); if (connection == Connection::CONNECTED) { - if (!mDisplays.insert(display).second) { + if (it == mDisplays.end()) { + mDisplays.push_back(display); + } else { mInvalidHotplugCount++; } } else if (connection == Connection::DISCONNECTED) { - if (!mDisplays.erase(display)) { + if (it != mDisplays.end()) { + mDisplays.erase(it); + } else { mInvalidHotplugCount++; } } @@ -87,7 +92,8 @@ Return GraphicsComposerCallback::onHotplug(Display display, Connection con Return GraphicsComposerCallback::onRefresh(Display display) { std::lock_guard lock(mMutex); - if (mDisplays.count(display) == 0) { + auto it = std::find(mDisplays.begin(), mDisplays.end(), display); + if (it == mDisplays.end()) { mInvalidRefreshCount++; } @@ -106,7 +112,8 @@ Return GraphicsComposerCallback::onVsync(Display, int64_t) { Return GraphicsComposerCallback::onVsync_2_4(Display display, int64_t, VsyncPeriodNanos) { std::lock_guard lock(mMutex); - if (!mVsyncAllowed || mDisplays.count(display) == 0) { + auto it = std::find(mDisplays.begin(), mDisplays.end(), display); + if (!mVsyncAllowed || it == mDisplays.end()) { mInvalidVsync_2_4Count++; } @@ -117,7 +124,8 @@ Return GraphicsComposerCallback::onVsyncPeriodTimingChanged( Display display, const VsyncPeriodChangeTimeline& updatedTimeline) { std::lock_guard lock(mMutex); - if (mDisplays.count(display) == 0) { + auto it = std::find(mDisplays.begin(), mDisplays.end(), display); + if (it == mDisplays.end()) { mInvalidVsyncPeriodChangeCount++; } @@ -134,4 +142,4 @@ Return GraphicsComposerCallback::onSeamlessPossible(Display) { return Void(); } -} // namespace android::hardware::graphics::composer::V2_4::vts \ No newline at end of file +} // namespace android::hardware::graphics::composer::V2_4::vts diff --git a/graphics/composer/2.4/utils/vts/include/composer-vts/2.4/GraphicsComposerCallback.h b/graphics/composer/2.4/utils/vts/include/composer-vts/2.4/GraphicsComposerCallback.h index f4e23ae1fd..c03070b10c 100644 --- a/graphics/composer/2.4/utils/vts/include/composer-vts/2.4/GraphicsComposerCallback.h +++ b/graphics/composer/2.4/utils/vts/include/composer-vts/2.4/GraphicsComposerCallback.h @@ -18,7 +18,7 @@ #include #include -#include +#include namespace android::hardware::graphics::composer::V2_4::vts { @@ -56,7 +56,7 @@ class GraphicsComposerCallback : public IComposerCallback { mutable std::mutex mMutex; // the set of all currently connected displays - std::unordered_set mDisplays; + std::vector mDisplays; // true only when vsync is enabled bool mVsyncAllowed = true;