summaryrefslogtreecommitdiff
path: root/cmds/screencap
diff options
context:
space:
mode:
author chaviw <chaviw@google.com> 2020-08-18 16:06:40 -0700
committer chaviw <chaviw@google.com> 2020-09-08 09:59:50 -0700
commit3510924a6de6ad44160de44051d28df87593edd3 (patch)
tree1d547c3c90b165a509d26a7f9deeb70783224791 /cmds/screencap
parent25953d498f68ac3cdc3b7f4c0a33946725ac960d (diff)
Send ScreenCaptureListener to native screen capture requests.
Allow for asynchronous screenshot by sending a ScreenCaptureListener to handle screenshot callbacks. All existing calls are still synchronous since the SurfaceControl method will block the caller until the results from SurfaceFlinger are ready. Test: power + volume down Test: adb shell screencap Bug: 162367424 Change-Id: I54c34003c0786b585dd20530a06dbd4b266e178c
Diffstat (limited to 'cmds/screencap')
-rw-r--r--cmds/screencap/screencap.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp
index dec4a567fc81..5c08704a6623 100644
--- a/cmds/screencap/screencap.cpp
+++ b/cmds/screencap/screencap.cpp
@@ -30,8 +30,9 @@
#include <binder/ProcessState.h>
-#include <gui/SurfaceComposerClient.h>
#include <gui/ISurfaceComposer.h>
+#include <gui/SurfaceComposerClient.h>
+#include <gui/SyncScreenCaptureListener.h>
#include <ui/DisplayInfo.h>
#include <ui/GraphicTypes.h>
@@ -181,13 +182,18 @@ int main(int argc, char** argv)
ProcessState::self()->setThreadPoolMaxThreadCount(0);
ProcessState::self()->startThreadPool();
- ScreenCaptureResults captureResults;
- status_t result = ScreenshotClient::captureDisplay(displayId->value, captureResults);
+ sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener();
+ status_t result = ScreenshotClient::captureDisplay(displayId->value, captureListener);
if (result != NO_ERROR) {
close(fd);
return 1;
}
+ ScreenCaptureResults captureResults = captureListener->waitForResults();
+ if (captureResults.result != NO_ERROR) {
+ close(fd);
+ return 1;
+ }
ui::Dataspace dataspace = captureResults.capturedDataspace;
sp<GraphicBuffer> buffer = captureResults.buffer;