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

Commit fdb57bb7 authored by Patrick Williams's avatar Patrick Williams
Browse files

Use FenceResult in ScreenCaptureResults

Bug: b/232535621
Test: atest SurfaceFlinger_test
Change-Id: I9295202cb2e72e9b078815b24468b588a89b6899
parent 501a72a3
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <gui/ScreenCaptureResults.h>

#include <private/gui/ParcelUtils.h>
#include <ui/FenceResult.h>

namespace android::gui {

@@ -28,17 +29,17 @@ status_t ScreenCaptureResults::writeToParcel(android::Parcel* parcel) const {
        SAFE_PARCEL(parcel->writeBool, false);
    }

    if (fence != Fence::NO_FENCE) {
    if (fenceResult.ok() && fenceResult.value() != Fence::NO_FENCE) {
        SAFE_PARCEL(parcel->writeBool, true);
        SAFE_PARCEL(parcel->write, *fence);
        SAFE_PARCEL(parcel->write, *fenceResult.value());
    } else {
        SAFE_PARCEL(parcel->writeBool, false);
        SAFE_PARCEL(parcel->writeInt32, fenceStatus(fenceResult));
    }

    SAFE_PARCEL(parcel->writeBool, capturedSecureLayers);
    SAFE_PARCEL(parcel->writeBool, capturedHdrLayers);
    SAFE_PARCEL(parcel->writeUint32, static_cast<uint32_t>(capturedDataspace));
    SAFE_PARCEL(parcel->writeInt32, result);
    return NO_ERROR;
}

@@ -53,8 +54,13 @@ status_t ScreenCaptureResults::readFromParcel(const android::Parcel* parcel) {
    bool hasFence;
    SAFE_PARCEL(parcel->readBool, &hasFence);
    if (hasFence) {
        fence = new Fence();
        SAFE_PARCEL(parcel->read, *fence);
        fenceResult = sp<Fence>::make();
        SAFE_PARCEL(parcel->read, *fenceResult.value());
    } else {
        status_t status;
        SAFE_PARCEL(parcel->readInt32, &status);
        fenceResult = status == NO_ERROR ? FenceResult(Fence::NO_FENCE)
                                         : FenceResult(base::unexpected(status));
    }

    SAFE_PARCEL(parcel->readBool, &capturedSecureLayers);
@@ -62,7 +68,6 @@ status_t ScreenCaptureResults::readFromParcel(const android::Parcel* parcel) {
    uint32_t dataspace = 0;
    SAFE_PARCEL(parcel->readUint32, &dataspace);
    capturedDataspace = static_cast<ui::Dataspace>(dataspace);
    SAFE_PARCEL(parcel->readInt32, &result);
    return NO_ERROR;
}

+2 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <binder/Parcel.h>
#include <binder/Parcelable.h>
#include <ui/Fence.h>
#include <ui/FenceResult.h>
#include <ui/GraphicBuffer.h>

namespace android::gui {
@@ -31,11 +32,10 @@ public:
    status_t readFromParcel(const android::Parcel* parcel) override;

    sp<GraphicBuffer> buffer;
    sp<Fence> fence = Fence::NO_FENCE;
    FenceResult fenceResult = Fence::NO_FENCE;
    bool capturedSecureLayers{false};
    bool capturedHdrLayers{false};
    ui::Dataspace capturedDataspace{ui::Dataspace::V0_SRGB};
    status_t result = OK;
};

} // namespace android::gui
+4 −2
Original line number Diff line number Diff line
@@ -34,7 +34,9 @@ public:
    ScreenCaptureResults waitForResults() {
        std::future<ScreenCaptureResults> resultsFuture = resultsPromise.get_future();
        const auto screenCaptureResults = resultsFuture.get();
        screenCaptureResults.fence->waitForever("");
        if (screenCaptureResults.fenceResult.ok()) {
            screenCaptureResults.fenceResult.value()->waitForever("");
        }
        return screenCaptureResults;
    }

+1 −1
Original line number Diff line number Diff line
@@ -311,7 +311,7 @@ protected:
            return err;
        }
        captureResults = captureListener->waitForResults();
        return captureResults.result;
        return fenceStatus(captureResults.fenceResult);
    }

    void queueBuffer(sp<IGraphicBufferProducer> igbp, uint8_t r, uint8_t g, uint8_t b,
+1 −1
Original line number Diff line number Diff line
@@ -218,7 +218,7 @@ protected:
            return err;
        }
        captureResults = captureListener->waitForResults();
        return captureResults.result;
        return fenceStatus(captureResults.fenceResult);
    }

    sp<Surface> mSurface;
Loading