summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
author NT Tsai <nttsai@google.com> 2022-07-25 14:59:14 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-07-25 14:59:14 +0000
commit1ecc9a8409d5e8894de69d6e6788b66fe037fe26 (patch)
tree0c36e34914c68ce3e28e88c97bd84ba1717da04c /services
parentd00a31045635157ca71bb17d787c31ed63bfbb90 (diff)
parentdc004b3f76236ce9188bd2089432d4b1f47161bd (diff)
Merge "Fail gracefully when allocating screenshot buffers" into tm-d1-dev am: 4830cd6ad9 am: dc004b3f76
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/19382466 Change-Id: I5fb944dab9cba76aa5fcb769863f138a3222e7bc Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'services')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 6e74eef068..3ba9dcd5bd 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -6639,8 +6639,13 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenCommon(
1 /* layerCount */, usage, "screenshot");
const status_t bufferStatus = buffer->initCheck();
- LOG_ALWAYS_FATAL_IF(bufferStatus != OK, "captureScreenCommon: Buffer failed to allocate: %d",
- bufferStatus);
+ if (bufferStatus != OK) {
+ // Animations may end up being really janky, but don't crash here.
+ // Otherwise an irreponsible process may cause an SF crash by allocating
+ // too much.
+ ALOGE("%s: Buffer failed to allocate: %d", __func__, bufferStatus);
+ return ftl::yield<FenceResult>(base::unexpected(bufferStatus)).share();
+ }
const std::shared_ptr<renderengine::ExternalTexture> texture = std::make_shared<
renderengine::impl::ExternalTexture>(buffer, getRenderEngine(),
renderengine::impl::ExternalTexture::Usage::