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

Commit 410f23ba authored by Andy McFadden's avatar Andy McFadden Committed by Android Git Automerger
Browse files

am 30290a55: am 90f59bf9: Merge "Re-enable frame dropping for non-auto timestamps" into klp-dev

* commit '30290a55':
  Re-enable frame dropping for non-auto timestamps
parents c1408e90 30290a55
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -72,6 +72,10 @@ public:
        // to set by queueBuffer each time this slot is queued.
        int64_t mTimestamp;

        // mIsAutoTimestamp indicates whether mTimestamp was generated
        // automatically when the buffer was queued.
        bool mIsAutoTimestamp;

        // mFrameNumber is the number of the queued frame for this slot.
        uint64_t mFrameNumber;

+9 −6
Original line number Diff line number Diff line
@@ -108,15 +108,17 @@ public:
    struct QueueBufferInput : public Flattenable<QueueBufferInput> {
        friend class Flattenable<QueueBufferInput>;
        inline QueueBufferInput(const Parcel& parcel);
        inline QueueBufferInput(int64_t timestamp,
        inline QueueBufferInput(int64_t timestamp, bool isAutoTimestamp,
                const Rect& crop, int scalingMode, uint32_t transform, bool async,
                const sp<Fence>& fence)
        : timestamp(timestamp), crop(crop), scalingMode(scalingMode),
          transform(transform), async(async), fence(fence) { }
        inline void deflate(int64_t* outTimestamp, Rect* outCrop,
                int* outScalingMode, uint32_t* outTransform, bool* outAsync,
                sp<Fence>* outFence) const {
        : timestamp(timestamp), isAutoTimestamp(isAutoTimestamp), crop(crop),
          scalingMode(scalingMode), transform(transform), async(async),
          fence(fence) { }
        inline void deflate(int64_t* outTimestamp, bool* outIsAutoTimestamp,
                Rect* outCrop, int* outScalingMode, uint32_t* outTransform,
                bool* outAsync, sp<Fence>* outFence) const {
            *outTimestamp = timestamp;
            *outIsAutoTimestamp = bool(isAutoTimestamp);
            *outCrop = crop;
            *outScalingMode = scalingMode;
            *outTransform = transform;
@@ -132,6 +134,7 @@ public:

    private:
        int64_t timestamp;
        int isAutoTimestamp;
        Rect crop;
        int scalingMode;
        uint32_t transform;
+10 −2
Original line number Diff line number Diff line
@@ -475,10 +475,12 @@ status_t BufferQueue::queueBuffer(int buf,
    uint32_t transform;
    int scalingMode;
    int64_t timestamp;
    bool isAutoTimestamp;
    bool async;
    sp<Fence> fence;

    input.deflate(&timestamp, &crop, &scalingMode, &transform, &async, &fence);
    input.deflate(&timestamp, &isAutoTimestamp, &crop, &scalingMode, &transform,
            &async, &fence);

    if (fence == NULL) {
        ST_LOGE("queueBuffer: fence is NULL");
@@ -558,6 +560,7 @@ status_t BufferQueue::queueBuffer(int buf,
        item.mTransform = transform;
        item.mScalingMode = scalingMode;
        item.mTimestamp = timestamp;
        item.mIsAutoTimestamp = isAutoTimestamp;
        item.mFrameNumber = mFrameCounter;
        item.mBuf = buf;
        item.mFence = fence;
@@ -860,7 +863,12 @@ status_t BufferQueue::acquireBuffer(BufferItem *buffer, nsecs_t expectedPresent)
        //
        // NOTE: code assumes monotonic time values from the system clock are
        // positive.
        while (false && mQueue.size() > 1) {

        // Start by checking to see if we can drop frames.  We skip this check
        // if the timestamps are being auto-generated by Surface -- if the
        // app isn't generating timestamps explicitly, they probably don't
        // want frames to be discarded based on them.
        while (mQueue.size() > 1 && !mQueue[0].mIsAutoTimestamp) {
            // If entry[1] is timely, drop entry[0] (and repeat).  We apply
            // an additional criteria here: we only drop the earlier buffer if
            // our desiredPresent falls within +/- 1 second of the expected
+4 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ IGraphicBufferConsumer::BufferItem::BufferItem() :
    mTransform(0),
    mScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE),
    mTimestamp(0),
    mIsAutoTimestamp(false),
    mFrameNumber(0),
    mBuf(INVALID_BUFFER_SLOT),
    mIsDroppable(false),
@@ -55,6 +56,7 @@ size_t IGraphicBufferConsumer::BufferItem::getPodSize() const {
            sizeof(mTransform) +
            sizeof(mScalingMode) +
            sizeof(mTimestamp) +
            sizeof(mIsAutoTimestamp) +
            sizeof(mFrameNumber) +
            sizeof(mBuf) +
            sizeof(mIsDroppable) +
@@ -123,6 +125,7 @@ status_t IGraphicBufferConsumer::BufferItem::flatten(
    FlattenableUtils::write(buffer, size, mTransform);
    FlattenableUtils::write(buffer, size, mScalingMode);
    FlattenableUtils::write(buffer, size, mTimestamp);
    FlattenableUtils::write(buffer, size, mIsAutoTimestamp);
    FlattenableUtils::write(buffer, size, mFrameNumber);
    FlattenableUtils::write(buffer, size, mBuf);
    FlattenableUtils::write(buffer, size, mIsDroppable);
@@ -163,6 +166,7 @@ status_t IGraphicBufferConsumer::BufferItem::unflatten(
    FlattenableUtils::read(buffer, size, mTransform);
    FlattenableUtils::read(buffer, size, mScalingMode);
    FlattenableUtils::read(buffer, size, mTimestamp);
    FlattenableUtils::read(buffer, size, mIsAutoTimestamp);
    FlattenableUtils::read(buffer, size, mFrameNumber);
    FlattenableUtils::read(buffer, size, mBuf);
    FlattenableUtils::read(buffer, size, mIsDroppable);
+4 −0
Original line number Diff line number Diff line
@@ -273,6 +273,7 @@ IGraphicBufferProducer::QueueBufferInput::QueueBufferInput(const Parcel& parcel)

size_t IGraphicBufferProducer::QueueBufferInput::getFlattenedSize() const {
    return sizeof(timestamp)
         + sizeof(isAutoTimestamp)
         + sizeof(crop)
         + sizeof(scalingMode)
         + sizeof(transform)
@@ -291,6 +292,7 @@ status_t IGraphicBufferProducer::QueueBufferInput::flatten(
        return NO_MEMORY;
    }
    FlattenableUtils::write(buffer, size, timestamp);
    FlattenableUtils::write(buffer, size, isAutoTimestamp);
    FlattenableUtils::write(buffer, size, crop);
    FlattenableUtils::write(buffer, size, scalingMode);
    FlattenableUtils::write(buffer, size, transform);
@@ -303,6 +305,7 @@ status_t IGraphicBufferProducer::QueueBufferInput::unflatten(
{
    size_t minNeeded =
              sizeof(timestamp)
            + sizeof(isAutoTimestamp)
            + sizeof(crop)
            + sizeof(scalingMode)
            + sizeof(transform)
@@ -313,6 +316,7 @@ status_t IGraphicBufferProducer::QueueBufferInput::unflatten(
    }

    FlattenableUtils::read(buffer, size, timestamp);
    FlattenableUtils::read(buffer, size, isAutoTimestamp);
    FlattenableUtils::read(buffer, size, crop);
    FlattenableUtils::read(buffer, size, scalingMode);
    FlattenableUtils::read(buffer, size, transform);
Loading