diff options
| author | Kui1 Wu <wukui1@xiaomi.com> | 2021-12-14 13:08:22 +0800 |
|---|---|---|
| committer | Ady Abraham <adyabr@google.com> | 2022-01-05 21:18:51 +0000 |
| commit | df417d280874a33a3cda08ef0e295e28ea514628 (patch) | |
| tree | 5a7a7e5b29557008878b391a99b4d72ccc06ebbb | |
| parent | 41a7f94f879aee66abd6ace5217c16012526ee8c (diff) | |
fix VtsHalGraphicsComposerV2_2TargetTest timeout failed
run VtsHalGraphicsComposerV2_2TargetTest will timeout failed
when there is dual displays. use `std::unordered_set` Display type,
`std::vector<Display>(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 <wukui1@xiaomi.com>
Change-Id: I628ad593640f28fb8a916822a91ac2c578cc299d
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 1ead138ef..ccbc5b129 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<Display> GraphicsComposerCallback::getDisplays() const { std::lock_guard<std::mutex> lock(mMutex); - return std::vector<Display>(mDisplays.begin(), mDisplays.end()); + return mDisplays; } int GraphicsComposerCallback::getInvalidHotplugCount() const { @@ -51,12 +51,17 @@ int GraphicsComposerCallback::getInvalidVsyncCount() const { Return<void> GraphicsComposerCallback::onHotplug(Display display, Connection connection) { std::lock_guard<std::mutex> 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<void> GraphicsComposerCallback::onHotplug(Display display, Connection con Return<void> GraphicsComposerCallback::onRefresh(Display display) { std::lock_guard<std::mutex> 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<void> GraphicsComposerCallback::onRefresh(Display display) { Return<void> GraphicsComposerCallback::onVsync(Display display, int64_t) { std::lock_guard<std::mutex> 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 e3c348f7d..da640528a 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 <android/hardware/graphics/composer/2.1/IComposerCallback.h> #include <mutex> -#include <unordered_set> +#include <vector> 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<Display> mDisplays; + std::vector<Display> 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 c9366a849..51e1ab75f 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<Display> GraphicsComposerCallback::getDisplays() const { std::lock_guard<std::mutex> lock(mMutex); - return std::vector<Display>(mDisplays.begin(), mDisplays.end()); + return mDisplays; } int32_t GraphicsComposerCallback::getInvalidHotplugCount() const { @@ -71,12 +71,17 @@ GraphicsComposerCallback::takeLastVsyncPeriodChangeTimeline() { Return<void> GraphicsComposerCallback::onHotplug(Display display, Connection connection) { std::lock_guard<std::mutex> 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<void> GraphicsComposerCallback::onHotplug(Display display, Connection con Return<void> GraphicsComposerCallback::onRefresh(Display display) { std::lock_guard<std::mutex> 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<void> GraphicsComposerCallback::onVsync(Display, int64_t) { Return<void> GraphicsComposerCallback::onVsync_2_4(Display display, int64_t, VsyncPeriodNanos) { std::lock_guard<std::mutex> 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<void> GraphicsComposerCallback::onVsyncPeriodTimingChanged( Display display, const VsyncPeriodChangeTimeline& updatedTimeline) { std::lock_guard<std::mutex> 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<void> 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 f4e23ae1f..c03070b10 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 <android/hardware/graphics/composer/2.4/IComposerCallback.h> #include <mutex> -#include <unordered_set> +#include <vector> 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<Display> mDisplays; + std::vector<Display> mDisplays; // true only when vsync is enabled bool mVsyncAllowed = true; |
