Use Vector instead of unordered_map for hotplug displays
For multi-display order of the hotplug matters, and vector
maintains the order that we need for the multi-display.
see: ag/1921760 for partner cl on HIDL.
BUG: 210920960
BUG: 209409863
Test: atest VtsHalGraphicsComposer3_TargetTest
Change-Id: I4f9a86413f20c860fc0bc3850a14335d62de881a
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/GraphicsComposerCallback.cpp b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/GraphicsComposerCallback.cpp
index 22b5d79..8f329b3 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/GraphicsComposerCallback.cpp
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/GraphicsComposerCallback.cpp
@@ -31,7 +31,7 @@
std::vector<int64_t> GraphicsComposerCallback::getDisplays() const {
std::scoped_lock lock(mMutex);
- return std::vector<int64_t>(mDisplays.begin(), mDisplays.end());
+ return mDisplays;
}
int32_t GraphicsComposerCallback::getInvalidHotplugCount() const {
@@ -81,22 +81,29 @@
::ndk::ScopedAStatus GraphicsComposerCallback::onHotplug(int64_t in_display, bool in_connected) {
std::scoped_lock lock(mMutex);
+
+ const auto it = std::find(mDisplays.begin(), mDisplays.end(), in_display);
if (in_connected) {
- if (!mDisplays.insert(in_display).second) {
+ if (it == mDisplays.end()) {
+ mDisplays.push_back(in_display);
+ } else {
mInvalidHotplugCount++;
}
} else {
- if (!mDisplays.erase(in_display)) {
+ if (it != mDisplays.end()) {
+ mDisplays.erase(it);
+ } else {
mInvalidHotplugCount++;
}
}
return ::ndk::ScopedAStatus::ok();
}
-::ndk::ScopedAStatus GraphicsComposerCallback::onRefresh(int64_t display) {
+::ndk::ScopedAStatus GraphicsComposerCallback::onRefresh(int64_t in_display) {
std::scoped_lock lock(mMutex);
- if (mDisplays.count(display) == 0) {
+ const auto it = std::find(mDisplays.begin(), mDisplays.end(), in_display);
+ if (it == mDisplays.end()) {
mInvalidRefreshCount++;
}
@@ -106,7 +113,9 @@
::ndk::ScopedAStatus GraphicsComposerCallback::onVsync(int64_t in_display, int64_t in_timestamp,
int32_t in_vsyncPeriodNanos) {
std::scoped_lock lock(mMutex);
- if (!mVsyncAllowed || mDisplays.count(in_display) == 0) {
+
+ const auto it = std::find(mDisplays.begin(), mDisplays.end(), in_display);
+ if (!mVsyncAllowed || it == mDisplays.end()) {
mInvalidVsyncCount++;
}
@@ -120,7 +129,9 @@
const ::aidl::android::hardware::graphics::composer3::VsyncPeriodChangeTimeline&
in_updatedTimeline) {
std::scoped_lock lock(mMutex);
- if (mDisplays.count(in_display) == 0) {
+
+ const auto it = std::find(mDisplays.begin(), mDisplays.end(), in_display);
+ if (it == mDisplays.end()) {
mInvalidVsyncPeriodChangeCount++;
}
mTimeline = in_updatedTimeline;
@@ -130,7 +141,9 @@
::ndk::ScopedAStatus GraphicsComposerCallback::onSeamlessPossible(int64_t in_display) {
std::scoped_lock lock(mMutex);
- if (mDisplays.count(in_display)) {
+
+ const auto it = std::find(mDisplays.begin(), mDisplays.end(), in_display);
+ if (it != mDisplays.end()) {
mInvalidSeamlessPossibleCount++;
}
return ::ndk::ScopedAStatus::ok();
@@ -138,7 +151,9 @@
::ndk::ScopedAStatus GraphicsComposerCallback::onVsyncIdle(int64_t in_display) {
std::scoped_lock lock(mMutex);
- if (mDisplays.count(in_display)) {
+
+ const auto it = std::find(mDisplays.begin(), mDisplays.end(), in_display);
+ if (it != mDisplays.end()) {
mVsyncIdleCount++;
mVsyncIdleTime = systemTime();
}
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/include/GraphicsComposerCallback.h b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/include/GraphicsComposerCallback.h
index ced1020..e54da34 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/include/GraphicsComposerCallback.h
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/vts/functional/composer-vts/include/GraphicsComposerCallback.h
@@ -18,7 +18,7 @@
#include <aidl/android/hardware/graphics/composer3/BnComposerCallback.h>
#include <android-base/thread_annotations.h>
#include <mutex>
-#include <unordered_set>
+#include <vector>
namespace aidl::android::hardware::graphics::composer3::vts {
@@ -58,7 +58,7 @@
mutable std::mutex mMutex;
// the set of all currently connected displays
- std::unordered_set<int64_t> mDisplays GUARDED_BY(mMutex);
+ std::vector<int64_t> mDisplays GUARDED_BY(mMutex);
// true only when vsync is enabled
bool mVsyncAllowed GUARDED_BY(mMutex) = true;