Loading include/gui/IGraphicBufferConsumer.h +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading include/gui/IGraphicBufferProducer.h +9 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -132,6 +134,7 @@ public: private: int64_t timestamp; int isAutoTimestamp; Rect crop; int scalingMode; uint32_t transform; Loading libs/gui/BufferQueue.cpp +10 −2 Original line number Diff line number Diff line Loading @@ -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(×tamp, &crop, &scalingMode, &transform, &async, &fence); input.deflate(×tamp, &isAutoTimestamp, &crop, &scalingMode, &transform, &async, &fence); if (fence == NULL) { ST_LOGE("queueBuffer: fence is NULL"); Loading Loading @@ -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; Loading Loading @@ -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 Loading libs/gui/IGraphicBufferConsumer.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -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), Loading @@ -55,6 +56,7 @@ size_t IGraphicBufferConsumer::BufferItem::getPodSize() const { sizeof(mTransform) + sizeof(mScalingMode) + sizeof(mTimestamp) + sizeof(mIsAutoTimestamp) + sizeof(mFrameNumber) + sizeof(mBuf) + sizeof(mIsDroppable) + Loading Loading @@ -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); Loading Loading @@ -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); Loading libs/gui/IGraphicBufferProducer.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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); Loading @@ -303,6 +305,7 @@ status_t IGraphicBufferProducer::QueueBufferInput::unflatten( { size_t minNeeded = sizeof(timestamp) + sizeof(isAutoTimestamp) + sizeof(crop) + sizeof(scalingMode) + sizeof(transform) Loading @@ -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 Loading
include/gui/IGraphicBufferConsumer.h +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
include/gui/IGraphicBufferProducer.h +9 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -132,6 +134,7 @@ public: private: int64_t timestamp; int isAutoTimestamp; Rect crop; int scalingMode; uint32_t transform; Loading
libs/gui/BufferQueue.cpp +10 −2 Original line number Diff line number Diff line Loading @@ -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(×tamp, &crop, &scalingMode, &transform, &async, &fence); input.deflate(×tamp, &isAutoTimestamp, &crop, &scalingMode, &transform, &async, &fence); if (fence == NULL) { ST_LOGE("queueBuffer: fence is NULL"); Loading Loading @@ -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; Loading Loading @@ -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 Loading
libs/gui/IGraphicBufferConsumer.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -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), Loading @@ -55,6 +56,7 @@ size_t IGraphicBufferConsumer::BufferItem::getPodSize() const { sizeof(mTransform) + sizeof(mScalingMode) + sizeof(mTimestamp) + sizeof(mIsAutoTimestamp) + sizeof(mFrameNumber) + sizeof(mBuf) + sizeof(mIsDroppable) + Loading Loading @@ -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); Loading Loading @@ -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); Loading
libs/gui/IGraphicBufferProducer.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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); Loading @@ -303,6 +305,7 @@ status_t IGraphicBufferProducer::QueueBufferInput::unflatten( { size_t minNeeded = sizeof(timestamp) + sizeof(isAutoTimestamp) + sizeof(crop) + sizeof(scalingMode) + sizeof(transform) Loading @@ -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