summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-06-16 18:34:41 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-06-16 18:34:41 +0000
commitd23d2f9aa228cab96c05856720e76abe40a47c7c (patch)
treeb9b66071b0dc06a9a7c649447275798db197c8b0
parenta443989be3cb275947effe26833715da73528d23 (diff)
parent1ea732e220087d98b351932d9014ea59c2ab3005 (diff)
downloadnative-nougat-mr2.2-release.tar.gz
Merge cherrypicks of [2420017, 2420032, 2420103, 2420142, 2420125, 2420126, 2420086, 2420018, 2420104, 2420162, 2420163, 2420164, 2420143, 2420019, 2420034, 2420055, 2420127, 2420128, 2420129, 2420020, 2420166, 2420167, 2420058, 2420131, 2420202, 2420108, 2420146, 2420109, 2420185, 2420111, 2420187, 2420113, 2420114, 2420059, 2420115] into nyc-mr2-security-b-releaseandroid-7.1.2_r32nougat-mr2.2-release
Change-Id: I496b4d4f235acd17843fbe3b923422cae519098b
-rw-r--r--libs/gui/BufferQueueProducer.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index b2169c84c7..ff85eb5ce8 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -921,7 +921,11 @@ status_t BufferQueueProducer::queueBuffer(int slot,
// Call back without the main BufferQueue lock held, but with the callback
// lock held so we can ensure that callbacks occur in order
- {
+
+ int connectedApi;
+ sp<Fence> lastQueuedFence;
+
+ { // scope for the lock
Mutex::Autolock lock(mCallbackMutex);
while (callbackTicket != mCurrentCallbackTicket) {
mCallbackCondition.wait(mCallbackMutex);
@@ -933,20 +937,24 @@ status_t BufferQueueProducer::queueBuffer(int slot,
frameReplacedListener->onFrameReplaced(item);
}
+ connectedApi = mCore->mConnectedApi;
+ lastQueuedFence = std::move(mLastQueueBufferFence);
+
+ mLastQueueBufferFence = std::move(fence);
+ mLastQueuedCrop = item.mCrop;
+ mLastQueuedTransform = item.mTransform;
+
++mCurrentCallbackTicket;
mCallbackCondition.broadcast();
}
// Wait without lock held
- if (mCore->mConnectedApi == NATIVE_WINDOW_API_EGL) {
+ if (connectedApi == NATIVE_WINDOW_API_EGL) {
// Waiting here allows for two full buffers to be queued but not a
// third. In the event that frames take varying time, this makes a
// small trade-off in favor of latency rather than throughput.
- mLastQueueBufferFence->waitForever("Throttling EGL Production");
+ lastQueuedFence->waitForever("Throttling EGL Production");
}
- mLastQueueBufferFence = fence;
- mLastQueuedCrop = item.mCrop;
- mLastQueuedTransform = item.mTransform;
return NO_ERROR;
}