diff options
Diffstat (limited to 'services/surfaceflinger/RegionSamplingThread.cpp')
-rw-r--r-- | services/surfaceflinger/RegionSamplingThread.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp index aa2fec56ad..2487dbd793 100644 --- a/services/surfaceflinger/RegionSamplingThread.cpp +++ b/services/surfaceflinger/RegionSamplingThread.cpp @@ -30,8 +30,9 @@ #include <compositionengine/impl/OutputCompositionState.h> #include <cutils/properties.h> #include <ftl/future.h> -#include <gui/IRegionSamplingListener.h> +#include <gui/SpHash.h> #include <gui/SyncScreenCaptureListener.h> +#include <renderengine/impl/ExternalTexture.h> #include <ui/DisplayStatInfo.h> #include <utils/Trace.h> @@ -46,10 +47,7 @@ namespace android { using namespace std::chrono_literals; -template <typename T> -struct SpHash { - size_t operator()(const sp<T>& p) const { return std::hash<T*>()(p.get()); } -}; +using gui::SpHash; constexpr auto lumaSamplingStepTag = "LumaSamplingStep"; enum class samplingStep { @@ -150,7 +148,7 @@ void RegionSamplingThread::checkForStaleLuma() { if (mSampleRequestTime.has_value()) { ATRACE_INT(lumaSamplingStepTag, static_cast<int>(samplingStep::waitForSamplePhase)); mSampleRequestTime.reset(); - mFlinger.scheduleRegionSamplingThread(); + mFlinger.scheduleSample(); } } @@ -352,14 +350,21 @@ void RegionSamplingThread::captureSample() { LOG_ALWAYS_FATAL_IF(bufferStatus != OK, "captureSample: Buffer failed to allocate: %d", bufferStatus); buffer = std::make_shared< - renderengine::ExternalTexture>(graphicBuffer, mFlinger.getRenderEngine(), - renderengine::ExternalTexture::Usage::WRITEABLE); + renderengine::impl::ExternalTexture>(graphicBuffer, mFlinger.getRenderEngine(), + renderengine::impl::ExternalTexture::Usage:: + WRITEABLE); } - const sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener(); - mFlinger.captureScreenCommon(std::move(renderAreaFuture), traverseLayers, buffer, - true /* regionSampling */, false /* grayscale */, captureListener); - ScreenCaptureResults captureResults = captureListener->waitForResults(); + 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; for (const auto& descriptor : descriptors) { |