| Index: dm/DM.cpp
 | 
| diff --git a/dm/DM.cpp b/dm/DM.cpp
 | 
| index 64a4bc5a231a50f9e41251880b4d255a6b7cdd99..afe75734e981724c4d07238c5ad2cdb8b3a638b9 100644
 | 
| --- a/dm/DM.cpp
 | 
| +++ b/dm/DM.cpp
 | 
| @@ -37,8 +37,15 @@ using skiagm::GMRegistry;
 | 
|  using skiatest::Test;
 | 
|  using skiatest::TestRegistry;
 | 
|  
 | 
| +static const char kGpuAPINameGL[] = "gl";
 | 
| +static const char kGpuAPINameGLES[] = "gles";
 | 
| +
 | 
|  DEFINE_int32(threads, -1, "Threads for CPU work. Default NUM_CPUS.");
 | 
|  DEFINE_int32(gpuThreads, 1, "Threads for GPU work.");
 | 
| +DEFINE_string(gpuAPI, "", "Force use of specific gpu API.  Using \"gl\" "
 | 
| +              "forces OpenGL API. Using \"gles\" forces OpenGL ES API. "
 | 
| +              "Defaults to empty string, which selects the API native to the "
 | 
| +              "system.");
 | 
|  DEFINE_string2(expectations, r, "",
 | 
|                 "If a directory, compare generated images against images under this path. "
 | 
|                 "If a file, compare generated images against JSON expectations at this path."
 | 
| @@ -95,6 +102,7 @@ native;
 | 
|  
 | 
|  static void kick_off_gms(const SkTDArray<GMRegistry::Factory>& gms,
 | 
|                           const SkTArray<SkString>& configs,
 | 
| +                         GrGLStandard gpuAPI,
 | 
|                           const DM::Expectations& expectations,
 | 
|                           DM::Reporter* reporter,
 | 
|                           DM::TaskRunner* tasks) {
 | 
| @@ -104,17 +112,18 @@ static void kick_off_gms(const SkTDArray<GMRegistry::Factory>& gms,
 | 
|      }
 | 
|      for (int i = 0; i < gms.count(); i++) {
 | 
|          for (int j = 0; j < configs.count(); j++) {
 | 
| +
 | 
|              START("565",        CpuGMTask, expectations, kRGB_565_SkColorType);
 | 
|              START("8888",       CpuGMTask, expectations, kN32_SkColorType);
 | 
| -            START("gpu",        GpuGMTask, expectations, native, 0);
 | 
| -            START("msaa4",      GpuGMTask, expectations, native, 4);
 | 
| -            START("msaa16",     GpuGMTask, expectations, native, 16);
 | 
| -            START("nvprmsaa4",  GpuGMTask, expectations, nvpr,   4);
 | 
| -            START("nvprmsaa16", GpuGMTask, expectations, nvpr,   16);
 | 
| -            START("gpunull",    GpuGMTask, expectations, null,   0);
 | 
| -            START("gpudebug",   GpuGMTask, expectations, debug,  0);
 | 
| -            START("angle",      GpuGMTask, expectations, angle,  0);
 | 
| -            START("mesa",       GpuGMTask, expectations, mesa,   0);
 | 
| +            START("gpu",        GpuGMTask, expectations, native, gpuAPI, 0);
 | 
| +            START("msaa4",      GpuGMTask, expectations, native, gpuAPI, 4);
 | 
| +            START("msaa16",     GpuGMTask, expectations, native, gpuAPI, 16);
 | 
| +            START("nvprmsaa4",  GpuGMTask, expectations, nvpr,   gpuAPI, 4);
 | 
| +            START("nvprmsaa16", GpuGMTask, expectations, nvpr,   gpuAPI, 16);
 | 
| +            START("gpunull",    GpuGMTask, expectations, null,   gpuAPI, 0);
 | 
| +            START("gpudebug",   GpuGMTask, expectations, debug,  gpuAPI, 0);
 | 
| +            START("angle",      GpuGMTask, expectations, angle,  gpuAPI, 0);
 | 
| +            START("mesa",       GpuGMTask, expectations, mesa,   gpuAPI, 0);
 | 
|              START("pdf",        PDFTask,   RASTERIZE_PDF_PROC);
 | 
|          }
 | 
|      }
 | 
| @@ -123,6 +132,7 @@ static void kick_off_gms(const SkTDArray<GMRegistry::Factory>& gms,
 | 
|  
 | 
|  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, ...)                                                                 \
 | 
| @@ -134,15 +144,15 @@ static void kick_off_benches(const SkTDArray<BenchRegistry::Factory>& benches,
 | 
|              START("nonrendering", NonRenderingBenchTask);
 | 
|              START("565",          CpuBenchTask, kRGB_565_SkColorType);
 | 
|              START("8888",         CpuBenchTask, kN32_SkColorType);
 | 
| -            START("gpu",          GpuBenchTask, native, 0);
 | 
| -            START("msaa4",        GpuBenchTask, native, 4);
 | 
| -            START("msaa16",       GpuBenchTask, native, 16);
 | 
| -            START("nvprmsaa4",    GpuBenchTask, nvpr,   4);
 | 
| -            START("nvprmsaa16",   GpuBenchTask, nvpr,   16);
 | 
| -            START("gpunull",      GpuBenchTask, null,   0);
 | 
| -            START("gpudebug",     GpuBenchTask, debug,  0);
 | 
| -            START("angle",        GpuBenchTask, angle,  0);
 | 
| -            START("mesa",         GpuBenchTask, mesa,   0);
 | 
| +            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
 | 
| @@ -204,6 +214,16 @@ static void report_failures(const SkTArray<SkString>& failures) {
 | 
|      SkDebugf("%d failures.\n", failures.count());
 | 
|  }
 | 
|  
 | 
| +static GrGLStandard get_gl_standard() {
 | 
| +  if (FLAGS_gpuAPI.contains(kGpuAPINameGL)) {
 | 
| +      return kGL_GrGLStandard;
 | 
| +  }
 | 
| +  if (FLAGS_gpuAPI.contains(kGpuAPINameGLES)) {
 | 
| +      return kGLES_GrGLStandard;
 | 
| +  }
 | 
| +  return kNone_GrGLStandard;
 | 
| +}
 | 
| +
 | 
|  template <typename T, typename Registry>
 | 
|  static void append_matching_factories(Registry* head, SkTDArray<typename Registry::Factory>* out) {
 | 
|      for (const Registry* reg = head; reg != NULL; reg = reg->next()) {
 | 
| @@ -232,6 +252,8 @@ int tool_main(int argc, char** argv) {
 | 
|          SkStrSplit(FLAGS_config[i], ", ", &configs);
 | 
|      }
 | 
|  
 | 
| +    GrGLStandard gpuAPI = get_gl_standard();
 | 
| +
 | 
|      SkTDArray<GMRegistry::Factory> gms;
 | 
|      SkAutoTDelete<DM::Expectations> expectations(SkNEW(DM::NoExpectations));
 | 
|      if (FLAGS_gms) {
 | 
| @@ -261,8 +283,8 @@ int tool_main(int argc, char** argv) {
 | 
|               gms.count(), benches.count(), configs.count(), tests.count());
 | 
|      DM::Reporter reporter;
 | 
|      DM::TaskRunner tasks(FLAGS_threads, FLAGS_gpuThreads);
 | 
| -    kick_off_gms(gms, configs, *expectations, &reporter, &tasks);
 | 
| -    kick_off_benches(benches, configs, &reporter, &tasks);
 | 
| +    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();
 | 
| 
 |