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

Commit 32cdc1f3 authored by Valerie Hau's avatar Valerie Hau
Browse files

Adding transformHint for BufferStateLayers

Adding transformHint to callbacks and passing back during Surface
creation

Bug: 133512804, 141939598
Test: build, boot, manual
Change-Id: Ic3227b7d5991e342c017e789afc70cc6605d25f5
parent 13bd8e4d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ status_t SurfaceStats::writeToParcel(Parcel* output) const {
    } else {
        err = output->writeBool(false);
    }
    err = output->writeUint32(transformHint);
    return err;
}

@@ -72,7 +73,8 @@ status_t SurfaceStats::readFromParcel(const Parcel* input) {
            return err;
        }
    }
    return NO_ERROR;
    err = input->readUint32(&transformHint);
    return err;
}

status_t TransactionStats::writeToParcel(Parcel* output) const {
+2 −1
Original line number Diff line number Diff line
@@ -222,7 +222,8 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener
            for (const auto& surfaceStats : transactionStats.surfaceStats) {
                surfaceControlStats.emplace_back(surfaceControls[surfaceStats.surfaceControl],
                                                 surfaceStats.acquireTime,
                                                 surfaceStats.previousReleaseFence);
                                                 surfaceStats.previousReleaseFence,
                                                 surfaceStats.transformHint);
            }

            callbackFunction(transactionStats.latchTime, transactionStats.presentFence,
+7 −2
Original line number Diff line number Diff line
@@ -41,12 +41,17 @@ public:
    status_t readFromParcel(const Parcel* input) override;

    SurfaceStats() = default;
    SurfaceStats(const sp<IBinder>& sc, nsecs_t time, const sp<Fence>& prevReleaseFence)
          : surfaceControl(sc), acquireTime(time), previousReleaseFence(prevReleaseFence) {}
    SurfaceStats(const sp<IBinder>& sc, nsecs_t time, const sp<Fence>& prevReleaseFence,
                 uint32_t hint)
          : surfaceControl(sc),
            acquireTime(time),
            previousReleaseFence(prevReleaseFence),
            transformHint(hint) {}

    sp<IBinder> surfaceControl;
    nsecs_t acquireTime = -1;
    sp<Fence> previousReleaseFence;
    uint32_t transformHint = 0;
};

class TransactionStats : public Parcelable {
+6 −2
Original line number Diff line number Diff line
@@ -58,12 +58,16 @@ class Region;

struct SurfaceControlStats {
    SurfaceControlStats(const sp<SurfaceControl>& sc, nsecs_t time,
                        const sp<Fence>& prevReleaseFence)
          : surfaceControl(sc), acquireTime(time), previousReleaseFence(prevReleaseFence) {}
                        const sp<Fence>& prevReleaseFence, uint32_t hint)
          : surfaceControl(sc),
            acquireTime(time),
            previousReleaseFence(prevReleaseFence),
            transformHint(hint) {}

    sp<SurfaceControl> surfaceControl;
    nsecs_t acquireTime = -1;
    sp<Fence> previousReleaseFence;
    uint32_t transformHint = 0;
};

using TransactionCompletedCallbackTakesContext =
+6 −3
Original line number Diff line number Diff line
@@ -103,12 +103,15 @@ void BufferStateLayer::onLayerDisplayed(const sp<Fence>& releaseFence) {
    }
}

void BufferStateLayer::setTransformHint(uint32_t /*orientation*/) const {
    // TODO(marissaw): send the transform hint to buffer owner
    return;
void BufferStateLayer::setTransformHint(uint32_t orientation) const {
    mTransformHint = orientation;
}

void BufferStateLayer::releasePendingBuffer(nsecs_t /*dequeueReadyTime*/) {
    for (const auto& handle : mDrawingState.callbackHandles) {
        handle->transformHint = mTransformHint;
    }

    mFlinger->getTransactionCompletedThread().finalizePendingCallbackHandles(
            mDrawingState.callbackHandles);

Loading