Make CCPR optional

This can reduce code size where CCPR is not supported (e.g. WebGL 1.0)

Drops 130k uncompressed, 50k compressed.

Bug: skia:
Change-Id: I8af7e681e1f3520a18e0c0d55e318dcf88206584
Reviewed-on: https://skia-review.googlesource.com/c/161041
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index acc3b9d..1931761 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -34,6 +34,7 @@
   skia_use_x11 = is_linux
 
   skia_android_serial = ""
+  skia_enable_ccpr = true
   skia_enable_discrete_gpu = true
   skia_enable_effects = true
   skia_enable_effects_imagefilters = true
@@ -587,6 +588,10 @@
   public_deps = []
 
   sources = skia_gpu_sources + skia_sksl_sources + skia_gpu_processor_outputs
+  if (!skia_enable_ccpr) {
+    sources -= skia_ccpr_sources
+    sources += [ "src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp" ]
+  }
 
   # These paths need to be absolute to match the ones produced by shared_sources.gni.
   sources -= get_path_info([ "src/gpu/gl/GrGLMakeNativeInterface_none.cpp" ],
diff --git a/experimental/canvaskit/compile.sh b/experimental/canvaskit/compile.sh
index b84634d..ff225ed 100755
--- a/experimental/canvaskit/compile.sh
+++ b/experimental/canvaskit/compile.sh
@@ -72,6 +72,7 @@
   skia_use_vulkan=false \
   skia_use_zlib=true \
   \
+  skia_enable_ccpr=false \
   skia_enable_gpu=true \
   skia_enable_fontmgr_empty=false \
   skia_enable_pdf=false"
diff --git a/gn/gpu.gni b/gn/gpu.gni
index 5c3ddbf..4f54eb1 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -295,41 +295,6 @@
   "$_src/gpu/ops/GrTextureOp.cpp",
   "$_src/gpu/ops/GrTextureOp.h",
 
-  # coverage counting path renderer
-  "$_src/gpu/ccpr/GrCCAtlas.cpp",
-  "$_src/gpu/ccpr/GrCCAtlas.h",
-  "$_src/gpu/ccpr/GrCCClipPath.cpp",
-  "$_src/gpu/ccpr/GrCCClipProcessor.cpp",
-  "$_src/gpu/ccpr/GrCCClipProcessor.h",
-  "$_src/gpu/ccpr/GrCCConicShader.cpp",
-  "$_src/gpu/ccpr/GrCCConicShader.h",
-  "$_src/gpu/ccpr/GrCCCoverageProcessor.cpp",
-  "$_src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp",
-  "$_src/gpu/ccpr/GrCCCoverageProcessor_VSImpl.cpp",
-  "$_src/gpu/ccpr/GrCCCoverageProcessor.h",
-  "$_src/gpu/ccpr/GrCCCubicShader.cpp",
-  "$_src/gpu/ccpr/GrCCCubicShader.h",
-  "$_src/gpu/ccpr/GrCCDrawPathsOp.cpp",
-  "$_src/gpu/ccpr/GrCCDrawPathsOp.h",
-  "$_src/gpu/ccpr/GrCCFiller.cpp",
-  "$_src/gpu/ccpr/GrCCFiller.h",
-  "$_src/gpu/ccpr/GrCCFillGeometry.cpp",
-  "$_src/gpu/ccpr/GrCCFillGeometry.h",
-  "$_src/gpu/ccpr/GrCCPathCache.cpp",
-  "$_src/gpu/ccpr/GrCCPathCache.h",
-  "$_src/gpu/ccpr/GrCCPathProcessor.cpp",
-  "$_src/gpu/ccpr/GrCCPathProcessor.h",
-  "$_src/gpu/ccpr/GrCCPerFlushResources.cpp",
-  "$_src/gpu/ccpr/GrCCPerFlushResources.h",
-  "$_src/gpu/ccpr/GrCCQuadraticShader.cpp",
-  "$_src/gpu/ccpr/GrCCQuadraticShader.h",
-  "$_src/gpu/ccpr/GrCCStrokeGeometry.cpp",
-  "$_src/gpu/ccpr/GrCCStrokeGeometry.h",
-  "$_src/gpu/ccpr/GrCCStroker.cpp",
-  "$_src/gpu/ccpr/GrCCStroker.h",
-  "$_src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp",
-  "$_src/gpu/ccpr/GrCoverageCountingPathRenderer.h",
-
   "$_src/gpu/effects/GrAARectEffect.cpp",
   "$_src/gpu/effects/GrAARectEffect.h",
   "$_src/gpu/effects/GrAlphaThresholdFragmentProcessor.cpp",
@@ -552,6 +517,45 @@
   "$_src/image/SkSurface_Gpu.cpp",
 ]
 
+skia_ccpr_sources = [
+  # coverage counting path renderer
+  "$_src/gpu/ccpr/GrCCAtlas.cpp",
+  "$_src/gpu/ccpr/GrCCAtlas.h",
+  "$_src/gpu/ccpr/GrCCClipPath.cpp",
+  "$_src/gpu/ccpr/GrCCClipProcessor.cpp",
+  "$_src/gpu/ccpr/GrCCClipProcessor.h",
+  "$_src/gpu/ccpr/GrCCConicShader.cpp",
+  "$_src/gpu/ccpr/GrCCConicShader.h",
+  "$_src/gpu/ccpr/GrCCCoverageProcessor.cpp",
+  "$_src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp",
+  "$_src/gpu/ccpr/GrCCCoverageProcessor_VSImpl.cpp",
+  "$_src/gpu/ccpr/GrCCCoverageProcessor.h",
+  "$_src/gpu/ccpr/GrCCCubicShader.cpp",
+  "$_src/gpu/ccpr/GrCCCubicShader.h",
+  "$_src/gpu/ccpr/GrCCDrawPathsOp.cpp",
+  "$_src/gpu/ccpr/GrCCDrawPathsOp.h",
+  "$_src/gpu/ccpr/GrCCFiller.cpp",
+  "$_src/gpu/ccpr/GrCCFiller.h",
+  "$_src/gpu/ccpr/GrCCFillGeometry.cpp",
+  "$_src/gpu/ccpr/GrCCFillGeometry.h",
+  "$_src/gpu/ccpr/GrCCPathCache.cpp",
+  "$_src/gpu/ccpr/GrCCPathCache.h",
+  "$_src/gpu/ccpr/GrCCPathProcessor.cpp",
+  "$_src/gpu/ccpr/GrCCPathProcessor.h",
+  "$_src/gpu/ccpr/GrCCPerFlushResources.cpp",
+  "$_src/gpu/ccpr/GrCCPerFlushResources.h",
+  "$_src/gpu/ccpr/GrCCQuadraticShader.cpp",
+  "$_src/gpu/ccpr/GrCCQuadraticShader.h",
+  "$_src/gpu/ccpr/GrCCStrokeGeometry.cpp",
+  "$_src/gpu/ccpr/GrCCStrokeGeometry.h",
+  "$_src/gpu/ccpr/GrCCStroker.cpp",
+  "$_src/gpu/ccpr/GrCCStroker.h",
+  "$_src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp",
+  "$_src/gpu/ccpr/GrCoverageCountingPathRenderer.h",
+]
+
+skia_gpu_sources += skia_ccpr_sources
+
 skia_null_gpu_sources = []
 
 skia_vk_sources = [
diff --git a/public.bzl b/public.bzl
index 2ce0abf..28d4a3f 100644
--- a/public.bzl
+++ b/public.bzl
@@ -243,6 +243,7 @@
         # TODO(mtklein): Move to opts?
         "src/pdf/SkDocument_PDF_None.cpp",  # We use src/pdf/SkPDFDocument.cpp.
         "src/gpu/gl/GrGLMakeNativeInterface_none.cpp",
+        "src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp",
 
         # Exclude files that don't compile everywhere.
         "src/svg/**/*",  # Depends on xml, SkJpegCodec, and SkPngCodec.
diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp b/src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp
new file mode 100644
index 0000000..ebc12da
--- /dev/null
+++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2018 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "GrCoverageCountingPathRenderer.h"
+
+bool GrCoverageCountingPathRenderer::IsSupported(const GrCaps& caps) {
+    return false;
+}
+
+sk_sp<GrCoverageCountingPathRenderer> GrCoverageCountingPathRenderer::CreateIfSupported(
+        const GrCaps& caps, AllowCaching allowCaching) {
+    return nullptr;
+}
+
+std::unique_ptr<GrFragmentProcessor> GrCoverageCountingPathRenderer::makeClipProcessor(
+        uint32_t opListID, const SkPath& deviceSpacePath, const SkIRect& accessRect, int rtWidth,
+        int rtHeight, const GrCaps& caps) {
+    return nullptr;
+}