diff options
Diffstat (limited to 'services/surfaceflinger/RegionSamplingThread.cpp')
| -rw-r--r-- | services/surfaceflinger/RegionSamplingThread.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/services/surfaceflinger/RegionSamplingThread.cpp b/services/surfaceflinger/RegionSamplingThread.cpp index 6ba1942e2b..a2fc6925b8 100644 --- a/services/surfaceflinger/RegionSamplingThread.cpp +++ b/services/surfaceflinger/RegionSamplingThread.cpp @@ -446,9 +446,26 @@ void RegionSamplingThread::captureSample() { PIXEL_FORMAT_RGBA_8888, 1, usage, "RegionSamplingThread"); } - ScreenCaptureResults captureResults; + class SyncScreenCaptureListener : public BnScreenCaptureListener { + public: + status_t onScreenCaptureComplete(const ScreenCaptureResults& captureResults) override { + resultsPromise.set_value(captureResults); + return NO_ERROR; + } + + ScreenCaptureResults waitForResults() { + std::future<ScreenCaptureResults> resultsFuture = resultsPromise.get_future(); + return resultsFuture.get(); + } + + private: + std::promise<ScreenCaptureResults> resultsPromise; + }; + + const sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener(); mFlinger.captureScreenCommon(std::move(renderAreaFuture), traverseLayers, buffer, - true /* regionSampling */, captureResults); + true /* regionSampling */, captureListener); + ScreenCaptureResults captureResults = captureListener->waitForResults(); std::vector<Descriptor> activeDescriptors; for (const auto& descriptor : descriptors) { |