Merge "Migrate from SkCanvas::getGrContext to SkCanvas::recordingContext"
diff --git a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
index dd0fc69..bfbdc5c 100644
--- a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
+++ b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
@@ -56,7 +56,8 @@
 }
 
 void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
-    if (canvas->getGrContext() == nullptr) {
+    GrDirectContext* directContext = GrAsDirectContext(canvas->recordingContext());
+    if (directContext == nullptr) {
         // We're dumping a picture, render a light-blue rectangle instead
         // TODO: Draw the WebView text on top? Seemingly complicated as SkPaint doesn't
         // seem to have a default typeface that works. We only ever use drawGlyphs, which
@@ -87,7 +88,7 @@
         SkImageInfo surfaceInfo =
                 canvas->imageInfo().makeWH(clipBounds.width(), clipBounds.height());
         tmpSurface =
-                SkSurface::MakeRenderTarget(canvas->getGrContext(), SkBudgeted::kYes, surfaceInfo);
+                SkSurface::MakeRenderTarget(directContext, SkBudgeted::kYes, surfaceInfo);
         tmpSurface->getCanvas()->clear(SK_ColorTRANSPARENT);
 
         GrGLFramebufferInfo fboInfo;
@@ -141,7 +142,7 @@
 
         // notify Skia that we just updated the FBO and stencil
         const uint32_t grState = kStencil_GrGLBackendState | kRenderTarget_GrGLBackendState;
-        canvas->getGrContext()->resetContext(grState);
+        directContext->resetContext(grState);
 
         SkCanvas* tmpCanvas = canvas;
         if (tmpSurface) {
@@ -188,7 +189,7 @@
         glClear(GL_STENCIL_BUFFER_BIT);
     }
 
-    canvas->getGrContext()->resetContext();
+    directContext->resetContext();
 
     // if there were unclipped save layers involved we draw our offscreen surface to the canvas
     if (tmpSurface) {
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
index 6dd3698..6e7493c 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
@@ -86,7 +86,7 @@
 }
 
 void SkiaPipeline::renderLayersImpl(const LayerUpdateQueue& layers, bool opaque) {
-    sk_sp<GrContext> cachedContext;
+    sk_sp<GrDirectContext> cachedContext;
 
     // Render all layers that need to be updated, in order.
     for (size_t i = 0; i < layers.entries().size(); i++) {
@@ -142,7 +142,8 @@
 
         // cache the current context so that we can defer flushing it until
         // either all the layers have been rendered or the context changes
-        GrContext* currentContext = layerNode->getLayerSurface()->getCanvas()->getGrContext();
+        GrDirectContext* currentContext =
+            GrAsDirectContext(layerNode->getLayerSurface()->getCanvas()->recordingContext());
         if (cachedContext.get() != currentContext) {
             if (cachedContext.get()) {
                 ATRACE_NAME("flush layers (context changed)");
@@ -201,7 +202,7 @@
 }
 
 void SkiaPipeline::prepareToDraw(const RenderThread& thread, Bitmap* bitmap) {
-    GrContext* context = thread.getGrContext();
+    GrDirectContext* context = thread.getGrContext();
     if (context) {
         ATRACE_FORMAT("Bitmap#prepareToDraw %dx%d", bitmap->width(), bitmap->height());
         auto image = bitmap->makeImage();
diff --git a/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp b/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp
index 50b45e6..6efe176 100644
--- a/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp
+++ b/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp
@@ -96,7 +96,7 @@
     // "VkFunctorDrawable::onDraw" is not invoked for the most common case, when drawing in a GPU
     // canvas.
 
-    if (canvas->getGrContext() == nullptr) {
+    if (canvas->recordingContext() == nullptr) {
         // We're dumping a picture, render a light-blue rectangle instead
         SkPaint paint;
         paint.setColor(0xFF81D4FA);
diff --git a/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp b/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp
index 403d907..bc8ce42 100644
--- a/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp
+++ b/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp
@@ -67,7 +67,7 @@
 void VkInteropFunctorDrawable::onDraw(SkCanvas* canvas) {
     ATRACE_CALL();
 
-    if (canvas->getGrContext() == nullptr) {
+    if (canvas->recordingContext() == nullptr) {
         SkDEBUGF(("Attempting to draw VkInteropFunctor into an unsupported surface"));
         return;
     }
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index cba710f..cc4eb32 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -106,7 +106,7 @@
      * If Properties::isSkiaEnabled() is true then this will return the Skia
      * grContext associated with the current RenderPipeline.
      */
-    GrContext* getGrContext() const { return mRenderThread.getGrContext(); }
+    GrDirectContext* getGrContext() const { return mRenderThread.getGrContext(); }
 
     // Won't take effect until next EGLSurface creation
     void setSwapBehavior(SwapBehavior swapBehavior);