diff --git a/dm/DM.cpp b/dm/DM.cpp
index afe7573..c71450c 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -1,7 +1,6 @@
 // Main binary for DM.
 // For a high-level overview, please see dm/README.
 
-#include "Benchmark.h"
 #include "CrashHandler.h"
 #include "SkCommandLineFlags.h"
 #include "SkForceLinking.h"
@@ -11,7 +10,6 @@
 #include "Test.h"
 #include "gm.h"
 
-#include "DMBenchTask.h"
 #include "DMCpuGMTask.h"
 #include "DMGpuGMTask.h"
 #include "DMGpuSupport.h"
@@ -68,7 +66,6 @@
 DEFINE_string(skps, "", "Directory to read skps from.");
 
 DEFINE_bool(gms, true, "Run GMs?");
-DEFINE_bool(benches, true, "Run benches?  Does not run GMs-as-benches.");
 DEFINE_bool(tests, true, "Run tests?");
 
 DECLARE_bool(verbose);
@@ -130,34 +127,6 @@
 #undef START
 }
 
-static void kick_off_benches(const SkTDArray<BenchRegistry::Factory>& benches,
-                             const SkTArray<SkString>& configs,
-                             GrGLStandard gpuAPI,
-                             DM::Reporter* reporter,
-                             DM::TaskRunner* tasks) {
-#define START(name, type, ...)                                                                 \
-    if (lowercase(configs[j]).equals(name)) {                                                  \
-        tasks->add(SkNEW_ARGS(DM::type, (name, reporter, tasks, benches[i], ## __VA_ARGS__))); \
-    }
-    for (int i = 0; i < benches.count(); i++) {
-        for (int j = 0; j < configs.count(); j++) {
-            START("nonrendering", NonRenderingBenchTask);
-            START("565",          CpuBenchTask, kRGB_565_SkColorType);
-            START("8888",         CpuBenchTask, kN32_SkColorType);
-            START("gpu",          GpuBenchTask, native, gpuAPI, 0);
-            START("msaa4",        GpuBenchTask, native, gpuAPI, 4);
-            START("msaa16",       GpuBenchTask, native, gpuAPI, 16);
-            START("nvprmsaa4",    GpuBenchTask, nvpr,   gpuAPI, 4);
-            START("nvprmsaa16",   GpuBenchTask, nvpr,   gpuAPI, 16);
-            START("gpunull",      GpuBenchTask, null,   gpuAPI, 0);
-            START("gpudebug",     GpuBenchTask, debug,  gpuAPI, 0);
-            START("angle",        GpuBenchTask, angle,  gpuAPI, 0);
-            START("mesa",         GpuBenchTask, mesa,   gpuAPI, 0);
-        }
-    }
-#undef START
-}
-
 static void kick_off_tests(const SkTDArray<TestRegistry::Factory>& tests,
                            DM::Reporter* reporter,
                            DM::TaskRunner* tasks) {
@@ -269,22 +238,16 @@
         }
     }
 
-    SkTDArray<BenchRegistry::Factory> benches;
-    if (FLAGS_benches) {
-        append_matching_factories<Benchmark>(BenchRegistry::Head(), &benches);
-    }
-
     SkTDArray<TestRegistry::Factory> tests;
     if (FLAGS_tests) {
         append_matching_factories<Test>(TestRegistry::Head(), &tests);
     }
 
-    SkDebugf("(%d GMs, %d benches) x %d configs, %d tests\n",
-             gms.count(), benches.count(), configs.count(), tests.count());
+    SkDebugf("%d GMs x %d configs, %d tests\n",
+             gms.count(), configs.count(), tests.count());
     DM::Reporter reporter;
     DM::TaskRunner tasks(FLAGS_threads, FLAGS_gpuThreads);
     kick_off_gms(gms, configs, gpuAPI, *expectations, &reporter, &tasks);
-    kick_off_benches(benches, configs, gpuAPI, &reporter, &tasks);
     kick_off_tests(tests, &reporter, &tasks);
     kick_off_skps(&reporter, &tasks);
     tasks.wait();
diff --git a/dm/DMBenchTask.cpp b/dm/DMBenchTask.cpp
deleted file mode 100644
index 9bdbbf2..0000000
--- a/dm/DMBenchTask.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-#include "DMBenchTask.h"
-#include "DMUtil.h"
-#include "SkSurface.h"
-
-namespace DM {
-
-static SkString bench_name(const char* name, const char* config) {
-    SkString result("bench ");
-    result.appendf("%s_%s", name, config);
-    return result;
-}
-
-NonRenderingBenchTask::NonRenderingBenchTask(const char* config,
-                                             Reporter* reporter,
-                                             TaskRunner* tasks,
-                                             BenchRegistry::Factory factory)
-    : CpuTask(reporter, tasks)
-    , fBench(factory(NULL))
-    , fName(bench_name(fBench->getName(), config)) {}
-
-CpuBenchTask::CpuBenchTask(const char* config,
-                           Reporter* reporter,
-                           TaskRunner* tasks,
-                           BenchRegistry::Factory factory,
-                           SkColorType colorType)
-    : CpuTask(reporter, tasks)
-    , fBench(factory(NULL))
-    , fName(bench_name(fBench->getName(), config))
-    , fColorType(colorType) {}
-
-GpuBenchTask::GpuBenchTask(const char* config,
-                           Reporter* reporter,
-                           TaskRunner* tasks,
-                           BenchRegistry::Factory factory,
-                           GrContextFactory::GLContextType contextType,
-                           GrGLStandard gpuAPI,
-                           int sampleCount)
-    : GpuTask(reporter, tasks)
-    , fBench(factory(NULL))
-    , fName(bench_name(fBench->getName(), config))
-    , fContextType(contextType)
-    , fGpuAPI(gpuAPI)
-    , fSampleCount(sampleCount) {}
-
-bool NonRenderingBenchTask::shouldSkip() const {
-    return !fBench->isSuitableFor(Benchmark::kNonRendering_Backend);
-}
-
-bool CpuBenchTask::shouldSkip() const {
-    return !fBench->isSuitableFor(Benchmark::kRaster_Backend);
-}
-
-bool GpuBenchTask::shouldSkip() const {
-    return kGPUDisabled || !fBench->isSuitableFor(Benchmark::kGPU_Backend);
-}
-
-static void draw_raster(Benchmark* bench, SkColorType colorType) {
-    SkBitmap bitmap;
-    AllocatePixels(colorType, bench->getSize().x(), bench->getSize().y(), &bitmap);
-    SkCanvas canvas(bitmap);
-
-    bench->preDraw();
-    bench->draw(1, &canvas);
-}
-
-void NonRenderingBenchTask::draw() {
-    draw_raster(fBench.get(), kN32_SkColorType);
-}
-
-void CpuBenchTask::draw() {
-    draw_raster(fBench.get(), fColorType);
-}
-
-void GpuBenchTask::draw(GrContextFactory* grFactory) {
-    SkImageInfo info = SkImageInfo::Make(fBench->getSize().x(),
-                                         fBench->getSize().y(),
-                                         kN32_SkColorType,
-                                         kPremul_SkAlphaType);
-    SkAutoTUnref<SkSurface> surface(NewGpuSurface(grFactory, fContextType, fGpuAPI, info,
-                                                  fSampleCount));
-    if (!surface) {
-        this->fail("Could not create context for the config and the api.");
-        return;
-    }
-    fBench->preDraw();
-    fBench->draw(1, surface->getCanvas());
-}
-
-}  // namespace DM
diff --git a/dm/DMBenchTask.h b/dm/DMBenchTask.h
deleted file mode 100644
index d2b5800..0000000
--- a/dm/DMBenchTask.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef DMBenchTask_DEFINED
-#define DMBenchTask_DEFINED
-
-#include "Benchmark.h"
-#include "DMReporter.h"
-#include "DMTask.h"
-#include "DMTaskRunner.h"
-#include "SkString.h"
-#include "SkTemplates.h"
-
-// Tasks that run an Benchmark once as a check that it doesn't crash.
-
-namespace DM {
-
-class NonRenderingBenchTask : public CpuTask {
-public:
-    NonRenderingBenchTask(const char* config, Reporter*, TaskRunner*, BenchRegistry::Factory);
-
-    virtual void draw() SK_OVERRIDE;
-    virtual bool shouldSkip() const SK_OVERRIDE;
-    virtual SkString name() const SK_OVERRIDE { return fName; }
-
-private:
-    SkAutoTDelete<Benchmark> fBench;
-    const SkString fName;
-};
-
-class CpuBenchTask : public CpuTask {
-public:
-    CpuBenchTask(const char* config, Reporter*, TaskRunner*, BenchRegistry::Factory, SkColorType);
-
-    virtual void draw() SK_OVERRIDE;
-    virtual bool shouldSkip() const SK_OVERRIDE;
-    virtual SkString name() const SK_OVERRIDE { return fName; }
-
-private:
-    SkAutoTDelete<Benchmark> fBench;
-    const SkString fName;
-    const SkColorType fColorType;
-};
-
-class GpuBenchTask : public GpuTask {
-public:
-    GpuBenchTask(const char* config,
-                 Reporter*,
-                 TaskRunner*,
-                 BenchRegistry::Factory,
-                 GrContextFactory::GLContextType,
-                 GrGLStandard gpuAPI,
-                 int sampleCount);
-
-    virtual void draw(GrContextFactory*) SK_OVERRIDE;
-    virtual bool shouldSkip() const SK_OVERRIDE;
-    virtual SkString name() const SK_OVERRIDE { return fName; }
-
-private:
-    SkAutoTDelete<Benchmark> fBench;
-    const SkString fName;
-    const GrContextFactory::GLContextType fContextType;
-    const GrGLStandard fGpuAPI;
-    int fSampleCount;
-};
-
-}  // namespace DM
-
-#endif // DMBenchTask_DEFINED
diff --git a/dm/DMUtil.h b/dm/DMUtil.h
index c202b04..8de767d 100644
--- a/dm/DMUtil.h
+++ b/dm/DMUtil.h
@@ -1,7 +1,6 @@
 #ifndef DMUtil_DEFINED
 #define DMUtil_DEFINED
 
-#include "Benchmark.h"
 #include "SkBitmap.h"
 #include "SkString.h"
 #include "gm_expectations.h"
diff --git a/gyp/dm.gyp b/gyp/dm.gyp
index a2ef037..51c8569 100644
--- a/gyp/dm.gyp
+++ b/gyp/dm.gyp
@@ -7,7 +7,6 @@
         'target_name': 'dm',
         'type': 'executable',
         'include_dirs': [
-            '../bench',
             '../dm',
             '../gm',
             '../tests',
@@ -21,14 +20,12 @@
             '../tools',
         ],
         'includes': [
-            'bench.gypi',
             'gmslides.gypi',
             'pathops_unittest.gypi',
             'tests.gypi',
         ],
         'sources': [
             '../dm/DM.cpp',
-            '../dm/DMBenchTask.cpp',
             '../dm/DMCpuGMTask.cpp',
             '../dm/DMExpectationsTask.cpp',
             '../dm/DMGpuGMTask.cpp',
