Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ada2850c authored by Kui1 Wu's avatar Kui1 Wu Committed by 吴奎
Browse files

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: default avatarKui1 Wu <wukui1@xiaomi.com>
Change-Id: I628ad593640f28fb8a916822a91ac2c578cc299d
parent b05a7c13
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -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++;
    }

+2 −2
Original line number Diff line number Diff line
@@ -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;

+15 −7
Original line number Diff line number Diff line
@@ -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++;
    }

+2 −2
Original line number Diff line number Diff line
@@ -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;