diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-05-03 09:17:29 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-05-03 09:17:29 +0000 |
commit | 116e3cc8f7ccaf1aa05c7e8e6e6907b0a647ae88 (patch) | |
tree | eed064e035212e494cabd777de2905513f8fb098 | |
parent | 78a11714dc12c6324584478b6e408b0290fe2377 (diff) | |
parent | d637081295eabcf20cea0ecd2dff1b2444b8e8ca (diff) | |
download | native-116e3cc8f7ccaf1aa05c7e8e6e6907b0a647ae88.tar.gz |
Snap for 5526913 from d637081295eabcf20cea0ecd2dff1b2444b8e8ca to pi-qpr3-b-releaseandroid-9.0.0_r42
Change-Id: I337a470789f0e789a19d72cf565089c2da703c4e
-rw-r--r-- | libs/gui/BufferQueueProducer.cpp | 16 | ||||
-rw-r--r-- | services/surfaceflinger/TimeStats/TimeStats.cpp | 18 | ||||
-rw-r--r-- | vulkan/libvulkan/driver.cpp | 4 |
3 files changed, 29 insertions, 9 deletions
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index c96a2dd6a3..9d7f14cb6e 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -989,14 +989,6 @@ status_t BufferQueueProducer::queueBuffer(int slot, mCallbackCondition.broadcast(); } - // Wait without lock held - 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. - lastQueuedFence->waitForever("Throttling EGL Production"); - } - // Update and get FrameEventHistory. nsecs_t postedTime = systemTime(SYSTEM_TIME_MONOTONIC); NewFrameEventsEntry newFrameEventsEntry = { @@ -1008,6 +1000,14 @@ status_t BufferQueueProducer::queueBuffer(int slot, addAndGetFrameTimestamps(&newFrameEventsEntry, getFrameTimestamps ? &output->frameTimestamps : nullptr); + // Wait without lock held + 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. + lastQueuedFence->waitForever("Throttling EGL Production"); + } + return NO_ERROR; } diff --git a/services/surfaceflinger/TimeStats/TimeStats.cpp b/services/surfaceflinger/TimeStats/TimeStats.cpp index d4f1e29042..9c34aa726b 100644 --- a/services/surfaceflinger/TimeStats/TimeStats.cpp +++ b/services/surfaceflinger/TimeStats/TimeStats.cpp @@ -277,6 +277,9 @@ void TimeStats::setLatchTime(const std::string& layerName, uint64_t frameNumber, std::lock_guard<std::mutex> lock(mMutex); if (!timeStatsTracker.count(layerName)) return; LayerRecord& layerRecord = timeStatsTracker[layerName]; + if (layerRecord.waitData < 0 || + layerRecord.waitData >= static_cast<int32_t>(layerRecord.timeRecords.size())) + return; TimeRecord& timeRecord = layerRecord.timeRecords[layerRecord.waitData]; if (timeRecord.frameNumber == frameNumber) { timeRecord.latchTime = latchTime; @@ -294,6 +297,9 @@ void TimeStats::setDesiredTime(const std::string& layerName, uint64_t frameNumbe std::lock_guard<std::mutex> lock(mMutex); if (!timeStatsTracker.count(layerName)) return; LayerRecord& layerRecord = timeStatsTracker[layerName]; + if (layerRecord.waitData < 0 || + layerRecord.waitData >= static_cast<int32_t>(layerRecord.timeRecords.size())) + return; TimeRecord& timeRecord = layerRecord.timeRecords[layerRecord.waitData]; if (timeRecord.frameNumber == frameNumber) { timeRecord.desiredTime = desiredTime; @@ -311,6 +317,9 @@ void TimeStats::setAcquireTime(const std::string& layerName, uint64_t frameNumbe std::lock_guard<std::mutex> lock(mMutex); if (!timeStatsTracker.count(layerName)) return; LayerRecord& layerRecord = timeStatsTracker[layerName]; + if (layerRecord.waitData < 0 || + layerRecord.waitData >= static_cast<int32_t>(layerRecord.timeRecords.size())) + return; TimeRecord& timeRecord = layerRecord.timeRecords[layerRecord.waitData]; if (timeRecord.frameNumber == frameNumber) { timeRecord.acquireTime = acquireTime; @@ -328,6 +337,9 @@ void TimeStats::setAcquireFence(const std::string& layerName, uint64_t frameNumb std::lock_guard<std::mutex> lock(mMutex); if (!timeStatsTracker.count(layerName)) return; LayerRecord& layerRecord = timeStatsTracker[layerName]; + if (layerRecord.waitData < 0 || + layerRecord.waitData >= static_cast<int32_t>(layerRecord.timeRecords.size())) + return; TimeRecord& timeRecord = layerRecord.timeRecords[layerRecord.waitData]; if (timeRecord.frameNumber == frameNumber) { timeRecord.acquireFence = acquireFence; @@ -345,6 +357,9 @@ void TimeStats::setPresentTime(const std::string& layerName, uint64_t frameNumbe std::lock_guard<std::mutex> lock(mMutex); if (!timeStatsTracker.count(layerName)) return; LayerRecord& layerRecord = timeStatsTracker[layerName]; + if (layerRecord.waitData < 0 || + layerRecord.waitData >= static_cast<int32_t>(layerRecord.timeRecords.size())) + return; TimeRecord& timeRecord = layerRecord.timeRecords[layerRecord.waitData]; if (timeRecord.frameNumber == frameNumber) { timeRecord.presentTime = presentTime; @@ -366,6 +381,9 @@ void TimeStats::setPresentFence(const std::string& layerName, uint64_t frameNumb std::lock_guard<std::mutex> lock(mMutex); if (!timeStatsTracker.count(layerName)) return; LayerRecord& layerRecord = timeStatsTracker[layerName]; + if (layerRecord.waitData < 0 || + layerRecord.waitData >= static_cast<int32_t>(layerRecord.timeRecords.size())) + return; TimeRecord& timeRecord = layerRecord.timeRecords[layerRecord.waitData]; if (timeRecord.frameNumber == frameNumber) { timeRecord.presentFence = presentFence; diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp index 56bc35ec70..19d0146dc9 100644 --- a/vulkan/libvulkan/driver.cpp +++ b/vulkan/libvulkan/driver.cpp @@ -945,7 +945,9 @@ VkResult EnumerateDeviceExtensionProperties( memcpy(prop.extensionName, VK_KHR_SWAPCHAIN_EXTENSION_NAME, sizeof(VK_KHR_SWAPCHAIN_EXTENSION_NAME)); - prop.specVersion = VK_KHR_SWAPCHAIN_SPEC_VERSION; + // b/130182551 VK_KHR_SWAPCHAIN_SPEC_VERSION > 68 has structs the + // loader doesn't handle properly. So drop the spec version to 68. + prop.specVersion = 68; } } |