Loading libs/gui/SurfaceComposerClient.cpp +6 −34 Original line number Diff line number Diff line Loading @@ -1923,57 +1923,29 @@ status_t SurfaceComposerClient::setGlobalShadowSettings(const half4& ambientColo } // ---------------------------------------------------------------------------- status_t SyncScreenCaptureListener::onScreenCaptureComplete( const ScreenCaptureResults& captureResults) { resultsPromise.set_value(captureResults); return NO_ERROR; } ScreenCaptureResults SyncScreenCaptureListener::waitForResults() { std::future<ScreenCaptureResults> resultsFuture = resultsPromise.get_future(); return resultsFuture.get(); } status_t ScreenshotClient::captureDisplay(const DisplayCaptureArgs& captureArgs, ScreenCaptureResults& captureResults) { const sp<IScreenCaptureListener>& captureListener) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener(); status_t status = s->captureDisplay(captureArgs, captureListener); if (status != NO_ERROR) { return status; } captureResults = captureListener->waitForResults(); return captureResults.result; return s->captureDisplay(captureArgs, captureListener); } status_t ScreenshotClient::captureDisplay(uint64_t displayOrLayerStack, ScreenCaptureResults& captureResults) { const sp<IScreenCaptureListener>& captureListener) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener(); status_t status = s->captureDisplay(displayOrLayerStack, captureListener); if (status != NO_ERROR) { return status; } captureResults = captureListener->waitForResults(); return captureResults.result; return s->captureDisplay(displayOrLayerStack, captureListener); } status_t ScreenshotClient::captureLayers(const LayerCaptureArgs& captureArgs, ScreenCaptureResults& captureResults) { const sp<IScreenCaptureListener>& captureListener) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener(); status_t status = s->captureLayers(captureArgs, captureListener); if (status != NO_ERROR) { return status; } captureResults = captureListener->waitForResults(); return captureResults.result; return s->captureLayers(captureArgs, captureListener); } } // namespace android libs/gui/include/gui/SurfaceComposerClient.h +3 −13 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ #include <stdint.h> #include <sys/types.h> #include <future> #include <set> #include <unordered_map> #include <unordered_set> Loading Loading @@ -594,23 +593,14 @@ private: // --------------------------------------------------------------------------- class SyncScreenCaptureListener : public BnScreenCaptureListener { public: status_t onScreenCaptureComplete(const ScreenCaptureResults& captureResults) override; ScreenCaptureResults waitForResults(); private: std::promise<ScreenCaptureResults> resultsPromise; }; class ScreenshotClient { public: static status_t captureDisplay(const DisplayCaptureArgs& captureArgs, ScreenCaptureResults& captureResults); const sp<IScreenCaptureListener>& captureListener); static status_t captureDisplay(uint64_t displayOrLayerStack, ScreenCaptureResults& captureResults); const sp<IScreenCaptureListener>& captureListener); static status_t captureLayers(const LayerCaptureArgs& captureArgs, ScreenCaptureResults& captureResults); const sp<IScreenCaptureListener>& captureListener); }; // --------------------------------------------------------------------------- Loading libs/gui/include/gui/SyncScreenCaptureListener.h 0 → 100644 +40 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <gui/SurfaceComposerClient.h> #include <future> namespace android { 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; }; } // namespace android No newline at end of file libs/gui/tests/BLASTBufferQueue_test.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <gui/IGraphicBufferProducer.h> #include <gui/IProducerListener.h> #include <gui/SurfaceComposerClient.h> #include <gui/SyncScreenCaptureListener.h> #include <private/gui/ComposerService.h> #include <ui/DisplayConfig.h> #include <ui/GraphicBuffer.h> Loading libs/gui/tests/Surface_test.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <gui/ISurfaceComposer.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> #include <gui/SyncScreenCaptureListener.h> #include <inttypes.h> #include <private/gui/ComposerService.h> #include <ui/BufferQueueDefs.h> Loading Loading
libs/gui/SurfaceComposerClient.cpp +6 −34 Original line number Diff line number Diff line Loading @@ -1923,57 +1923,29 @@ status_t SurfaceComposerClient::setGlobalShadowSettings(const half4& ambientColo } // ---------------------------------------------------------------------------- status_t SyncScreenCaptureListener::onScreenCaptureComplete( const ScreenCaptureResults& captureResults) { resultsPromise.set_value(captureResults); return NO_ERROR; } ScreenCaptureResults SyncScreenCaptureListener::waitForResults() { std::future<ScreenCaptureResults> resultsFuture = resultsPromise.get_future(); return resultsFuture.get(); } status_t ScreenshotClient::captureDisplay(const DisplayCaptureArgs& captureArgs, ScreenCaptureResults& captureResults) { const sp<IScreenCaptureListener>& captureListener) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener(); status_t status = s->captureDisplay(captureArgs, captureListener); if (status != NO_ERROR) { return status; } captureResults = captureListener->waitForResults(); return captureResults.result; return s->captureDisplay(captureArgs, captureListener); } status_t ScreenshotClient::captureDisplay(uint64_t displayOrLayerStack, ScreenCaptureResults& captureResults) { const sp<IScreenCaptureListener>& captureListener) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener(); status_t status = s->captureDisplay(displayOrLayerStack, captureListener); if (status != NO_ERROR) { return status; } captureResults = captureListener->waitForResults(); return captureResults.result; return s->captureDisplay(displayOrLayerStack, captureListener); } status_t ScreenshotClient::captureLayers(const LayerCaptureArgs& captureArgs, ScreenCaptureResults& captureResults) { const sp<IScreenCaptureListener>& captureListener) { sp<ISurfaceComposer> s(ComposerService::getComposerService()); if (s == nullptr) return NO_INIT; sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener(); status_t status = s->captureLayers(captureArgs, captureListener); if (status != NO_ERROR) { return status; } captureResults = captureListener->waitForResults(); return captureResults.result; return s->captureLayers(captureArgs, captureListener); } } // namespace android
libs/gui/include/gui/SurfaceComposerClient.h +3 −13 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ #include <stdint.h> #include <sys/types.h> #include <future> #include <set> #include <unordered_map> #include <unordered_set> Loading Loading @@ -594,23 +593,14 @@ private: // --------------------------------------------------------------------------- class SyncScreenCaptureListener : public BnScreenCaptureListener { public: status_t onScreenCaptureComplete(const ScreenCaptureResults& captureResults) override; ScreenCaptureResults waitForResults(); private: std::promise<ScreenCaptureResults> resultsPromise; }; class ScreenshotClient { public: static status_t captureDisplay(const DisplayCaptureArgs& captureArgs, ScreenCaptureResults& captureResults); const sp<IScreenCaptureListener>& captureListener); static status_t captureDisplay(uint64_t displayOrLayerStack, ScreenCaptureResults& captureResults); const sp<IScreenCaptureListener>& captureListener); static status_t captureLayers(const LayerCaptureArgs& captureArgs, ScreenCaptureResults& captureResults); const sp<IScreenCaptureListener>& captureListener); }; // --------------------------------------------------------------------------- Loading
libs/gui/include/gui/SyncScreenCaptureListener.h 0 → 100644 +40 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <gui/SurfaceComposerClient.h> #include <future> namespace android { 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; }; } // namespace android No newline at end of file
libs/gui/tests/BLASTBufferQueue_test.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <gui/IGraphicBufferProducer.h> #include <gui/IProducerListener.h> #include <gui/SurfaceComposerClient.h> #include <gui/SyncScreenCaptureListener.h> #include <private/gui/ComposerService.h> #include <ui/DisplayConfig.h> #include <ui/GraphicBuffer.h> Loading
libs/gui/tests/Surface_test.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <gui/ISurfaceComposer.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> #include <gui/SyncScreenCaptureListener.h> #include <inttypes.h> #include <private/gui/ComposerService.h> #include <ui/BufferQueueDefs.h> Loading