diff --git a/gn/gpu.gni b/gn/gpu.gni
index 9605649..33f8d67 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -288,7 +288,6 @@
   "$_src/gpu/ops/GrStencilPathOp.h",
   "$_src/gpu/ops/GrTessellatingPathRenderer.cpp",
   "$_src/gpu/ops/GrTessellatingPathRenderer.h",
-  "$_src/gpu/ops/GrTestMeshDrawOp.h",
 
   "$_src/gpu/effects/Gr1DKernelEffect.h",
   "$_src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp",
diff --git a/src/gpu/ops/GrTestMeshDrawOp.h b/src/gpu/ops/GrTestMeshDrawOp.h
deleted file mode 100644
index aad6774..0000000
--- a/src/gpu/ops/GrTestMeshDrawOp.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef GrTestMeshDrawOp_DEFINED
-#define GrTestMeshDrawOp_DEFINED
-
-#include "GrGeometryProcessor.h"
-#include "GrOpFlushState.h"
-
-#include "ops/GrMeshDrawOp.h"
-
-/*
- * A simple solid color GrLegacyMeshDrawOp for testing purposes which doesn't ever combine.
- * Subclassing this in tests saves having to fill out some boiler plate methods.
- */
-class GrTestMeshDrawOp : public GrLegacyMeshDrawOp {
-public:
-    const char* name() const override = 0;
-
-protected:
-    GrTestMeshDrawOp(uint32_t classID, const SkRect& bounds, GrColor color)
-            : INHERITED(classID), fColor(color) {
-        // Choose some conservative values for aa bloat and zero area.
-        this->setBounds(bounds, HasAABloat::kYes, IsZeroArea::kYes);
-    }
-
-    GrColor color() const { return fColor; }
-
-    bool usesLocalCoords() const { return fUsesLocalCoords; }
-
-private:
-    void getProcessorAnalysisInputs(GrProcessorAnalysisColor* color,
-                                    GrProcessorAnalysisCoverage* coverage) const override {
-        color->setToConstant(fColor);
-        *coverage = GrProcessorAnalysisCoverage::kSingleChannel;
-    }
-
-    void applyPipelineOptimizations(const PipelineOptimizations& optimizations) override {
-        optimizations.getOverrideColorIfSet(&fColor);
-        fUsesLocalCoords = optimizations.readsLocalCoords();
-    }
-
-    bool onCombineIfPossible(GrOp*, const GrCaps&) override { return false; }
-
-    GrColor fColor;
-    bool fUsesLocalCoords = false;
-
-    typedef GrLegacyMeshDrawOp INHERITED;
-};
-
-#endif
diff --git a/tests/OnFlushCallbackTest.cpp b/tests/OnFlushCallbackTest.cpp
index 7a6738e..c7503bc 100644
--- a/tests/OnFlushCallbackTest.cpp
+++ b/tests/OnFlushCallbackTest.cpp
@@ -19,7 +19,6 @@
 #include "GrQuad.h"
 #include "effects/GrSimpleTextureEffect.h"
 #include "ops/GrSimpleMeshDrawOpHelper.h"
-#include "ops/GrTestMeshDrawOp.h"
 
 namespace {
 // This is a simplified mesh drawing op that can be used in the atlas generation test.
