diff --git a/include/gpu/GrContextOptions.h b/include/gpu/GrContextOptions.h
index 804efb7..a73be43 100644
--- a/include/gpu/GrContextOptions.h
+++ b/include/gpu/GrContextOptions.h
@@ -82,8 +82,7 @@
      * rendering artifacts along shared edges if care isn't taken to ensure both contours wind in
      * the same direction.
      */
-    // FIXME: Once this is removed from Chrome and Android, rename to fEnable"".
-    bool fDisableCoverageCountingPaths = true;
+    bool fDisableCoverageCountingPaths = false;
 
     /**
      * Disables distance field rendering for paths. Distance field computation can be expensive,
@@ -219,7 +218,7 @@
     /**
      * Include or exclude specific GPU path renderers.
      */
-    GpuPathRenderers fGpuPathRenderers = GpuPathRenderers::kDefault;
+    GpuPathRenderers fGpuPathRenderers = GpuPathRenderers::kAll;
 #endif
 
 #if SK_SUPPORT_ATLAS_TEXT
diff --git a/include/private/GrTypesPriv.h b/include/private/GrTypesPriv.h
index d34d1de..86d29ef 100644
--- a/include/private/GrTypesPriv.h
+++ b/include/private/GrTypesPriv.h
@@ -833,9 +833,7 @@
     kSmall             = 1 << 6,
     kTessellating      = 1 << 7,
 
-    kAll               = (kTessellating | (kTessellating - 1)),
-    kDefault           = kAll & ~kCoverageCounting
-
+    kAll               = (kTessellating | (kTessellating - 1))
 };
 
 /**
diff --git a/platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp b/platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp
index a04b1bb..e39f733 100644
--- a/platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp
+++ b/platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp
@@ -69,6 +69,7 @@
 
     GrContextOptions options;
     options.fDisableDistanceFieldPaths = true;
+    options.fDisableCoverageCountingPaths = true;
     sk_sp<GrContext> grContext = GrContext::MakeGL(std::move(glInterface), options);
     if (!grContext.get()) {
         return 0;
diff --git a/src/gpu/GrPathRendererChain.h b/src/gpu/GrPathRendererChain.h
index 473d4e6..3542ec4 100644
--- a/src/gpu/GrPathRendererChain.h
+++ b/src/gpu/GrPathRendererChain.h
@@ -28,7 +28,7 @@
 public:
     struct Options {
         bool fAllowPathMaskCaching = false;
-        GpuPathRenderers fGpuPathRenderers = GpuPathRenderers::kDefault;
+        GpuPathRenderers fGpuPathRenderers = GpuPathRenderers::kAll;
     };
     GrPathRendererChain(GrRecordingContext* context, const Options&);
 
diff --git a/src/gpu/GrRecordingContext.cpp b/src/gpu/GrRecordingContext.cpp
index 7adb948..5d907bf 100644
--- a/src/gpu/GrRecordingContext.cpp
+++ b/src/gpu/GrRecordingContext.cpp
@@ -70,9 +70,8 @@
 #if GR_TEST_UTILS
     prcOptions.fGpuPathRenderers = this->options().fGpuPathRenderers;
 #endif
-    // FIXME: Once this is removed from Chrome and Android, rename to fEnable"".
-    if (!this->options().fDisableCoverageCountingPaths) {
-        prcOptions.fGpuPathRenderers |= GpuPathRenderers::kCoverageCounting;
+    if (this->options().fDisableCoverageCountingPaths) {
+        prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kCoverageCounting;
     }
     if (this->options().fDisableDistanceFieldPaths) {
         prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kSmall;
diff --git a/tests/GrCCPRTest.cpp b/tests/GrCCPRTest.cpp
index f65bab6..ab8b479 100644
--- a/tests/GrCCPRTest.cpp
+++ b/tests/GrCCPRTest.cpp
@@ -155,7 +155,6 @@
         mockOptions.fFlatInterpolationSupport = true;
 
         GrContextOptions ctxOptions;
-        ctxOptions.fDisableCoverageCountingPaths = false;
         ctxOptions.fAllowPathMaskCaching = false;
         ctxOptions.fGpuPathRenderers = GpuPathRenderers::kCoverageCounting;
 
diff --git a/tools/flags/SkCommonFlags.cpp b/tools/flags/SkCommonFlags.cpp
index dfacdbe..be569f8 100644
--- a/tools/flags/SkCommonFlags.cpp
+++ b/tools/flags/SkCommonFlags.cpp
@@ -161,7 +161,7 @@
 
 DEFINE_bool(noGS, false, "Disables support for geometry shaders.");
 
-DEFINE_string(pr, "",
+DEFINE_string(pr, "all",
               "Set of enabled gpu path renderers. Defined as a list of: "
               "[~]none [~]dashline [~]nvpr [~]ccpr [~]aahairline [~]aaconvex [~]aalinearizing "
               "[~]small [~]tess] [~]all");
diff --git a/tools/flags/SkCommonFlagsGpu.h b/tools/flags/SkCommonFlagsGpu.h
index 65871e3..d546078 100644
--- a/tools/flags/SkCommonFlagsGpu.h
+++ b/tools/flags/SkCommonFlagsGpu.h
@@ -46,9 +46,9 @@
 
 inline GpuPathRenderers CollectGpuPathRenderersFromFlags() {
     if (FLAGS_pr.isEmpty()) {
-        return GpuPathRenderers::kDefault;
+        return GpuPathRenderers::kAll;
     }
-    GpuPathRenderers gpuPathRenderers = ('~' == FLAGS_pr[0][0])
+    GpuPathRenderers gpuPathRenderers = '~' == FLAGS_pr[0][0]
             ? GpuPathRenderers::kAll : GpuPathRenderers::kNone;
     for (int i = 0; i < FLAGS_pr.count(); ++i) {
         const char* name = FLAGS_pr[i];
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 0e82bd1..2defcb5 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -219,7 +219,6 @@
 {
     SkGraphics::Init();
 
-    gPathRendererNames[GpuPathRenderers::kDefault] = "Default Path Renderers";
     gPathRendererNames[GpuPathRenderers::kAll] = "All Path Renderers";
     gPathRendererNames[GpuPathRenderers::kStencilAndCover] = "NV_path_rendering";
     gPathRendererNames[GpuPathRenderers::kSmall] = "Small paths (cached sdf or alpha masks)";
@@ -876,7 +875,7 @@
     title.append("]");
 
     GpuPathRenderers pr = fWindow->getRequestedDisplayParams().fGrContextOptions.fGpuPathRenderers;
-    if (GpuPathRenderers::kDefault != pr) {
+    if (GpuPathRenderers::kAll != pr) {
         title.appendf(" [Path renderer: %s]", gPathRendererNames[pr].c_str());
     }
 
@@ -1564,7 +1563,6 @@
                     if (!ctx) {
                         ImGui::RadioButton("Software", true);
                     } else if (fWindow->sampleCount() > 1) {
-                        prButton(GpuPathRenderers::kDefault);
                         prButton(GpuPathRenderers::kAll);
                         if (ctx->priv().caps()->shaderCaps()->pathRenderingSupport()) {
                             prButton(GpuPathRenderers::kStencilAndCover);
@@ -1572,7 +1570,6 @@
                         prButton(GpuPathRenderers::kTessellating);
                         prButton(GpuPathRenderers::kNone);
                     } else {
-                        prButton(GpuPathRenderers::kDefault);
                         prButton(GpuPathRenderers::kAll);
                         if (GrCoverageCountingPathRenderer::IsSupported(
                                     *ctx->priv().caps())) {
@@ -2077,7 +2074,6 @@
             } else {
                 const auto* caps = ctx->priv().caps();
 
-                writer.appendString(gPathRendererNames[GpuPathRenderers::kDefault].c_str());
                 writer.appendString(gPathRendererNames[GpuPathRenderers::kAll].c_str());
                 if (fWindow->sampleCount() > 1) {
                     if (caps->shaderCaps()->pathRenderingSupport()) {
