diff options
| author | 2021-01-19 18:06:05 -0500 | |
|---|---|---|
| committer | 2021-01-19 21:58:40 -0500 | |
| commit | 2e48df3705f2cd0ed57fad25309df2cfcba3173f (patch) | |
| tree | 457657461d7bbc81c119c1143cbae2d3a05734fa | |
| parent | 2c38bd5390721e58986d8917ca7ac655ee9aa449 (diff) | |
Remove DisplayList.h dependency from Canvas.h
Canvas is included in a lot of places, reduce include
dependencies
Test: make
Change-Id: Iab513de8d4bc3eb18220307acc124859dbf44030
| -rw-r--r-- | libs/hwui/SkiaCanvas.h | 3 | ||||
| -rw-r--r-- | libs/hwui/hwui/Canvas.h | 3 | ||||
| -rw-r--r-- | libs/hwui/jni/android_graphics_DisplayListCanvas.cpp | 2 | ||||
| -rw-r--r-- | libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp | 8 | ||||
| -rw-r--r-- | libs/hwui/pipeline/skia/SkiaRecordingCanvas.h | 5 | ||||
| -rw-r--r-- | libs/hwui/tests/common/TestListViewSceneBase.cpp | 2 | ||||
| -rw-r--r-- | libs/hwui/tests/common/TestUtils.h | 14 | ||||
| -rw-r--r-- | libs/hwui/tests/common/scenes/GlyphStressAnimation.cpp | 2 | ||||
| -rw-r--r-- | libs/hwui/tests/common/scenes/TvApp.cpp | 6 | ||||
| -rw-r--r-- | libs/hwui/tests/microbench/DisplayListCanvasBench.cpp | 39 | ||||
| -rw-r--r-- | libs/hwui/tests/microbench/RenderNodeBench.cpp | 17 | ||||
| -rw-r--r-- | libs/hwui/tests/unit/SkiaDisplayListTests.cpp | 5 |
12 files changed, 44 insertions, 62 deletions
diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h index e6fc9da0a9d3..b9370e942463 100644 --- a/libs/hwui/SkiaCanvas.h +++ b/libs/hwui/SkiaCanvas.h @@ -53,9 +53,8 @@ public: LOG_ALWAYS_FATAL("SkiaCanvas cannot be reset as a recording canvas"); } - virtual uirenderer::DisplayList finishRecording() override { + virtual void finishRecording(uirenderer::RenderNode*) override { LOG_ALWAYS_FATAL("SkiaCanvas does not produce a DisplayList"); - return uirenderer::DisplayList(); } virtual void enableZ(bool enableZ) override { LOG_ALWAYS_FATAL("SkiaCanvas does not support enableZ"); diff --git a/libs/hwui/hwui/Canvas.h b/libs/hwui/hwui/Canvas.h index 9304b7af9cd9..19ef7e377deb 100644 --- a/libs/hwui/hwui/Canvas.h +++ b/libs/hwui/hwui/Canvas.h @@ -21,7 +21,6 @@ #include <SaveFlags.h> #include <androidfw/ResourceTypes.h> -#include "DisplayList.h" #include "Properties.h" #include "utils/Macros.h" @@ -118,7 +117,7 @@ public: virtual void resetRecording(int width, int height, uirenderer::RenderNode* renderNode = nullptr) = 0; - [[nodiscard]] virtual uirenderer::DisplayList finishRecording() = 0; + virtual void finishRecording(uirenderer::RenderNode* destination) = 0; virtual void enableZ(bool enableZ) = 0; bool isHighContrastText() const { return uirenderer::Properties::enableHighContrastText; } diff --git a/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp index a74e56183bfd..360492dc36c6 100644 --- a/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp +++ b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp @@ -102,7 +102,7 @@ static void android_view_DisplayListCanvas_finishRecording( CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr, jlong renderNodePtr) { Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); - renderNode->setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(renderNode); } static void android_view_DisplayListCanvas_drawRenderNode(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr, jlong renderNodePtr) { diff --git a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp index 5f35155c2b5a..0b4bb75d6c3d 100644 --- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp +++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp @@ -55,11 +55,15 @@ void SkiaRecordingCanvas::initDisplayList(uirenderer::RenderNode* renderNode, in SkiaCanvas::reset(&mRecorder); } -uirenderer::DisplayList SkiaRecordingCanvas::finishRecording() { +std::unique_ptr<SkiaDisplayList> SkiaRecordingCanvas::finishRecording() { // close any existing chunks if necessary enableZ(false); mRecorder.restoreToCount(1); - return uirenderer::DisplayList(std::move(mDisplayList)); + return std::move(mDisplayList); +} + +void SkiaRecordingCanvas::finishRecording(uirenderer::RenderNode* destination) { + destination->setStagingDisplayList(uirenderer::DisplayList(finishRecording())); } // ---------------------------------------------------------------------------- diff --git a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h index ee308f0832a2..0b543aef3cf2 100644 --- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h +++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h @@ -39,11 +39,12 @@ public: } virtual void resetRecording(int width, int height, - uirenderer::RenderNode* renderNode) override { + uirenderer::RenderNode* renderNode = nullptr) override { initDisplayList(renderNode, width, height); } - virtual uirenderer::DisplayList finishRecording() override; + virtual void finishRecording(uirenderer::RenderNode* destination) override; + std::unique_ptr<SkiaDisplayList> finishRecording(); virtual void drawBitmap(Bitmap& bitmap, float left, float top, const Paint* paint) override; virtual void drawBitmap(Bitmap& bitmap, const SkMatrix& matrix, const Paint* paint) override; diff --git a/libs/hwui/tests/common/TestListViewSceneBase.cpp b/libs/hwui/tests/common/TestListViewSceneBase.cpp index fd331333d38a..43df4a0b1576 100644 --- a/libs/hwui/tests/common/TestListViewSceneBase.cpp +++ b/libs/hwui/tests/common/TestListViewSceneBase.cpp @@ -70,7 +70,7 @@ void TestListViewSceneBase::doFrame(int frameNr) { // draw it to parent DisplayList canvas->drawRenderNode(mListItems[ci].get()); } - mListView->setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(mListView.get()); } } // namespace test diff --git a/libs/hwui/tests/common/TestUtils.h b/libs/hwui/tests/common/TestUtils.h index ba6e8ee290bc..cf8fc82abb4a 100644 --- a/libs/hwui/tests/common/TestUtils.h +++ b/libs/hwui/tests/common/TestUtils.h @@ -159,14 +159,6 @@ public: renderthread::RenderThread& renderThread, uint32_t width, uint32_t height, const SkMatrix& transform); - template <class CanvasType> - static std::unique_ptr<DisplayList> createDisplayList( - int width, int height, std::function<void(CanvasType& canvas)> canvasCallback) { - CanvasType canvas(width, height); - canvasCallback(canvas); - return std::unique_ptr<DisplayList>(canvas.finishRecording()); - } - static sp<RenderNode> createNode( int left, int top, int right, int bottom, std::function<void(RenderProperties& props, Canvas& canvas)> setup) { @@ -177,7 +169,7 @@ public: std::unique_ptr<Canvas> canvas( Canvas::create_recording_canvas(props.getWidth(), props.getHeight())); setup(props, *canvas.get()); - node->setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(node.get()); } node->setPropertyFieldsDirty(0xFFFFFFFF); return node; @@ -203,7 +195,7 @@ public: std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas( node.stagingProperties().getWidth(), node.stagingProperties().getHeight(), &node)); contentCallback(*canvas.get()); - node.setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(&node); } static sp<RenderNode> createSkiaNode( @@ -226,7 +218,7 @@ public: new skiapipeline::SkiaRecordingCanvas(nullptr, props.getWidth(), props.getHeight())); setup(props, *canvas.get()); - node->setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(node.get()); } node->setPropertyFieldsDirty(0xFFFFFFFF); TestUtils::syncHierarchyPropertiesAndDisplayList(node); diff --git a/libs/hwui/tests/common/scenes/GlyphStressAnimation.cpp b/libs/hwui/tests/common/scenes/GlyphStressAnimation.cpp index 0795d13f441b..4271d2f04b88 100644 --- a/libs/hwui/tests/common/scenes/GlyphStressAnimation.cpp +++ b/libs/hwui/tests/common/scenes/GlyphStressAnimation.cpp @@ -55,6 +55,6 @@ public: TestUtils::drawUtf8ToCanvas(canvas.get(), text, paint, 0, 100 * (i + 2)); } - container->setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(container.get()); } }; diff --git a/libs/hwui/tests/common/scenes/TvApp.cpp b/libs/hwui/tests/common/scenes/TvApp.cpp index 1b0a07a98b3f..c6219c485b85 100644 --- a/libs/hwui/tests/common/scenes/TvApp.cpp +++ b/libs/hwui/tests/common/scenes/TvApp.cpp @@ -210,7 +210,7 @@ private: overlay->stagingProperties().getHeight(), overlay.get())); canvas->drawColor((curFrame % 150) << 24, SkBlendMode::kSrcOver); - overlay->setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(overlay.get()); cardcanvas->drawRenderNode(overlay.get()); } else { // re-recording image node's canvas, animating ColorFilter @@ -223,11 +223,11 @@ private: paint.setColorFilter(filter); sk_sp<Bitmap> bitmap = mCachedBitmaps[ci]; canvas->drawBitmap(*bitmap, 0, 0, &paint); - image->setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(image.get()); cardcanvas->drawRenderNode(image.get()); } - card->setStagingDisplayList(cardcanvas->finishRecording()); + cardcanvas->finishRecording(card.get()); } }; diff --git a/libs/hwui/tests/microbench/DisplayListCanvasBench.cpp b/libs/hwui/tests/microbench/DisplayListCanvasBench.cpp index ade1ddd3f703..9cd10759a834 100644 --- a/libs/hwui/tests/microbench/DisplayListCanvasBench.cpp +++ b/libs/hwui/tests/microbench/DisplayListCanvasBench.cpp @@ -24,27 +24,28 @@ using namespace android; using namespace android::uirenderer; +using namespace android::uirenderer::skiapipeline; -void BM_DisplayList_alloc(benchmark::State& benchState) { +void BM_SkiaDisplayList_alloc(benchmark::State& benchState) { while (benchState.KeepRunning()) { auto displayList = new skiapipeline::SkiaDisplayList(); benchmark::DoNotOptimize(displayList); delete displayList; } } -BENCHMARK(BM_DisplayList_alloc); +BENCHMARK(BM_SkiaDisplayList_alloc); -void BM_DisplayList_alloc_theoretical(benchmark::State& benchState) { +void BM_SkiaDisplayList_alloc_theoretical(benchmark::State& benchState) { while (benchState.KeepRunning()) { auto displayList = new char[sizeof(skiapipeline::SkiaDisplayList)]; benchmark::DoNotOptimize(displayList); delete[] displayList; } } -BENCHMARK(BM_DisplayList_alloc_theoretical); +BENCHMARK(BM_SkiaDisplayList_alloc_theoretical); -void BM_DisplayListCanvas_record_empty(benchmark::State& benchState) { - std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(100, 100)); +void BM_SkiaDisplayListCanvas_record_empty(benchmark::State& benchState) { + auto canvas = std::make_unique<SkiaRecordingCanvas>(nullptr, 100, 100); static_cast<void>(canvas->finishRecording()); while (benchState.KeepRunning()) { @@ -53,10 +54,10 @@ void BM_DisplayListCanvas_record_empty(benchmark::State& benchState) { static_cast<void>(canvas->finishRecording()); } } -BENCHMARK(BM_DisplayListCanvas_record_empty); +BENCHMARK(BM_SkiaDisplayListCanvas_record_empty); -void BM_DisplayListCanvas_record_saverestore(benchmark::State& benchState) { - std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(100, 100)); +void BM_SkiaDisplayListCanvas_record_saverestore(benchmark::State& benchState) { + auto canvas = std::make_unique<SkiaRecordingCanvas>(nullptr, 100, 100); static_cast<void>(canvas->finishRecording()); while (benchState.KeepRunning()) { @@ -69,10 +70,10 @@ void BM_DisplayListCanvas_record_saverestore(benchmark::State& benchState) { static_cast<void>(canvas->finishRecording()); } } -BENCHMARK(BM_DisplayListCanvas_record_saverestore); +BENCHMARK(BM_SkiaDisplayListCanvas_record_saverestore); -void BM_DisplayListCanvas_record_translate(benchmark::State& benchState) { - std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(100, 100)); +void BM_SkiaDisplayListCanvas_record_translate(benchmark::State& benchState) { + auto canvas = std::make_unique<SkiaRecordingCanvas>(nullptr, 100, 100); static_cast<void>(canvas->finishRecording()); while (benchState.KeepRunning()) { @@ -82,7 +83,7 @@ void BM_DisplayListCanvas_record_translate(benchmark::State& benchState) { static_cast<void>(canvas->finishRecording()); } } -BENCHMARK(BM_DisplayListCanvas_record_translate); +BENCHMARK(BM_SkiaDisplayListCanvas_record_translate); /** * Simulate a simple view drawing a background, overlapped by an image. @@ -90,8 +91,8 @@ BENCHMARK(BM_DisplayListCanvas_record_translate); * Note that the recording commands are intentionally not perfectly efficient, as the * View system frequently produces unneeded save/restores. */ -void BM_DisplayListCanvas_record_simpleBitmapView(benchmark::State& benchState) { - std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(100, 100)); +void BM_SkiaDisplayListCanvas_record_simpleBitmapView(benchmark::State& benchState) { + auto canvas = std::make_unique<SkiaRecordingCanvas>(nullptr, 100, 100); static_cast<void>(canvas->finishRecording()); Paint rectPaint; @@ -114,14 +115,14 @@ void BM_DisplayListCanvas_record_simpleBitmapView(benchmark::State& benchState) static_cast<void>(canvas->finishRecording()); } } -BENCHMARK(BM_DisplayListCanvas_record_simpleBitmapView); +BENCHMARK(BM_SkiaDisplayListCanvas_record_simpleBitmapView); -void BM_DisplayListCanvas_basicViewGroupDraw(benchmark::State& benchState) { +void BM_SkiaDisplayListCanvas_basicViewGroupDraw(benchmark::State& benchState) { sp<RenderNode> child = TestUtils::createNode(50, 50, 100, 100, [](auto& props, auto& canvas) { canvas.drawColor(0xFFFFFFFF, SkBlendMode::kSrcOver); }); - std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(100, 100)); + auto canvas = std::make_unique<SkiaRecordingCanvas>(nullptr, 100, 100); static_cast<void>(canvas->finishRecording()); while (benchState.KeepRunning()) { @@ -146,4 +147,4 @@ void BM_DisplayListCanvas_basicViewGroupDraw(benchmark::State& benchState) { static_cast<void>(canvas->finishRecording()); } } -BENCHMARK(BM_DisplayListCanvas_basicViewGroupDraw)->Arg(1)->Arg(5)->Arg(10); +BENCHMARK(BM_SkiaDisplayListCanvas_basicViewGroupDraw)->Arg(1)->Arg(5)->Arg(10); diff --git a/libs/hwui/tests/microbench/RenderNodeBench.cpp b/libs/hwui/tests/microbench/RenderNodeBench.cpp index dd3f737abfa9..6aed251481bf 100644 --- a/libs/hwui/tests/microbench/RenderNodeBench.cpp +++ b/libs/hwui/tests/microbench/RenderNodeBench.cpp @@ -35,25 +35,12 @@ BENCHMARK(BM_RenderNode_create); void BM_RenderNode_recordSimple(benchmark::State& state) { sp<RenderNode> node = new RenderNode(); std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(100, 100)); - static_cast<void>(canvas->finishRecording()); + canvas->finishRecording(node.get()); while (state.KeepRunning()) { canvas->resetRecording(100, 100, node.get()); canvas->drawColor(0x00000000, SkBlendMode::kSrcOver); - node->setStagingDisplayList(canvas->finishRecording()); + canvas->finishRecording(node.get()); } } BENCHMARK(BM_RenderNode_recordSimple); - -void BM_RenderNode_recordSimpleWithReuse(benchmark::State& state) { - sp<RenderNode> node = new RenderNode(); - std::unique_ptr<Canvas> canvas(Canvas::create_recording_canvas(100, 100)); - static_cast<void>(canvas->finishRecording()); - - while (state.KeepRunning()) { - canvas->resetRecording(100, 100, node.get()); - canvas->drawColor(0x00000000, SkBlendMode::kSrcOver); - canvas->finishRecording().clear(node.get()); - } -} -BENCHMARK(BM_RenderNode_recordSimpleWithReuse);
\ No newline at end of file diff --git a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp index 801a294b5648..3d5aca4bf05a 100644 --- a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp +++ b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp @@ -38,13 +38,12 @@ TEST(SkiaDisplayList, create) { } TEST(SkiaDisplayList, reset) { - DisplayList displayList; + std::unique_ptr<SkiaDisplayList> skiaDL; { SkiaRecordingCanvas canvas{nullptr, 1, 1}; canvas.drawColor(0, SkBlendMode::kSrc); - displayList = canvas.finishRecording(); + skiaDL = canvas.finishRecording(); } - SkiaDisplayList* skiaDL = displayList.asSkiaDl(); SkCanvas dummyCanvas; RenderNodeDrawable drawable(nullptr, &dummyCanvas); |