diff --git a/samplecode/SampleCCPRGeometry.cpp b/samplecode/SampleCCPRGeometry.cpp
index c67875f..59c6581 100644
--- a/samplecode/SampleCCPRGeometry.cpp
+++ b/samplecode/SampleCCPRGeometry.cpp
@@ -14,6 +14,7 @@
 #include "include/core/SkPath.h"
 #include "include/gpu/GrDirectContext.h"
 #include "samplecode/Sample.h"
+#include "src/core/SkCanvasPriv.h"
 #include "src/core/SkRectPriv.h"
 #include "src/gpu/GrDirectContextPriv.h"
 #include "src/gpu/GrGpu.h"
@@ -191,8 +192,7 @@
 
     if (fDoStroke) {
         caption.appendf(" (stroke_width=%f)", fStrokeWidth);
-    } else if (GrSurfaceDrawContext* rtc =
-            canvas->internal_private_accessTopLayerRenderTargetContext()) {
+    } else if (GrSurfaceDrawContext* sdc = SkCanvasPriv::TopDeviceSurfaceDrawContext(canvas)) {
         // Render coverage count.
         auto ctx = canvas->recordingContext();
         SkASSERT(ctx);
@@ -210,7 +210,7 @@
         paint.setColorFragmentProcessor(VisualizeCoverageCountFP::Make(
                 GrTextureEffect::Make(ccbuff->readSurfaceView(), ccbuff->colorInfo().alphaType())));
         paint.setPorterDuffXPFactory(SkBlendMode::kSrcOver);
-        rtc->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::I(),
+        sdc->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::I(),
                       SkRect::MakeIWH(this->width(), this->height()));
     } else {
         caption = "Use GPU backend to visualize geometry.";
diff --git a/samplecode/SampleTessellatedWedge.cpp b/samplecode/SampleTessellatedWedge.cpp
index b669efb..c97a3fa 100644
--- a/samplecode/SampleTessellatedWedge.cpp
+++ b/samplecode/SampleTessellatedWedge.cpp
@@ -14,6 +14,7 @@
 #if SK_SUPPORT_GPU
 
 #include "include/gpu/GrRecordingContext.h"
+#include "src/core/SkCanvasPriv.h"
 #include "src/gpu/GrClip.h"
 #include "src/gpu/GrMemoryPool.h"
 #include "src/gpu/GrRecordingContextPriv.h"
@@ -63,14 +64,14 @@
     canvas->clear(SK_ColorBLACK);
 
     auto ctx = canvas->recordingContext();
-    GrSurfaceDrawContext* rtc = canvas->internal_private_accessTopLayerRenderTargetContext();
+    GrSurfaceDrawContext* sdc = SkCanvasPriv::TopDeviceSurfaceDrawContext(canvas);
 
     SkString error;
-    if (!rtc || !ctx) {
+    if (!sdc || !ctx) {
         error = "GPU Only.";
     } else if (!ctx->priv().caps()->drawInstancedSupport()) {
         error = "Instanced rendering not supported.";
-    } else if (1 == rtc->numSamples() && !ctx->priv().caps()->mixedSamplesSupport()) {
+    } else if (sdc->numSamples() == 1 && !ctx->priv().caps()->mixedSamplesSupport()) {
         error = "MSAA/mixed samples only.";
     }
     if (!error.isEmpty()) {
@@ -85,15 +86,15 @@
     paint.setColor4f({1,0,1,1});
 
     GrAAType aa;
-    if (rtc->numSamples() > 1) {
+    if (sdc->numSamples() > 1) {
         aa = GrAAType::kMSAA;
-    } else if (rtc->asRenderTargetProxy()->canUseMixedSamples(*ctx->priv().caps())) {
+    } else if (sdc->asRenderTargetProxy()->canUseMixedSamples(*ctx->priv().caps())) {
         aa = GrAAType::kCoverage;
     } else {
         aa = GrAAType::kNone;
     }
 
-    rtc->addDrawOp(GrOp::Make<GrPathTessellateOp>(ctx, canvas->getTotalMatrix(), fPath,
+    sdc->addDrawOp(GrOp::Make<GrPathTessellateOp>(ctx, canvas->getTotalMatrix(), fPath,
                                                   std::move(paint), aa, fOpFlags));
 
     // Draw the path points.
