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

Commit e1c599b5 authored by Dan Stoza's avatar Dan Stoza
Browse files

libgui: Normalize IDisplayEventConnection methods

This change modifies the IDisplayEventConnection API such that every
synchronous method returns a status_t (to be able to return transport
errors). This required changing getDataChannel to return its channel by
output parameter rather than return type.

Currently no more error messages are checked than before, but this will
both enable calling code to check error messages if it desires and,
more importantly, allow the Bp/Bn code to be semi-automatically
generated using SafeInterface.

Test: libgui_tests + manual testing
Change-Id: I8d5bc5ef0475cee07b638a97079b234f0384c022
parent a5f61dd7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -34,14 +34,14 @@ public:
    /*
     * getDataChannel() returns a BitTube where to receive the events from
     */
    virtual sp<BitTube> getDataChannel() const = 0;
    virtual status_t getDataChannel(sp<BitTube>* outChannel) const = 0;

    /*
     * setVsyncRate() sets the vsync event delivery rate. A value of 1 returns every vsync event.
     * A value of 2 returns every other event, etc. A value of 0 returns no event unless
     * requestNextVsync() has been called.
     */
    virtual void setVsyncRate(uint32_t count) = 0;
    virtual status_t setVsyncRate(uint32_t count) = 0;

    /*
     * requestNextVsync() schedules the next vsync event. It has no effect if the vsync rate is > 0.
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ DisplayEventReceiver::DisplayEventReceiver() {
    if (sf != NULL) {
        mEventConnection = sf->createDisplayEventConnection();
        if (mEventConnection != NULL) {
            mDataChannel = mEventConnection->getDataChannel();
            mEventConnection->getDataChannel(&mDataChannel);
        }
    }
}
+9 −6
Original line number Diff line number Diff line
@@ -29,23 +29,25 @@ public:
    explicit BpDisplayEventConnection(const sp<IBinder>& impl)
          : BpInterface<IDisplayEventConnection>(impl) {}

    virtual ~BpDisplayEventConnection();
    ~BpDisplayEventConnection() override;

    virtual sp<BitTube> getDataChannel() const {
    status_t getDataChannel(sp<BitTube>* outChannel) const override {
        Parcel data, reply;
        data.writeInterfaceToken(IDisplayEventConnection::getInterfaceDescriptor());
        remote()->transact(GET_DATA_CHANNEL, data, &reply);
        return new BitTube(reply);
        *outChannel = new BitTube(reply);
        return NO_ERROR;
    }

    virtual void setVsyncRate(uint32_t count) {
    status_t setVsyncRate(uint32_t count) override {
        Parcel data, reply;
        data.writeInterfaceToken(IDisplayEventConnection::getInterfaceDescriptor());
        data.writeUint32(count);
        remote()->transact(SET_VSYNC_RATE, data, &reply);
        return NO_ERROR;
    }

    virtual void requestNextVsync() {
    void requestNextVsync() override {
        Parcel data, reply;
        data.writeInterfaceToken(IDisplayEventConnection::getInterfaceDescriptor());
        remote()->transact(REQUEST_NEXT_VSYNC, data, &reply, IBinder::FLAG_ONEWAY);
@@ -63,7 +65,8 @@ status_t BnDisplayEventConnection::onTransact(uint32_t code, const Parcel& data,
    switch (code) {
        case GET_DATA_CHANNEL: {
            CHECK_INTERFACE(IDisplayEventConnection, data, reply);
            sp<BitTube> channel(getDataChannel());
            sp<BitTube> channel;
            getDataChannel(&channel);
            channel->writeToParcel(reply);
            return NO_ERROR;
        }
+5 −3
Original line number Diff line number Diff line
@@ -403,12 +403,14 @@ void EventThread::Connection::onFirstRef() {
    mEventThread->registerDisplayEventConnection(this);
}

sp<BitTube> EventThread::Connection::getDataChannel() const {
    return mChannel;
status_t EventThread::Connection::getDataChannel(sp<BitTube>* outChannel) const {
    *outChannel = mChannel;
    return NO_ERROR;
}

void EventThread::Connection::setVsyncRate(uint32_t count) {
status_t EventThread::Connection::setVsyncRate(uint32_t count) {
    mEventThread->setVsyncRate(count, this);
    return NO_ERROR;
}

void EventThread::Connection::requestNextVsync() {
+3 −3
Original line number Diff line number Diff line
@@ -68,9 +68,9 @@ class EventThread : public Thread, private VSyncSource::Callback {
    private:
        virtual ~Connection();
        virtual void onFirstRef();
        virtual sp<BitTube> getDataChannel() const;
        virtual void setVsyncRate(uint32_t count);
        virtual void requestNextVsync();    // asynchronous
        status_t getDataChannel(sp<BitTube>* outChannel) const override;
        status_t setVsyncRate(uint32_t count) override;
        void requestNextVsync() override;    // asynchronous
        sp<EventThread> const mEventThread;
        sp<BitTube> const mChannel;
    };
Loading