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;