Add support for drawLayer CanvasOps

Introdcued DrawLayer CanvasOp and implementation
Test in progress with support for GrRecrodingContext backed
SkDevices.

Test: In progress
Change-Id: I53c58233536a78c20b867d659eae2dae2adc54b2
diff --git a/libs/hwui/canvas/CanvasOpRasterizer.cpp b/libs/hwui/canvas/CanvasOpRasterizer.cpp
index 25129f6..0093c38 100644
--- a/libs/hwui/canvas/CanvasOpRasterizer.cpp
+++ b/libs/hwui/canvas/CanvasOpRasterizer.cpp
@@ -33,7 +33,11 @@
     SkMatrix& currentGlobalTransform = globalMatrixStack.emplace_back(SkMatrix::I());
 
     source.for_each([&]<CanvasOpType T>(const CanvasOpContainer<T> * op) {
-        if constexpr (T == CanvasOpType::BeginZ || T == CanvasOpType::EndZ) {
+        if constexpr (
+            T == CanvasOpType::BeginZ ||
+            T == CanvasOpType::EndZ   ||
+            T == CanvasOpType::DrawLayer
+        ) {
             // Do beginZ or endZ
             LOG_ALWAYS_FATAL("TODO");
             return;
diff --git a/libs/hwui/canvas/CanvasOpTypes.h b/libs/hwui/canvas/CanvasOpTypes.h
index f9df2f7..2dfddac 100644
--- a/libs/hwui/canvas/CanvasOpTypes.h
+++ b/libs/hwui/canvas/CanvasOpTypes.h
@@ -55,6 +55,7 @@
     // DrawImageLattice also used to draw 9 patches
     DrawImageLattice,
     DrawPicture,
+    DrawLayer,
 
     // TODO: Rest
 
diff --git a/libs/hwui/canvas/CanvasOps.h b/libs/hwui/canvas/CanvasOps.h
index 8c7113d..b499733 100644
--- a/libs/hwui/canvas/CanvasOps.h
+++ b/libs/hwui/canvas/CanvasOps.h
@@ -28,6 +28,7 @@
 #include "CanvasProperty.h"
 
 #include "CanvasOpTypes.h"
+#include "Layer.h"
 
 #include <experimental/type_traits>
 #include <utility>
@@ -364,6 +365,11 @@
     }
 };
 
+template<>
+struct CanvasOp<CanvasOpType::DrawLayer> {
+    sp<Layer> layer;
+};
+
 // cleanup our macros
 #undef ASSERT_DRAWABLE