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

Commit 745f7b59 authored by Ady Abraham's avatar Ady Abraham
Browse files

DisplayEventReceiver: improve error handling

Reset the state in case of a binder error and log the error.

Bug: 213926330
Test: boot
Change-Id: I1b926d08689d9d6e4b382ce18e4a5ecb9156e564
parent e8c55433
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -39,7 +39,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();
            }
        }
    }
}
@@ -50,12 +56,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();
}
@@ -68,7 +73,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() {
@@ -76,7 +81,7 @@ status_t DisplayEventReceiver::requestNextVsync() {
        mEventConnection->requestNextVsync();
        return NO_ERROR;
    }
    return NO_INIT;
    return mInitError.has_value() ? mInitError.value() : NO_INIT;
}

ssize_t DisplayEventReceiver::getEvents(DisplayEventReceiver::Event* events,
+1 −0
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ public:
private:
    sp<IDisplayEventConnection> mEventConnection;
    std::unique_ptr<gui::BitTube> mDataChannel;
    std::optional<status_t> mInitError;
};

// ----------------------------------------------------------------------------