diff options
author | John Reck <jreck@google.com> | 2021-06-09 22:43:05 -0400 |
---|---|---|
committer | John Reck <jreck@google.com> | 2021-06-11 01:52:14 +0000 |
commit | 760051854e03ab0d6fae3330363c2ecc96e25dc4 (patch) | |
tree | e7d183cd1a83fa4b629d2da7efea593ed8bb60d7 /libs/hwui/pipeline/skia/SkiaPipeline.cpp | |
parent | 466698f9afc2b4930544c07776493d4bce915f24 (diff) |
Improve picture capture debug path
* Fixes hardware bitmap capture
* Fixes mutable bitmap capture (no flickering)
* Adds basic single-frame LRU cache to avoid
repeated readbacks of GPU resources
* Does up-front readback of GPU resources
* Moves serialization off RenderThread again thanks
to up-front readback avoiding needing GPU access
off-thread
* Reduces RAM usage & improves performance by serializing
directly to output stream instead of first copying to
a byte[]
Bug: 174223722
Test: PictureCaptureDemo mirrors the content
Change-Id: If7ec208b61d5b917e82087cc312880fc5a38c943
Diffstat (limited to 'libs/hwui/pipeline/skia/SkiaPipeline.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/SkiaPipeline.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp index 039b0f9a6e9a..5462623e75ff 100644 --- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp @@ -420,7 +420,7 @@ void SkiaPipeline::endCapture(SkSurface* surface) { procs.fTypefaceProc = [](SkTypeface* tf, void* ctx){ return tf->serialize(SkTypeface::SerializeBehavior::kDoIncludeData); }; - auto data = picture->serialize(); + auto data = picture->serialize(&procs); savePictureAsync(data, mCapturedFile); mCaptureSequence = 0; mCaptureMode = CaptureMode::None; @@ -470,8 +470,7 @@ void SkiaPipeline::renderFrameImpl(const SkRect& clip, const SkMatrix& preTransform) { SkAutoCanvasRestore saver(canvas, true); auto clipRestriction = preTransform.mapRect(clip).roundOut(); - if (CC_UNLIKELY(mCaptureMode == CaptureMode::SingleFrameSKP - || mCaptureMode == CaptureMode::MultiFrameSKP)) { + if (CC_UNLIKELY(isCapturingSkp())) { canvas->drawAnnotation(SkRect::Make(clipRestriction), "AndroidDeviceClipRestriction", nullptr); } else { |