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

Commit 9df93aa6 authored by Ady Abraham's avatar Ady Abraham Committed by Android (Google) Code Review
Browse files

Merge "SF: pass acquire fence on BLAST callbacks"

parents 25ab35d7 461296a5
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -111,7 +111,14 @@ status_t JankData::readFromParcel(const Parcel* input) {

status_t SurfaceStats::writeToParcel(Parcel* output) const {
    SAFE_PARCEL(output->writeStrongBinder, surfaceControl);
    SAFE_PARCEL(output->writeInt64, acquireTime);
    if (const auto* acquireFence = std::get_if<sp<Fence>>(&acquireTimeOrFence)) {
        SAFE_PARCEL(output->writeBool, true);
        SAFE_PARCEL(output->write, **acquireFence);
    } else {
        SAFE_PARCEL(output->writeBool, false);
        SAFE_PARCEL(output->writeInt64, std::get<nsecs_t>(acquireTimeOrFence));
    }

    if (previousReleaseFence) {
        SAFE_PARCEL(output->writeBool, true);
        SAFE_PARCEL(output->write, *previousReleaseFence);
@@ -131,8 +138,18 @@ status_t SurfaceStats::writeToParcel(Parcel* output) const {

status_t SurfaceStats::readFromParcel(const Parcel* input) {
    SAFE_PARCEL(input->readStrongBinder, &surfaceControl);
    SAFE_PARCEL(input->readInt64, &acquireTime);

    bool hasFence = false;
    SAFE_PARCEL(input->readBool, &hasFence);
    if (hasFence) {
        acquireTimeOrFence = sp<Fence>::make();
        SAFE_PARCEL(input->read, *std::get<sp<Fence>>(acquireTimeOrFence));
    } else {
        nsecs_t acquireTime;
        SAFE_PARCEL(input->readInt64, &acquireTime);
        acquireTimeOrFence = acquireTime;
    }

    SAFE_PARCEL(input->readBool, &hasFence);
    if (hasFence) {
        previousReleaseFence = new Fence();
+2 −2
Original line number Diff line number Diff line
@@ -297,7 +297,7 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
                surfaceControlStats
                        .emplace_back(callbacksMap[callbackId]
                                              .surfaceControls[surfaceStats.surfaceControl],
                                      transactionStats.latchTime, surfaceStats.acquireTime,
                                      transactionStats.latchTime, surfaceStats.acquireTimeOrFence,
                                      transactionStats.presentFence,
                                      surfaceStats.previousReleaseFence, surfaceStats.transformHint,
                                      surfaceStats.eventStats);
@@ -322,7 +322,7 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
                surfaceControlStats
                        .emplace_back(callbacksMap[callbackId]
                                              .surfaceControls[surfaceStats.surfaceControl],
                                      transactionStats.latchTime, surfaceStats.acquireTime,
                                      transactionStats.latchTime, surfaceStats.acquireTimeOrFence,
                                      transactionStats.presentFence,
                                      surfaceStats.previousReleaseFence, surfaceStats.transformHint,
                                      surfaceStats.eventStats);
+7 −6
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include <cstdint>
#include <unordered_map>
#include <unordered_set>
#include <variant>

namespace android {

@@ -130,12 +131,12 @@ public:
    status_t readFromParcel(const Parcel* input) override;

    SurfaceStats() = default;
    SurfaceStats(const sp<IBinder>& sc, nsecs_t time, const sp<Fence>& prevReleaseFence,
                 uint32_t hint, uint32_t currentMaxAcquiredBuffersCount,
                 FrameEventHistoryStats frameEventStats, std::vector<JankData> jankData,
                 ReleaseCallbackId previousReleaseCallbackId)
    SurfaceStats(const sp<IBinder>& sc, std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence,
                 const sp<Fence>& prevReleaseFence, uint32_t hint,
                 uint32_t currentMaxAcquiredBuffersCount, FrameEventHistoryStats frameEventStats,
                 std::vector<JankData> jankData, ReleaseCallbackId previousReleaseCallbackId)
          : surfaceControl(sc),
            acquireTime(time),
            acquireTimeOrFence(std::move(acquireTimeOrFence)),
            previousReleaseFence(prevReleaseFence),
            transformHint(hint),
            currentMaxAcquiredBufferCount(currentMaxAcquiredBuffersCount),
@@ -144,7 +145,7 @@ public:
            previousReleaseCallbackId(previousReleaseCallbackId) {}

    sp<IBinder> surfaceControl;
    nsecs_t acquireTime = -1;
    std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence = -1;
    sp<Fence> previousReleaseFence;
    uint32_t transformHint = 0;
    uint32_t currentMaxAcquiredBufferCount = 0;
+4 −3
Original line number Diff line number Diff line
@@ -60,12 +60,13 @@ class Region;
using gui::IRegionSamplingListener;

struct SurfaceControlStats {
    SurfaceControlStats(const sp<SurfaceControl>& sc, nsecs_t latchTime, nsecs_t acquireTime,
    SurfaceControlStats(const sp<SurfaceControl>& sc, nsecs_t latchTime,
                        std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence,
                        const sp<Fence>& presentFence, const sp<Fence>& prevReleaseFence,
                        uint32_t hint, FrameEventHistoryStats eventStats)
          : surfaceControl(sc),
            latchTime(latchTime),
            acquireTime(acquireTime),
            acquireTimeOrFence(std::move(acquireTimeOrFence)),
            presentFence(presentFence),
            previousReleaseFence(prevReleaseFence),
            transformHint(hint),
@@ -73,7 +74,7 @@ struct SurfaceControlStats {

    sp<SurfaceControl> surfaceControl;
    nsecs_t latchTime = -1;
    nsecs_t acquireTime = -1;
    std::variant<nsecs_t, sp<Fence>> acquireTimeOrFence = -1;
    sp<Fence> presentFence;
    sp<Fence> previousReleaseFence;
    uint32_t transformHint = 0;
+7 −4
Original line number Diff line number Diff line
@@ -134,12 +134,15 @@ private:

        void verifySurfaceControlStats(const SurfaceControlStats& surfaceControlStats,
                                       nsecs_t latchTime) const {
            const auto& [surfaceControl, latch, acquireTime, presentFence, previousReleaseFence,
                         transformHint, frameEvents] = surfaceControlStats;
            const auto& [surfaceControl, latch, acquireTimeOrFence, presentFence,
                         previousReleaseFence, transformHint, frameEvents] = surfaceControlStats;

            ASSERT_EQ(acquireTime > 0, mBufferResult == ExpectedResult::Buffer::ACQUIRED)
            ASSERT_TRUE(std::holds_alternative<nsecs_t>(acquireTimeOrFence));
            ASSERT_EQ(std::get<nsecs_t>(acquireTimeOrFence) > 0,
                      mBufferResult == ExpectedResult::Buffer::ACQUIRED)
                    << "bad acquire time";
            ASSERT_LE(acquireTime, latchTime) << "acquire time should be <= latch time";
            ASSERT_LE(std::get<nsecs_t>(acquireTimeOrFence), latchTime)
                    << "acquire time should be <= latch time";

            if (mPreviousBufferResult == ExpectedResult::PreviousBuffer::RELEASED) {
                ASSERT_NE(previousReleaseFence, nullptr)
Loading