summaryrefslogtreecommitdiffstats
path: root/services/surfaceflinger/DisplayHardware
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2013-07-18 22:10:56 -0700
committerMathias Agopian <mathias@google.com>2013-07-19 17:38:01 -0700
commit7cdd786fa80cf03551291ae8feca7b77583be1c5 (patch)
treeb3d03af7ad939e89db944c648fdb18ee349b86a8 /services/surfaceflinger/DisplayHardware
parenta3fbda3cef04d51a35a3eb64b2f744a989800856 (diff)
downloadframeworks_native-7cdd786fa80cf03551291ae8feca7b77583be1c5.zip
frameworks_native-7cdd786fa80cf03551291ae8feca7b77583be1c5.tar.gz
frameworks_native-7cdd786fa80cf03551291ae8feca7b77583be1c5.tar.bz2
Make ANW.setSwapInterval(0) work again
we can now queue/dequeue a buffer in asynchrnous mode by using the async parameter to these calls. async mode is only specified with those calls (it is not modal anymore). as a consequence it can only be specified when the buffer count is not overidden, as error is returned otherwise. Change-Id: Ic63f4f96f671cb9d65c4cecbcc192615e09a8b6b
Diffstat (limited to 'services/surfaceflinger/DisplayHardware')
-rw-r--r--services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp15
-rw-r--r--services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h4
2 files changed, 10 insertions, 9 deletions
diff --git a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp
index c92b666..57cb361 100644
--- a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp
+++ b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp
@@ -126,7 +126,7 @@ status_t VirtualDisplaySurface::advanceFrame() {
mQueueBufferOutput.deflate(&mSinkBufferWidth, &mSinkBufferHeight,
&transformHint, &numPendingBuffers);
int sslot;
- result = dequeueBuffer(SOURCE_SINK, 0, &sslot, &outFence);
+ result = dequeueBuffer(SOURCE_SINK, 0, &sslot, &outFence, false);
if (result < 0)
return result;
mOutputProducerSlot = mapSource2ProducerSlot(SOURCE_SINK, sslot);
@@ -196,7 +196,7 @@ void VirtualDisplaySurface::onFrameCommitted() {
status_t result = mSource[SOURCE_SINK]->queueBuffer(sslot,
QueueBufferInput(systemTime(),
Rect(mSinkBufferWidth, mSinkBufferHeight),
- NATIVE_WINDOW_SCALING_MODE_FREEZE, 0, outFence),
+ NATIVE_WINDOW_SCALING_MODE_FREEZE, 0, false, outFence),
&qbo);
if (result == NO_ERROR) {
updateQueueBufferOutput(qbo);
@@ -224,8 +224,8 @@ status_t VirtualDisplaySurface::setBufferCount(int bufferCount) {
}
status_t VirtualDisplaySurface::dequeueBuffer(Source source,
- uint32_t format, int* sslot, sp<Fence>* fence) {
- status_t result = mSource[source]->dequeueBuffer(sslot, fence,
+ uint32_t format, int* sslot, sp<Fence>* fence, bool async) {
+ status_t result = mSource[source]->dequeueBuffer(sslot, fence, async,
mSinkBufferWidth, mSinkBufferHeight, format, mProducerUsage);
if (result < 0)
return result;
@@ -257,7 +257,7 @@ status_t VirtualDisplaySurface::dequeueBuffer(Source source,
return result;
}
-status_t VirtualDisplaySurface::dequeueBuffer(int* pslot, sp<Fence>* fence,
+status_t VirtualDisplaySurface::dequeueBuffer(int* pslot, sp<Fence>* fence, bool async,
uint32_t w, uint32_t h, uint32_t format, uint32_t usage) {
VDS_LOGW_IF(mDbgState != DBG_STATE_PREPARED,
"Unexpected dequeueBuffer() in %s state", dbgStateStr());
@@ -273,7 +273,7 @@ status_t VirtualDisplaySurface::dequeueBuffer(int* pslot, sp<Fence>* fence,
}
int sslot;
- status_t result = dequeueBuffer(source, format, &sslot, fence);
+ status_t result = dequeueBuffer(source, format, &sslot, fence, async);
if (result >= 0) {
*pslot = mapSource2ProducerSlot(source, sslot);
}
@@ -321,8 +321,9 @@ status_t VirtualDisplaySurface::queueBuffer(int pslot,
Rect crop;
int scalingMode;
uint32_t transform;
+ bool async;
input.deflate(&timestamp, &crop, &scalingMode, &transform,
- &mFbFence);
+ &async, &mFbFence);
mFbProducerSlot = pslot;
}
diff --git a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h
index 94b24d2..dc9655b 100644
--- a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h
+++ b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h
@@ -95,7 +95,7 @@ private:
//
virtual status_t requestBuffer(int pslot, sp<GraphicBuffer>* outBuf);
virtual status_t setBufferCount(int bufferCount);
- virtual status_t dequeueBuffer(int* pslot, sp<Fence>* fence,
+ virtual status_t dequeueBuffer(int* pslot, sp<Fence>* fence, bool async,
uint32_t w, uint32_t h, uint32_t format, uint32_t usage);
virtual status_t queueBuffer(int pslot,
const QueueBufferInput& input, QueueBufferOutput* output);
@@ -109,7 +109,7 @@ private:
//
static Source fbSourceForCompositionType(CompositionType type);
status_t dequeueBuffer(Source source, uint32_t format,
- int* sslot, sp<Fence>* fence);
+ int* sslot, sp<Fence>* fence, bool async);
void updateQueueBufferOutput(const QueueBufferOutput& qbo);
void resetPerFrameState();