summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/RegionSamplingThread.cpp
diff options
context:
space:
mode:
author Dominik Laskowski <domlaskowski@google.com> 2022-05-07 15:52:55 -0700
committer Dominik Laskowski <domlaskowski@google.com> 2022-05-16 08:13:25 -0700
commitbb448ce9aa521f9574d94c9ec2d57eb7d37382cb (patch)
treece3b4e8cc398b8b38543908f423370450731c99a /services/surfaceflinger/RegionSamplingThread.cpp
parent0f24a7c37b3e65996c9bb88c3e22038ae2ca58ef (diff)
SF: Do not duplicate fences per layer per frame
Convert the unique_fd of RenderEngineResult (and futures thereof) into sp<Fence> such that postFramebuffer does not duplicate release/present fences. Remove a few copies of shared futures/pointers with std::move. Bug: 232436803 Test: simpleperf (-33% cycles in sys_dup) Change-Id: Ia7c6c8333a712441f3612fb5c720ea2932799636
Diffstat (limited to 'services/surfaceflinger/RegionSamplingThread.cpp')
-rw-r--r--services/surfaceflinger/RegionSamplingThread.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp
index e29e6ab05f..2487dbd793 100644
--- a/services/surfaceflinger/RegionSamplingThread.cpp
+++ b/services/surfaceflinger/RegionSamplingThread.cpp
@@ -355,12 +355,15 @@ void RegionSamplingThread::captureSample() {
WRITEABLE);
}
- auto captureScreenResultFuture =
- mFlinger.captureScreenCommon(std::move(renderAreaFuture), traverseLayers, buffer,
- true /* regionSampling */, false /* grayscale */, nullptr);
- auto& captureScreenResult = captureScreenResultFuture.get();
- if (captureScreenResult.drawFence.ok()) {
- sync_wait(captureScreenResult.drawFence.get(), -1);
+ constexpr bool kRegionSampling = true;
+ constexpr bool kGrayscale = false;
+
+ if (const auto fenceResult =
+ mFlinger.captureScreenCommon(std::move(renderAreaFuture), traverseLayers, buffer,
+ kRegionSampling, kGrayscale, nullptr)
+ .get();
+ fenceResult.ok()) {
+ fenceResult.value()->waitForever(LOG_TAG);
}
std::vector<Descriptor> activeDescriptors;