BufferQueueProducer::queueBuffer may not drop buffers
Enable BufferQueueProducer::setDequeueTimeout retain existing
dropping behavior. Setting negative and zero to setDequeueTimeout will
not change existing dropping behavior.
BufferQueueProducer::setLegacyBufferDrop can disable buffer dropping
behavior of BufferQueueProducer::queueBuffer. If it's disabled, buffers
will not be dropped unless consumer is SurfaceFlinger.
Bug: 130039639
Change-Id: I8432a7ad386836498e632c67953ad49c6be008bb
diff --git a/services/surfaceflinger/MonitoredProducer.cpp b/services/surfaceflinger/MonitoredProducer.cpp
index 06e3d9c..c60421b 100644
--- a/services/surfaceflinger/MonitoredProducer.cpp
+++ b/services/surfaceflinger/MonitoredProducer.cpp
@@ -132,6 +132,10 @@
return mProducer->setDequeueTimeout(timeout);
}
+status_t MonitoredProducer::setLegacyBufferDrop(bool drop) {
+ return mProducer->setLegacyBufferDrop(drop);
+}
+
status_t MonitoredProducer::getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
sp<Fence>* outFence, float outTransformMatrix[16]) {
return mProducer->getLastQueuedBuffer(outBuffer, outFence,
diff --git a/services/surfaceflinger/MonitoredProducer.h b/services/surfaceflinger/MonitoredProducer.h
index 1246d14..d346f82 100644
--- a/services/surfaceflinger/MonitoredProducer.h
+++ b/services/surfaceflinger/MonitoredProducer.h
@@ -61,6 +61,7 @@
virtual status_t setGenerationNumber(uint32_t generationNumber);
virtual String8 getConsumerName() const override;
virtual status_t setDequeueTimeout(nsecs_t timeout) override;
+ virtual status_t setLegacyBufferDrop(bool drop) override;
virtual status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
sp<Fence>* outFence, float outTransformMatrix[16]) override;
virtual IBinder* onAsBinder();