Remove DisplayList.h dependency from Canvas.h

Canvas is included in a lot of places, reduce include
dependencies

Test: make
Change-Id: Iab513de8d4bc3eb18220307acc124859dbf44030
diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h
index e6fc9da..b9370e9 100644
--- a/libs/hwui/SkiaCanvas.h
+++ b/libs/hwui/SkiaCanvas.h
@@ -53,9 +53,8 @@
         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 9304b7a..19ef7e3 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 @@
 
     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 a74e561..360492d 100644
--- a/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp
+++ b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp
@@ -102,7 +102,7 @@
         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 5f35155..0b4bb75 100644
--- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp
+++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp
@@ -55,11 +55,15 @@
     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 ee308f0..0b543ae 100644
--- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h
+++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h
@@ -39,11 +39,12 @@
     }
 
     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 fd33133..43df4a0 100644
--- a/libs/hwui/tests/common/TestListViewSceneBase.cpp
+++ b/libs/hwui/tests/common/TestListViewSceneBase.cpp
@@ -70,7 +70,7 @@
         // 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 ba6e8ee..cf8fc82 100644
--- a/libs/hwui/tests/common/TestUtils.h
+++ b/libs/hwui/tests/common/TestUtils.h
@@ -159,14 +159,6 @@
             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 @@
             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 @@
         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 @@
                     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 0795d13..4271d2f 100644
--- a/libs/hwui/tests/common/scenes/GlyphStressAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/GlyphStressAnimation.cpp
@@ -55,6 +55,6 @@
             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 1b0a07a..c6219c48 100644
--- a/libs/hwui/tests/common/scenes/TvApp.cpp
+++ b/libs/hwui/tests/common/scenes/TvApp.cpp
@@ -210,7 +210,7 @@
                                                     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 @@
             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 ade1ddd..9cd1075 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 @@
         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 @@
         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 @@
         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 @@
  * 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 @@
         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 @@
         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 dd3f737..6aed251 100644
--- a/libs/hwui/tests/microbench/RenderNodeBench.cpp
+++ b/libs/hwui/tests/microbench/RenderNodeBench.cpp
@@ -35,25 +35,12 @@
 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 801a294..3d5aca4 100644
--- a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
+++ b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
@@ -38,13 +38,12 @@
 }
 
 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);