summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/RegionSamplingThread.cpp
diff options
context:
space:
mode:
author Xin Li <delphij@google.com> 2022-06-29 17:23:05 +0000
committer Xin Li <delphij@google.com> 2022-06-29 17:23:05 +0000
commit552bdbb3f7e423c4047ed209917a12f8cadf86e9 (patch)
treedb84b827307260c3e1e05d5d30a08c08d427e158 /services/surfaceflinger/RegionSamplingThread.cpp
parentae30141ed1e6ac0f9a41a14012a9f072034b3f70 (diff)
parentad3a19985dcb7cd8bc76ce203b26b28765112bf4 (diff)
Merge tm-dev-plus-aosp-without-vendor@8763363
Bug: 236760014 Merged-In: Id23fa2f0004319f4ee592e19dc34a6b74cdb644f Change-Id: I146284f445cfeff49cab8b93e5a6a97b4a0e0eaa
Diffstat (limited to 'services/surfaceflinger/RegionSamplingThread.cpp')
-rw-r--r--services/surfaceflinger/RegionSamplingThread.cpp29
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) {