diff options
| author | 2022-06-29 21:21:49 +0000 | |
|---|---|---|
| committer | 2022-06-29 21:21:49 +0000 | |
| commit | 618c76e5c04f99f2e295fcd2ffcb896476a68f38 (patch) | |
| tree | db84b827307260c3e1e05d5d30a08c08d427e158 /libs/gui/DisplayEventReceiver.cpp | |
| parent | 31afdea9a497881604f2395b7a870d4ee21497c6 (diff) | |
| parent | 552bdbb3f7e423c4047ed209917a12f8cadf86e9 (diff) | |
Merge "Merge tm-dev-plus-aosp-without-vendor@8763363" into stage-aosp-master
Diffstat (limited to 'libs/gui/DisplayEventReceiver.cpp')
| -rw-r--r-- | libs/gui/DisplayEventReceiver.cpp | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/libs/gui/DisplayEventReceiver.cpp b/libs/gui/DisplayEventReceiver.cpp index 03b33c7330..bfb77699c0 100644 --- a/libs/gui/DisplayEventReceiver.cpp +++ b/libs/gui/DisplayEventReceiver.cpp @@ -19,8 +19,8 @@ #include <utils/Errors.h> #include <gui/DisplayEventReceiver.h> -#include <gui/IDisplayEventConnection.h> #include <gui/ISurfaceComposer.h> +#include <gui/VsyncEventData.h> #include <private/gui/ComposerService.h> @@ -40,7 +40,13 @@ DisplayEventReceiver::DisplayEventReceiver( mEventConnection = sf->createDisplayEventConnection(vsyncSource, eventRegistration); if (mEventConnection != nullptr) { mDataChannel = std::make_unique<gui::BitTube>(); - mEventConnection->stealReceiveChannel(mDataChannel.get()); + const auto status = mEventConnection->stealReceiveChannel(mDataChannel.get()); + if (!status.isOk()) { + ALOGE("stealReceiveChannel failed: %s", status.toString8().c_str()); + mInitError = std::make_optional<status_t>(status.transactionError()); + mDataChannel.reset(); + mEventConnection.clear(); + } } } } @@ -51,12 +57,11 @@ DisplayEventReceiver::~DisplayEventReceiver() { status_t DisplayEventReceiver::initCheck() const { if (mDataChannel != nullptr) return NO_ERROR; - return NO_INIT; + return mInitError.has_value() ? mInitError.value() : NO_INIT; } int DisplayEventReceiver::getFd() const { - if (mDataChannel == nullptr) - return NO_INIT; + if (mDataChannel == nullptr) return mInitError.has_value() ? mInitError.value() : NO_INIT; return mDataChannel->getFd(); } @@ -69,7 +74,7 @@ status_t DisplayEventReceiver::setVsyncRate(uint32_t count) { mEventConnection->setVsyncRate(count); return NO_ERROR; } - return NO_INIT; + return mInitError.has_value() ? mInitError.value() : NO_INIT; } status_t DisplayEventReceiver::requestNextVsync() { @@ -77,6 +82,19 @@ status_t DisplayEventReceiver::requestNextVsync() { mEventConnection->requestNextVsync(); return NO_ERROR; } + return mInitError.has_value() ? mInitError.value() : NO_INIT; +} + +status_t DisplayEventReceiver::getLatestVsyncEventData( + ParcelableVsyncEventData* outVsyncEventData) const { + if (mEventConnection != nullptr) { + auto status = mEventConnection->getLatestVsyncEventData(outVsyncEventData); + if (!status.isOk()) { + ALOGE("Failed to get latest vsync event data: %s", status.exceptionMessage().c_str()); + return status.transactionError(); + } + return NO_ERROR; + } return NO_INIT; } |