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

Commit 774bcbe5 authored by Patrick Williams's avatar Patrick Williams Committed by Android (Google) Code Review
Browse files

Merge "Fix flaky BBQ tests" into main

parents c99e15b5 ed4745df
Loading
Loading
Loading
Loading
+32 −7
Original line number Diff line number Diff line
@@ -351,6 +351,24 @@ protected:
    sp<CountProducerListener> mProducerListener;
};

// Helper class to ensure the provided BBQ frame number has been committed in SurfaceFlinger.
class BBQSyncHelper {
public:
    BBQSyncHelper(BLASTBufferQueueHelper& bbqHelper, uint64_t frameNumber) {
        t.addTransactionCompletedCallback(callbackHelper.function, callbackHelper.getContext());
        bbqHelper.mergeWithNextTransaction(&t, frameNumber);
    }

    void wait() {
        CallbackData callbackData;
        callbackHelper.getCallbackData(&callbackData);
    }

private:
    Transaction t;
    CallbackHelper callbackHelper;
};

TEST_F(BLASTBufferQueueTest, CreateBLASTBufferQueue) {
    // create BLASTBufferQueue adapter associated with this surface
    BLASTBufferQueueHelper adapter(mSurfaceControl, mDisplayWidth, mDisplayHeight);
@@ -422,6 +440,7 @@ TEST_F(BLASTBufferQueueTest, onFrameAvailable_Apply) {
    BLASTBufferQueueHelper adapter(mSurfaceControl, mDisplayWidth, mDisplayHeight);
    sp<IGraphicBufferProducer> igbProducer;
    setUpProducer(adapter, igbProducer);
    BBQSyncHelper syncHelper{adapter, 1};

    int slot;
    sp<Fence> fence;
@@ -447,7 +466,7 @@ TEST_F(BLASTBufferQueueTest, onFrameAvailable_Apply) {
    igbProducer->queueBuffer(slot, input, &qbOutput);
    ASSERT_NE(ui::Transform::ROT_INVALID, qbOutput.transformHint);

    adapter.waitForCallbacks();
    syncHelper.wait();

    // capture screen and verify that it is red
    ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));
@@ -507,6 +526,7 @@ TEST_F(BLASTBufferQueueTest, SetCrop_Item) {
    BLASTBufferQueueHelper adapter(mSurfaceControl, mDisplayWidth, mDisplayHeight);
    sp<IGraphicBufferProducer> igbProducer;
    setUpProducer(adapter, igbProducer);
    BBQSyncHelper syncHelper{adapter, 1};
    int slot;
    sp<Fence> fence;
    sp<GraphicBuffer> buf;
@@ -531,7 +551,7 @@ TEST_F(BLASTBufferQueueTest, SetCrop_Item) {
    igbProducer->queueBuffer(slot, input, &qbOutput);
    ASSERT_NE(ui::Transform::ROT_INVALID, qbOutput.transformHint);

    adapter.waitForCallbacks();
    syncHelper.wait();
    // capture screen and verify that it is red
    ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));

@@ -562,6 +582,7 @@ TEST_F(BLASTBufferQueueTest, SetCrop_ScalingModeScaleCrop) {
    BLASTBufferQueueHelper adapter(mSurfaceControl, bufferSideLength, bufferSideLength);
    sp<IGraphicBufferProducer> igbProducer;
    setUpProducer(adapter, igbProducer);
    BBQSyncHelper syncHelper{adapter, 1};
    int slot;
    sp<Fence> fence;
    sp<GraphicBuffer> buf;
@@ -590,7 +611,7 @@ TEST_F(BLASTBufferQueueTest, SetCrop_ScalingModeScaleCrop) {
    igbProducer->queueBuffer(slot, input, &qbOutput);
    ASSERT_NE(ui::Transform::ROT_INVALID, qbOutput.transformHint);

    adapter.waitForCallbacks();
    syncHelper.wait();
    // capture screen and verify that it is red
    ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));
    ASSERT_NO_FATAL_FAILURE(checkScreenCapture(r, g, b,
@@ -621,6 +642,7 @@ TEST_F(BLASTBufferQueueTest, ScaleCroppedBufferToBufferSize) {
    BLASTBufferQueueHelper adapter(mSurfaceControl, windowSize.getWidth(), windowSize.getHeight());
    sp<IGraphicBufferProducer> igbProducer;
    setUpProducer(adapter, igbProducer);
    BBQSyncHelper syncHelper{adapter, 1};
    int slot;
    sp<Fence> fence;
    sp<GraphicBuffer> buf;
@@ -653,7 +675,7 @@ TEST_F(BLASTBufferQueueTest, ScaleCroppedBufferToBufferSize) {
    igbProducer->queueBuffer(slot, input, &qbOutput);
    ASSERT_NE(ui::Transform::ROT_INVALID, qbOutput.transformHint);

    adapter.waitForCallbacks();
    syncHelper.wait();

    ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));

@@ -688,6 +710,7 @@ TEST_F(BLASTBufferQueueTest, ScaleCroppedBufferToWindowSize) {
    BLASTBufferQueueHelper adapter(mSurfaceControl, windowSize.getWidth(), windowSize.getHeight());
    sp<IGraphicBufferProducer> igbProducer;
    setUpProducer(adapter, igbProducer);
    BBQSyncHelper syncHelper{adapter, 1};
    int slot;
    sp<Fence> fence;
    sp<GraphicBuffer> buf;
@@ -720,7 +743,7 @@ TEST_F(BLASTBufferQueueTest, ScaleCroppedBufferToWindowSize) {
    igbProducer->queueBuffer(slot, input, &qbOutput);
    ASSERT_NE(ui::Transform::ROT_INVALID, qbOutput.transformHint);

    adapter.waitForCallbacks();
    syncHelper.wait();

    ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));
    // Verify cropped region is scaled correctly.
@@ -746,6 +769,7 @@ TEST_F(BLASTBufferQueueTest, ScalingModeChanges) {
    sp<IGraphicBufferProducer> igbProducer;
    setUpProducer(adapter, igbProducer);
    {
        BBQSyncHelper syncHelper{adapter, 1};
        int slot;
        sp<Fence> fence;
        sp<GraphicBuffer> buf;
@@ -767,7 +791,7 @@ TEST_F(BLASTBufferQueueTest, ScalingModeChanges) {
                                                       NATIVE_WINDOW_SCALING_MODE_FREEZE, 0,
                                                       Fence::NO_FENCE);
        igbProducer->queueBuffer(slot, input, &qbOutput);
        adapter.waitForCallbacks();
        syncHelper.wait();
    }
    // capture screen and verify that it is red
    ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));
@@ -780,6 +804,7 @@ TEST_F(BLASTBufferQueueTest, ScalingModeChanges) {
    adapter.update(mSurfaceControl, mDisplayWidth, mDisplayHeight / 2);

    {
        BBQSyncHelper syncHelper{adapter, 1};
        int slot;
        sp<Fence> fence;
        sp<GraphicBuffer> buf;
@@ -802,7 +827,7 @@ TEST_F(BLASTBufferQueueTest, ScalingModeChanges) {
                                                       NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW,
                                                       0, Fence::NO_FENCE);
        igbProducer->queueBuffer(slot, input, &qbOutput);
        adapter.waitForCallbacks();
        syncHelper.wait();
    }
    // capture screen and verify that it is red
    ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));