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

Commit d80895b6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add tracing for dequeueBuffer, detachBuffer and cancelBuffer"

parents 82211936 2e434387
Loading
Loading
Loading
Loading
+21 −0
Original line number Original line Diff line number Diff line
@@ -43,6 +43,27 @@ void BufferQueue::ProxyConsumerListener::onDisconnect() {
    }
    }
}
}


void BufferQueue::ProxyConsumerListener::onFrameDequeued(const uint64_t bufferId) {
    sp<ConsumerListener> listener(mConsumerListener.promote());
    if (listener != nullptr) {
        listener->onFrameDequeued(bufferId);
    }
}

void BufferQueue::ProxyConsumerListener::onFrameCancelled(const uint64_t bufferId) {
    sp<ConsumerListener> listener(mConsumerListener.promote());
    if (listener != nullptr) {
        listener->onFrameCancelled(bufferId);
    }
}

void BufferQueue::ProxyConsumerListener::onFrameDetached(const uint64_t bufferId) {
    sp<ConsumerListener> listener(mConsumerListener.promote());
    if (listener != nullptr) {
        listener->onFrameDetached(bufferId);
    }
}

void BufferQueue::ProxyConsumerListener::onFrameAvailable(
void BufferQueue::ProxyConsumerListener::onFrameAvailable(
        const BufferItem& item) {
        const BufferItem& item) {
    sp<ConsumerListener> listener(mConsumerListener.promote());
    sp<ConsumerListener> listener(mConsumerListener.promote());
+12 −1
Original line number Original line Diff line number Diff line
@@ -580,6 +580,11 @@ status_t BufferQueueProducer::dequeueBuffer(int* outSlot, sp<android::Fence>* ou
    }
    }
    addAndGetFrameTimestamps(nullptr, outTimestamps);
    addAndGetFrameTimestamps(nullptr, outTimestamps);


    { // Autolock scope
        std::lock_guard<std::mutex> lock(mCore->mMutex);
        mCore->mConsumerListener->onFrameDequeued(mSlots[*outSlot].mGraphicBuffer->getId());
    }

    return returnFlags;
    return returnFlags;
}
}


@@ -621,13 +626,16 @@ status_t BufferQueueProducer::detachBuffer(int slot) {
            return BAD_VALUE;
            return BAD_VALUE;
        }
        }


        listener = mCore->mConsumerListener;
        if (listener != nullptr) {
            listener->onFrameDetached(mSlots[slot].mGraphicBuffer->getId());
        }
        mSlots[slot].mBufferState.detachProducer();
        mSlots[slot].mBufferState.detachProducer();
        mCore->mActiveBuffers.erase(slot);
        mCore->mActiveBuffers.erase(slot);
        mCore->mFreeSlots.insert(slot);
        mCore->mFreeSlots.insert(slot);
        mCore->clearBufferSlotLocked(slot);
        mCore->clearBufferSlotLocked(slot);
        mCore->mDequeueCondition.notify_all();
        mCore->mDequeueCondition.notify_all();
        VALIDATE_CONSISTENCY();
        VALIDATE_CONSISTENCY();
        listener = mCore->mConsumerListener;
    }
    }


    if (listener != nullptr) {
    if (listener != nullptr) {
@@ -1083,6 +1091,9 @@ status_t BufferQueueProducer::cancelBuffer(int slot, const sp<Fence>& fence) {
        mCore->mFreeBuffers.push_back(slot);
        mCore->mFreeBuffers.push_back(slot);
    }
    }


    if (mCore->mConsumerListener != nullptr) {
        mCore->mConsumerListener->onFrameCancelled(mSlots[slot].mGraphicBuffer->getId());
    }
    mSlots[slot].mFence = fence;
    mSlots[slot].mFence = fence;
    mCore->mDequeueCondition.notify_all();
    mCore->mDequeueCondition.notify_all();
    VALIDATE_CONSISTENCY();
    VALIDATE_CONSISTENCY();
+42 −0
Original line number Original line Diff line number Diff line
@@ -101,6 +101,48 @@ void ConsumerBase::freeBufferLocked(int slotIndex) {
    mSlots[slotIndex].mFrameNumber = 0;
    mSlots[slotIndex].mFrameNumber = 0;
}
}


void ConsumerBase::onFrameDequeued(const uint64_t bufferId) {
    CB_LOGV("onFrameDequeued");

    sp<FrameAvailableListener> listener;
    {
        Mutex::Autolock lock(mFrameAvailableMutex);
        listener = mFrameAvailableListener.promote();
    }

    if (listener != nullptr) {
        listener->onFrameDequeued(bufferId);
    }
}

void ConsumerBase::onFrameCancelled(const uint64_t bufferId) {
    CB_LOGV("onFrameCancelled");

    sp<FrameAvailableListener> listener;
    {
        Mutex::Autolock lock(mFrameAvailableMutex);
        listener = mFrameAvailableListener.promote();
    }

    if (listener != nullptr) {
        listener->onFrameCancelled(bufferId);
    }
}

void ConsumerBase::onFrameDetached(const uint64_t bufferId) {
    CB_LOGV("onFrameDetached");

    sp<FrameAvailableListener> listener;
    {
        Mutex::Autolock lock(mFrameAvailableMutex);
        listener = mFrameAvailableListener.promote();
    }

    if (listener != nullptr) {
        listener->onFrameDetached(bufferId);
    }
}

void ConsumerBase::onFrameAvailable(const BufferItem& item) {
void ConsumerBase::onFrameAvailable(const BufferItem& item) {
    CB_LOGV("onFrameAvailable");
    CB_LOGV("onFrameAvailable");


+25 −1
Original line number Original line Diff line number Diff line
@@ -28,7 +28,10 @@ enum class Tag : uint32_t {
    ON_FRAME_REPLACED,
    ON_FRAME_REPLACED,
    ON_BUFFERS_RELEASED,
    ON_BUFFERS_RELEASED,
    ON_SIDEBAND_STREAM_CHANGED,
    ON_SIDEBAND_STREAM_CHANGED,
    LAST = ON_SIDEBAND_STREAM_CHANGED,
    ON_FRAME_DEQUEUED,
    ON_FRAME_CANCELLED,
    ON_FRAME_DETACHED,
    LAST = ON_FRAME_DETACHED,
};
};


} // Anonymous namespace
} // Anonymous namespace
@@ -44,6 +47,21 @@ public:
        callRemoteAsync<decltype(&IConsumerListener::onDisconnect)>(Tag::ON_DISCONNECT);
        callRemoteAsync<decltype(&IConsumerListener::onDisconnect)>(Tag::ON_DISCONNECT);
    }
    }


    void onFrameDequeued(const uint64_t bufferId) override {
        callRemoteAsync<decltype(&IConsumerListener::onFrameDequeued)>(Tag::ON_FRAME_DEQUEUED,
                                                                       bufferId);
    }

    void onFrameDetached(const uint64_t bufferId) override {
        callRemoteAsync<decltype(&IConsumerListener::onFrameDetached)>(Tag::ON_FRAME_DETACHED,
                                                                       bufferId);
    }

    void onFrameCancelled(const uint64_t bufferId) override {
        callRemoteAsync<decltype(&IConsumerListener::onFrameCancelled)>(Tag::ON_FRAME_CANCELLED,
                                                                        bufferId);
    }

    void onFrameAvailable(const BufferItem& item) override {
    void onFrameAvailable(const BufferItem& item) override {
        callRemoteAsync<decltype(&IConsumerListener::onFrameAvailable)>(Tag::ON_FRAME_AVAILABLE,
        callRemoteAsync<decltype(&IConsumerListener::onFrameAvailable)>(Tag::ON_FRAME_AVAILABLE,
                                                                        item);
                                                                        item);
@@ -93,6 +111,12 @@ status_t BnConsumerListener::onTransact(uint32_t code, const Parcel& data, Parce
            return callLocalAsync(data, reply, &IConsumerListener::onBuffersReleased);
            return callLocalAsync(data, reply, &IConsumerListener::onBuffersReleased);
        case Tag::ON_SIDEBAND_STREAM_CHANGED:
        case Tag::ON_SIDEBAND_STREAM_CHANGED:
            return callLocalAsync(data, reply, &IConsumerListener::onSidebandStreamChanged);
            return callLocalAsync(data, reply, &IConsumerListener::onSidebandStreamChanged);
        case Tag::ON_FRAME_DEQUEUED:
            return callLocalAsync(data, reply, &IConsumerListener::onFrameDequeued);
        case Tag::ON_FRAME_CANCELLED:
            return callLocalAsync(data, reply, &IConsumerListener::onFrameCancelled);
        case Tag::ON_FRAME_DETACHED:
            return callLocalAsync(data, reply, &IConsumerListener::onFrameDetached);
    }
    }
}
}


+3 −0
Original line number Original line Diff line number Diff line
@@ -63,6 +63,9 @@ public:
        void onFrameReplaced(const BufferItem& item) override;
        void onFrameReplaced(const BufferItem& item) override;
        void onBuffersReleased() override;
        void onBuffersReleased() override;
        void onSidebandStreamChanged() override;
        void onSidebandStreamChanged() override;
        void onFrameDequeued(const uint64_t bufferId) override;
        void onFrameCancelled(const uint64_t bufferId) override;
        void onFrameDetached(const uint64_t bufferID) override;
        void addAndGetFrameTimestamps(
        void addAndGetFrameTimestamps(
                const NewFrameEventsEntry* newTimestamps,
                const NewFrameEventsEntry* newTimestamps,
                FrameEventHistoryDelta* outDelta) override;
                FrameEventHistoryDelta* outDelta) override;
Loading