aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--bench/GrMemoryPoolBench.cpp36
-rw-r--r--bench/SkBenchmark.h15
-rw-r--r--bench/SkGMBench.cpp2
-rw-r--r--bench/benchmain.cpp2
-rw-r--r--dm/DM.cpp140
-rw-r--r--dm/DMBenchTask.cpp86
-rw-r--r--dm/DMBenchTask.h67
-rw-r--r--dm/DMCpuTask.cpp4
-rw-r--r--dm/DMCpuTask.h2
-rw-r--r--dm/DMGpuTask.cpp13
-rw-r--r--dm/DMGpuTask.h5
-rw-r--r--dm/DMTask.cpp4
-rw-r--r--dm/DMTask.h4
-rw-r--r--dm/DMTestTask.cpp11
-rw-r--r--dm/DMTestTask.h1
-rw-r--r--dm/DMUtil.cpp14
-rw-r--r--dm/DMUtil.h5
-rw-r--r--gm/gm.cpp2
-rw-r--r--gm/gm.h2
-rw-r--r--gm/gmmain.cpp42
-rw-r--r--gyp/bench.gyp83
-rw-r--r--gyp/bench.gypi88
-rw-r--r--gyp/dm.gyp3
-rw-r--r--samplecode/GMSampleView.h2
24 files changed, 427 insertions, 206 deletions
diff --git a/bench/GrMemoryPoolBench.cpp b/bench/GrMemoryPoolBench.cpp
index 21f686d89d..96526e5fc2 100644
--- a/bench/GrMemoryPoolBench.cpp
+++ b/bench/GrMemoryPoolBench.cpp
@@ -20,12 +20,12 @@
struct A {
int gStuff[10];
#if OVERRIDE_NEW
- void* operator new (size_t size) { return gPool.allocate(size); }
- void operator delete (void* mem) { if (mem) { return gPool.release(mem); } }
+ void* operator new (size_t size) { return gBenchPool.allocate(size); }
+ void operator delete (void* mem) { if (mem) { return gBenchPool.release(mem); } }
#endif
- static GrMemoryPool gPool;
+ static GrMemoryPool gBenchPool;
};
-GrMemoryPool A::gPool(10 * (1 << 10), 10 * (1 << 10));
+GrMemoryPool A::gBenchPool(10 * (1 << 10), 10 * (1 << 10));
/**
* This benchmark creates and deletes objects in stack order
@@ -79,6 +79,16 @@ private:
typedef SkBenchmark INHERITED;
};
+struct B {
+ int gStuff[10];
+#if OVERRIDE_NEW
+ void* operator new (size_t size) { return gBenchPool.allocate(size); }
+ void operator delete (void* mem) { if (mem) { return gBenchPool.release(mem); } }
+#endif
+ static GrMemoryPool gBenchPool;
+};
+GrMemoryPool B::gBenchPool(10 * (1 << 10), 10 * (1 << 10));
+
/**
* This benchmark creates objects and deletes them in random order
*/
@@ -98,12 +108,12 @@ protected:
enum {
kMaxObjects = 4 * (1 << 10),
};
- SkAutoTDelete<A> objects[kMaxObjects];
+ SkAutoTDelete<B> objects[kMaxObjects];
for (int i = 0; i < loops; i++) {
uint32_t idx = r.nextRangeU(0, kMaxObjects-1);
if (NULL == objects[idx].get()) {
- objects[idx].reset(new A);
+ objects[idx].reset(new B);
} else {
objects[idx].free();
}
@@ -114,6 +124,16 @@ private:
typedef SkBenchmark INHERITED;
};
+struct C {
+ int gStuff[10];
+#if OVERRIDE_NEW
+ void* operator new (size_t size) { return gBenchPool.allocate(size); }
+ void operator delete (void* mem) { if (mem) { return gBenchPool.release(mem); } }
+#endif
+ static GrMemoryPool gBenchPool;
+};
+GrMemoryPool C::gBenchPool(10 * (1 << 10), 10 * (1 << 10));
+
/**
* This benchmark creates objects and deletes them in queue order
*/
@@ -133,11 +153,11 @@ protected:
virtual void onDraw(const int loops, SkCanvas*) {
SkRandom r;
- A* objects[M];
+ C* objects[M];
for (int i = 0; i < loops; i++) {
uint32_t count = r.nextRangeU(0, M-1);
for (uint32_t i = 0; i < count; i++) {
- objects[i] = new A;
+ objects[i] = new C;
}
for (uint32_t i = 0; i < count; i++) {
delete objects[i];
diff --git a/bench/SkBenchmark.h b/bench/SkBenchmark.h
index f1e317da60..bf28689236 100644
--- a/bench/SkBenchmark.h
+++ b/bench/SkBenchmark.h
@@ -15,10 +15,8 @@
#define DEF_BENCH(code) \
namespace { \
-class SK_MACRO_APPEND_LINE(F_CLASS) : public SkBenchmarkFactory { \
- virtual SkBenchmark* operator()() const SK_OVERRIDE { code; } \
-} SK_MACRO_APPEND_LINE(g_F_); \
-BenchRegistry SK_MACRO_APPEND_LINE(g_R_)(&SK_MACRO_APPEND_LINE(g_F_)); \
+static SkBenchmark* SK_MACRO_APPEND_LINE(factory)(void*) { code; } \
+BenchRegistry SK_MACRO_APPEND_LINE(g_R_)(SK_MACRO_APPEND_LINE(factory)); \
}
/*
@@ -136,13 +134,6 @@ private:
typedef SkRefCnt INHERITED;
};
-class SkBenchmarkFactory : public SkRefCnt {
-public:
- // Creates a new SkBenchmark that is owned by the caller on each call.
- virtual SkBenchmark* operator()() const = 0;
- virtual ~SkBenchmarkFactory() {}
-};
-
-typedef SkTRegistry<SkBenchmarkFactory*> BenchRegistry;
+typedef SkTRegistry<SkBenchmark*(*)(void*)> BenchRegistry;
#endif
diff --git a/bench/SkGMBench.cpp b/bench/SkGMBench.cpp
index e1d8124764..77d29a70a9 100644
--- a/bench/SkGMBench.cpp
+++ b/bench/SkGMBench.cpp
@@ -8,7 +8,7 @@
#include "SkGMBench.h"
SkGMBench::SkGMBench(skiagm::GM* gm) : fGM(gm) {
- fName.printf("GM:%s", gm->shortName());
+ fName.printf("GM:%s", gm->getName());
}
SkGMBench::~SkGMBench() { delete fGM; }
diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp
index 6eea11fc14..2401d6769a 100644
--- a/bench/benchmain.cpp
+++ b/bench/benchmain.cpp
@@ -58,7 +58,7 @@ public:
if (fBenches) {
BenchRegistry::Factory f = fBenches->factory();
fBenches = fBenches->next();
- return (*f)();
+ return (*f)(NULL);
}
while (fGMs) {
diff --git a/dm/DM.cpp b/dm/DM.cpp
index ee53e9d99f..bf37d20a80 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -3,6 +3,7 @@
#include "GrContext.h"
#include "GrContextFactory.h"
+#include "SkBenchmark.h"
#include "SkCommandLineFlags.h"
#include "SkForceLinking.h"
#include "SkGraphics.h"
@@ -10,6 +11,7 @@
#include "Test.h"
#include "gm.h"
+#include "DMBenchTask.h"
#include "DMCpuTask.h"
#include "DMGpuTask.h"
#include "DMReporter.h"
@@ -38,11 +40,12 @@ DEFINE_string(match, "", "[~][^]substring[$] [...] of GM name to run.\n"
"^ and $ requires an exact match\n"
"If a GM does not match any list entry,\n"
"it is skipped unless some list entry starts with ~");
-DEFINE_string(config, "565 8888 gpu",
- "Options: 565 8888 gpu msaa4 msaa16 gpunull gpudebug angle mesa"); // TODO(mtklein): pdf
+DEFINE_string(config, "565 8888 gpu nonrendering",
+ "Options: 565 8888 gpu nonrendering msaa4 msaa16 gpunull gpudebug angle mesa");
DEFINE_bool(leaks, false, "Print leaked instance-counted objects at exit?");
DEFINE_bool(gms, true, "Run GMs?");
+DEFINE_bool(benches, true, "Run benches? Does not run GMs-as-benches.");
DEFINE_bool(tests, true, "Run tests?");
__SK_FORCE_IMAGE_DECODER_LINKING;
@@ -55,46 +58,68 @@ static SkString lowercase(SkString s) {
return s;
}
+static const GrContextFactory::GLContextType native = GrContextFactory::kNative_GLContextType;
+static const GrContextFactory::GLContextType null = GrContextFactory::kNull_GLContextType;
+static const GrContextFactory::GLContextType debug = GrContextFactory::kDebug_GLContextType;
+static const GrContextFactory::GLContextType angle =
+#if SK_ANGLE
+GrContextFactory::kANGLE_GLContextType;
+#else
+native;
+#endif
+static const GrContextFactory::GLContextType mesa =
+#if SK_MESA
+GLContextFactory::kMESA_GLContextType;
+#else
+native;
+#endif
+
static void kick_off_gms(const SkTDArray<GMRegistry::Factory>& gms,
const SkTArray<SkString>& configs,
const DM::Expectations& expectations,
DM::Reporter* reporter,
DM::TaskRunner* tasks) {
- const SkColorType _565 = kRGB_565_SkColorType;
- const SkColorType _8888 = kPMColor_SkColorType;
- const GrContextFactory::GLContextType native = GrContextFactory::kNative_GLContextType;
- const GrContextFactory::GLContextType null = GrContextFactory::kNull_GLContextType;
- const GrContextFactory::GLContextType debug = GrContextFactory::kDebug_GLContextType;
- const GrContextFactory::GLContextType angle =
- #if SK_ANGLE
- GrContextFactory::kANGLE_GLContextType;
- #else
- native;
- #endif
- const GrContextFactory::GLContextType mesa =
- #if SK_MESA
- GLContextFactory::kMESA_GLContextType;
- #else
- native;
- #endif
-
+#define START(name, type, ...) \
+ if (lowercase(configs[j]).equals(name)) { \
+ tasks->add(SkNEW_ARGS(DM::type, \
+ (name, reporter, tasks, expectations, gms[i], ## __VA_ARGS__))); \
+ }
for (int i = 0; i < gms.count(); i++) {
-#define START(name, type, ...) \
- if (lowercase(configs[j]).equals(name)) { \
- tasks->add(SkNEW_ARGS(DM::type, \
- (name, reporter, tasks, expectations, gms[i], __VA_ARGS__))); \
+ for (int j = 0; j < configs.count(); j++) {
+ START("565", CpuTask, kRGB_565_SkColorType);
+ START("8888", CpuTask, kPMColor_SkColorType);
+ START("gpu", GpuTask, native, 0);
+ START("msaa4", GpuTask, native, 4);
+ START("msaa16", GpuTask, native, 16);
+ START("gpunull", GpuTask, null, 0);
+ START("gpudebug", GpuTask, debug, 0);
+ START("angle", GpuTask, angle, 0);
+ START("mesa", GpuTask, mesa, 0);
+ }
}
+#undef START
+}
+
+static void kick_off_benches(const SkTDArray<BenchRegistry::Factory>& benches,
+ const SkTArray<SkString>& configs,
+ 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("565", CpuTask, _565);
- START("8888", CpuTask, _8888);
- START("gpu", GpuTask, _8888, native, 0);
- START("msaa4", GpuTask, _8888, native, 4);
- START("msaa16", GpuTask, _8888, native, 16);
- START("gpunull", GpuTask, _8888, null, 0);
- START("gpudebug", GpuTask, _8888, debug, 0);
- START("angle", GpuTask, _8888, angle, 0);
- START("mesa", GpuTask, _8888, mesa, 0);
- //START("pdf", PdfTask, _8888);
+ START("nonrendering", NonRenderingBenchTask);
+ START("565", CpuBenchTask, kRGB_565_SkColorType);
+ START("8888", CpuBenchTask, kPMColor_SkColorType);
+ START("gpu", GpuBenchTask, native, 0);
+ START("msaa4", GpuBenchTask, native, 4);
+ START("msaa16", GpuBenchTask, native, 16);
+ START("gpunull", GpuBenchTask, null, 0);
+ START("gpudebug", GpuBenchTask, debug, 0);
+ START("angle", GpuBenchTask, angle, 0);
+ START("mesa", GpuBenchTask, mesa, 0);
}
}
#undef START
@@ -122,31 +147,36 @@ static void report_failures(const DM::Reporter& reporter) {
}
}
+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()) {
+ SkAutoTDelete<T> forName(reg->factory()(NULL));
+ if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, forName->getName())) {
+ *out->append() = reg->factory();
+ }
+ }
+}
+
int tool_main(int argc, char** argv);
int tool_main(int argc, char** argv) {
+ SkGraphics::Init();
+ SkCommandLineFlags::Parse(argc, argv);
#if SK_ENABLE_INST_COUNT
gPrintInstCount = FLAGS_leaks;
#endif
- SkGraphics::Init();
- SkCommandLineFlags::Parse(argc, argv);
GM::SetResourcePath(FLAGS_resources[0]);
+ SkBenchmark::SetResourcePath(FLAGS_resources[0]);
Test::SetResourcePath(FLAGS_resources[0]);
SkTArray<SkString> configs;
+ for (int i = 0; i < FLAGS_config.count(); i++) {
+ SkStrSplit(FLAGS_config[i], ", ", &configs);
+ }
+
SkTDArray<GMRegistry::Factory> gms;
SkAutoTDelete<DM::Expectations> expectations(SkNEW(DM::NoExpectations));
-
if (FLAGS_gms) {
- for (int i = 0; i < FLAGS_config.count(); i++) {
- SkStrSplit(FLAGS_config[i], ", ", &configs);
- }
-
- for (const GMRegistry* reg = GMRegistry::Head(); reg != NULL; reg = reg->next()) {
- SkAutoTDelete<GM> gmForName(reg->factory()(NULL));
- if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, gmForName->shortName())) {
- *gms.append() = reg->factory();
- }
- }
+ append_matching_factories<GM>(GMRegistry::Head(), &gms);
if (FLAGS_expectations.count() > 0) {
const char* path = FLAGS_expectations[0];
@@ -158,20 +188,22 @@ int tool_main(int argc, char** argv) {
}
}
+ SkTDArray<BenchRegistry::Factory> benches;
+ if (FLAGS_benches) {
+ append_matching_factories<SkBenchmark>(BenchRegistry::Head(), &benches);
+ }
+
SkTDArray<TestRegistry::Factory> tests;
if (FLAGS_tests) {
- for (const TestRegistry* reg = TestRegistry::Head(); reg != NULL; reg = reg->next()) {
- SkAutoTDelete<Test> testForName(reg->factory()(NULL));
- if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, testForName->getName())) {
- *tests.append() = reg->factory();
- }
- }
+ append_matching_factories<Test>(TestRegistry::Head(), &tests);
}
- SkDebugf("%d GMs x %d configs, %d tests\n", gms.count(), configs.count(), tests.count());
+ SkDebugf("(%d GMs, %d benches) x %d configs, %d tests\n",
+ gms.count(), benches.count(), configs.count(), tests.count());
DM::Reporter reporter;
DM::TaskRunner tasks(FLAGS_threads);
kick_off_gms(gms, configs, *expectations, &reporter, &tasks);
+ kick_off_benches(benches, configs, &reporter, &tasks);
kick_off_tests(tests, &reporter, &tasks);
tasks.wait();
diff --git a/dm/DMBenchTask.cpp b/dm/DMBenchTask.cpp
new file mode 100644
index 0000000000..4e251de2e9
--- /dev/null
+++ b/dm/DMBenchTask.cpp
@@ -0,0 +1,86 @@
+#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)
+ : Task(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)
+ : Task(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,
+ int sampleCount)
+ : Task(reporter, tasks)
+ , fBench(factory(NULL))
+ , fName(bench_name(fBench->getName(), config))
+ , fContextType(contextType)
+ , fSampleCount(sampleCount) {}
+
+bool NonRenderingBenchTask::shouldSkip() const {
+ return !fBench->isSuitableFor(SkBenchmark::kNonRendering_Backend);
+}
+
+bool CpuBenchTask::shouldSkip() const {
+ return !fBench->isSuitableFor(SkBenchmark::kRaster_Backend);
+}
+
+bool GpuBenchTask::shouldSkip() const {
+ return !fBench->isSuitableFor(SkBenchmark::kGPU_Backend);
+}
+
+static void draw_raster(SkBenchmark* bench, SkColorType colorType) {
+ SkBitmap bitmap;
+ SetupBitmap(colorType, bench, &bitmap);
+ SkCanvas canvas(bitmap);
+
+ bench->preDraw();
+ bench->draw(1, &canvas);
+ bench->postDraw();
+}
+
+void NonRenderingBenchTask::draw() {
+ draw_raster(fBench.get(), kPMColor_SkColorType);
+}
+
+void CpuBenchTask::draw() {
+ draw_raster(fBench.get(), fColorType);
+}
+
+void GpuBenchTask::draw() {
+ SkImageInfo info = SkImageInfo::Make(fBench->getSize().x(),
+ fBench->getSize().y(),
+ kPMColor_SkColorType,
+ kPremul_SkAlphaType);
+ SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(
+ this->getGrContextFactory()->get(fContextType), info, fSampleCount));
+
+ fBench->preDraw();
+ fBench->draw(1, surface->getCanvas());
+ fBench->postDraw();
+}
+
+} // namespace DM
diff --git a/dm/DMBenchTask.h b/dm/DMBenchTask.h
new file mode 100644
index 0000000000..1e9bc9912e
--- /dev/null
+++ b/dm/DMBenchTask.h
@@ -0,0 +1,67 @@
+#ifndef DMBenchTask_DEFINED
+#define DMBenchTask_DEFINED
+
+#include "DMReporter.h"
+#include "DMTask.h"
+#include "DMTaskRunner.h"
+#include "SkBenchmark.h"
+#include "SkString.h"
+#include "SkTemplates.h"
+
+// Tasks that run an SkBenchmark once as a check that it doesn't crash.
+
+namespace DM {
+
+class NonRenderingBenchTask : public Task {
+public:
+ NonRenderingBenchTask(const char* config, Reporter*, TaskRunner*, BenchRegistry::Factory);
+
+ virtual void draw() SK_OVERRIDE;
+ virtual bool usesGpu() const SK_OVERRIDE { return false; }
+ virtual bool shouldSkip() const SK_OVERRIDE;
+ virtual SkString name() const SK_OVERRIDE { return fName; }
+
+private:
+ SkAutoTDelete<SkBenchmark> fBench;
+ const SkString fName;
+};
+
+class CpuBenchTask : public Task {
+public:
+ CpuBenchTask(const char* config, Reporter*, TaskRunner*, BenchRegistry::Factory, SkColorType);
+
+ virtual void draw() SK_OVERRIDE;
+ virtual bool usesGpu() const SK_OVERRIDE { return false; }
+ virtual bool shouldSkip() const SK_OVERRIDE;
+ virtual SkString name() const SK_OVERRIDE { return fName; }
+
+private:
+ SkAutoTDelete<SkBenchmark> fBench;
+ const SkString fName;
+ const SkColorType fColorType;
+};
+
+class GpuBenchTask : public Task {
+public:
+ GpuBenchTask(const char* config,
+ Reporter*,
+ TaskRunner*,
+ BenchRegistry::Factory,
+ GrContextFactory::GLContextType,
+ int sampleCount);
+
+ virtual void draw() SK_OVERRIDE;
+ virtual bool usesGpu() const SK_OVERRIDE { return true; }
+ virtual bool shouldSkip() const SK_OVERRIDE;
+ virtual SkString name() const SK_OVERRIDE { return fName; }
+
+private:
+ SkAutoTDelete<SkBenchmark> fBench;
+ const SkString fName;
+ const GrContextFactory::GLContextType fContextType;
+ int fSampleCount;
+};
+
+} // namespace DM
+
+#endif // DMBenchTask_DEFINED
diff --git a/dm/DMCpuTask.cpp b/dm/DMCpuTask.cpp
index 7a82a7570a..acbe8d2185 100644
--- a/dm/DMCpuTask.cpp
+++ b/dm/DMCpuTask.cpp
@@ -9,7 +9,7 @@
namespace DM {
-CpuTask::CpuTask(const char* name,
+CpuTask::CpuTask(const char* config,
Reporter* reporter,
TaskRunner* taskRunner,
const Expectations& expectations,
@@ -18,7 +18,7 @@ CpuTask::CpuTask(const char* name,
: Task(reporter, taskRunner)
, fGMFactory(gmFactory)
, fGM(fGMFactory(NULL))
- , fName(UnderJoin(fGM->shortName(), name))
+ , fName(UnderJoin(fGM->getName(), config))
, fExpectations(expectations)
, fColorType(colorType)
{}
diff --git a/dm/DMCpuTask.h b/dm/DMCpuTask.h
index 8e7f531883..0ae112f754 100644
--- a/dm/DMCpuTask.h
+++ b/dm/DMCpuTask.h
@@ -17,7 +17,7 @@ namespace DM {
class CpuTask : public Task {
public:
- CpuTask(const char* name,
+ CpuTask(const char* config,
Reporter*,
TaskRunner*,
const Expectations&,
diff --git a/dm/DMGpuTask.cpp b/dm/DMGpuTask.cpp
index 3a4708b8db..c285d88fd7 100644
--- a/dm/DMGpuTask.cpp
+++ b/dm/DMGpuTask.cpp
@@ -9,20 +9,17 @@
namespace DM {
-GpuTask::GpuTask(const char* name,
+GpuTask::GpuTask(const char* config,
Reporter* reporter,
TaskRunner* taskRunner,
const Expectations& expectations,
skiagm::GMRegistry::Factory gmFactory,
- SkColorType colorType,
GrContextFactory::GLContextType contextType,
int sampleCount)
: Task(reporter, taskRunner)
- , fTaskRunner(taskRunner)
, fGM(gmFactory(NULL))
- , fName(UnderJoin(fGM->shortName(), name))
+ , fName(UnderJoin(fGM->getName(), config))
, fExpectations(expectations)
- , fColorType(colorType)
, fContextType(contextType)
, fSampleCount(sampleCount)
{}
@@ -30,10 +27,10 @@ GpuTask::GpuTask(const char* name,
void GpuTask::draw() {
SkImageInfo info = SkImageInfo::Make(SkScalarCeilToInt(fGM->width()),
SkScalarCeilToInt(fGM->height()),
- fColorType,
+ kPMColor_SkColorType,
kPremul_SkAlphaType);
- GrContext* gr = fTaskRunner->getGrContextFactory()->get(fContextType); // Owned by surface.
- SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(gr, info, fSampleCount));
+ SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(
+ this->getGrContextFactory()->get(fContextType), info, fSampleCount));
SkCanvas* canvas = surface->getCanvas();
canvas->concat(fGM->getInitialTransform());
diff --git a/dm/DMGpuTask.h b/dm/DMGpuTask.h
index 1380e443d4..f74950c088 100644
--- a/dm/DMGpuTask.h
+++ b/dm/DMGpuTask.h
@@ -17,12 +17,11 @@ namespace DM {
class GpuTask : public Task {
public:
- GpuTask(const char* name,
+ GpuTask(const char* config,
Reporter*,
TaskRunner*,
const Expectations&,
skiagm::GMRegistry::Factory,
- SkColorType,
GrContextFactory::GLContextType,
int sampleCount);
@@ -32,11 +31,9 @@ public:
virtual SkString name() const SK_OVERRIDE { return fName; }
private:
- TaskRunner* fTaskRunner;
SkAutoTDelete<skiagm::GM> fGM;
const SkString fName;
const Expectations& fExpectations;
- const SkColorType fColorType;
const GrContextFactory::GLContextType fContextType;
const int fSampleCount;
};
diff --git a/dm/DMTask.cpp b/dm/DMTask.cpp
index 2f009f0670..d26971c890 100644
--- a/dm/DMTask.cpp
+++ b/dm/DMTask.cpp
@@ -46,4 +46,8 @@ void Task::fail(const char* msg) {
fReporter->fail(failure);
}
+GrContextFactory* Task::getGrContextFactory() const {
+ return fTaskRunner->getGrContextFactory();
+}
+
} // namespace DM
diff --git a/dm/DMTask.h b/dm/DMTask.h
index 638a939304..e8598df85e 100644
--- a/dm/DMTask.h
+++ b/dm/DMTask.h
@@ -2,6 +2,7 @@
#define DMTask_DEFINED
#include "DMReporter.h"
+#include "GrContextFactory.h"
#include "SkRunnable.h"
#include "SkThreadPool.h"
@@ -36,6 +37,9 @@ protected:
void spawnChild(Task* task);
void fail(const char* msg = NULL);
+ // This can only be safely called from a GPU task's draw() method.
+ GrContextFactory* getGrContextFactory() const;
+
private:
// Both unowned.
Reporter* fReporter;
diff --git a/dm/DMTestTask.cpp b/dm/DMTestTask.cpp
index 7a5f8cf9f9..32a698c673 100644
--- a/dm/DMTestTask.cpp
+++ b/dm/DMTestTask.cpp
@@ -8,17 +8,22 @@ DEFINE_bool2(pathOpsVerbose, V, false, "Tell pathOps tests to be verbose.")
namespace DM {
+static SkString test_name(const char* name) {
+ SkString result("test ");
+ result.append(name);
+ return result;
+}
+
TestTask::TestTask(Reporter* reporter,
TaskRunner* taskRunner,
skiatest::TestRegistry::Factory factory)
: Task(reporter, taskRunner)
- , fTaskRunner(taskRunner)
, fTest(factory(NULL))
- , fName(UnderJoin("test", fTest->getName())) {}
+ , fName(test_name(fTest->getName())) {}
void TestTask::draw() {
if (this->usesGpu()) {
- fTest->setGrContextFactory(fTaskRunner->getGrContextFactory());
+ fTest->setGrContextFactory(this->getGrContextFactory());
}
fTest->setReporter(&fTestReporter);
fTest->run();
diff --git a/dm/DMTestTask.h b/dm/DMTestTask.h
index a4903ee717..49a8e773b6 100644
--- a/dm/DMTestTask.h
+++ b/dm/DMTestTask.h
@@ -39,7 +39,6 @@ private:
SkString fFailure;
};
- TaskRunner* fTaskRunner;
TestReporter fTestReporter;
SkAutoTDelete<skiatest::Test> fTest;
const SkString fName;
diff --git a/dm/DMUtil.cpp b/dm/DMUtil.cpp
index 849d1bf9d8..5a849fb5f6 100644
--- a/dm/DMUtil.cpp
+++ b/dm/DMUtil.cpp
@@ -19,13 +19,19 @@ void RecordPicture(skiagm::GM* gm, SkPicture* picture, uint32_t recordFlags) {
picture->endRecording();
}
-void SetupBitmap(const SkColorType ct, skiagm::GM* gm, SkBitmap* bitmap) {
- const SkISize size = gm->getISize();
- bitmap->allocPixels(SkImageInfo::Make(size.width(), size.height(),
- ct, kPremul_SkAlphaType));
+static void setup_bitmap(SkColorType ct, int width, int height, SkBitmap* bitmap) {
+ bitmap->allocPixels(SkImageInfo::Make(width, height, ct, kPremul_SkAlphaType));
bitmap->eraseColor(0x00000000);
}
+void SetupBitmap(const SkColorType ct, skiagm::GM* gm, SkBitmap* bitmap) {
+ setup_bitmap(ct, gm->getISize().width(), gm->getISize().height(), bitmap);
+}
+
+void SetupBitmap(const SkColorType ct, SkBenchmark* bench, SkBitmap* bitmap) {
+ setup_bitmap(ct, bench->getSize().x(), bench->getSize().y(), bitmap);
+}
+
void DrawPicture(SkPicture* picture, SkBitmap* bitmap) {
SkASSERT(picture != NULL);
SkASSERT(bitmap != NULL);
diff --git a/dm/DMUtil.h b/dm/DMUtil.h
index a79164946e..faa4e39737 100644
--- a/dm/DMUtil.h
+++ b/dm/DMUtil.h
@@ -1,6 +1,7 @@
#ifndef DMUtil_DEFINED
#define DMUtil_DEFINED
+#include "SkBenchmark.h"
#include "SkBitmap.h"
#include "SkString.h"
#include "gm_expectations.h"
@@ -15,8 +16,10 @@ SkString UnderJoin(const char* a, const char* b);
// Draw gm to picture. Passes recordFlags to SkPicture::beginRecording().
void RecordPicture(skiagm::GM* gm, SkPicture* picture, uint32_t recordFlags = 0);
-// Prepare bitmap to have gm draw into it with this config.
+// Prepare bitmap to have gm or bench draw into it with this config.
+// TODO(mtklein): make SkBenchmark::getSize()/GM::getISize() const.
void SetupBitmap(const SkColorType, skiagm::GM* gm, SkBitmap* bitmap);
+void SetupBitmap(const SkColorType, SkBenchmark* bench, SkBitmap* bitmap);
// Draw picture to bitmap.
void DrawPicture(SkPicture* picture, SkBitmap* bitmap);
diff --git a/gm/gm.cpp b/gm/gm.cpp
index 82dd47637e..803874f5bc 100644
--- a/gm/gm.cpp
+++ b/gm/gm.cpp
@@ -40,7 +40,7 @@ void GM::drawBackground(SkCanvas* canvas) {
this->onDrawBackground(canvas);
}
-const char* GM::shortName() {
+const char* GM::getName() {
if (fShortName.size() == 0) {
fShortName = this->onShortName();
}
diff --git a/gm/gm.h b/gm/gm.h
index 372b781d78..90de96f7e8 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -66,7 +66,7 @@ namespace skiagm {
void drawContent(SkCanvas*);
SkISize getISize() { return this->onISize(); }
- const char* shortName();
+ const char* getName();
uint32_t getFlags() const {
return this->onGetFlags();
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index fb50b1e34e..acdc598d8c 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -938,7 +938,7 @@ public:
errors.add(ErrorCombination(kIntentionallySkipped_ErrorType));
} else {
ExpectationsSource *expectationsSource = this->fExpectationsSource.get();
- SkString nameWithExtension = make_shortname_plus_config(gm->shortName(), configName);
+ SkString nameWithExtension = make_shortname_plus_config(gm->getName(), configName);
nameWithExtension.append(".");
nameWithExtension.append(kPNG_FileExtension);
@@ -957,11 +957,11 @@ public:
* See comments above complete_bitmap() for more detail.
*/
Expectations expectations = expectationsSource->get(nameWithExtension.c_str());
- if (this->ShouldIgnoreTest(gm->shortName())) {
+ if (this->ShouldIgnoreTest(gm->getName())) {
expectations.setIgnoreFailure(true);
}
errors.add(compare_to_expectations(expectations, *actualBitmapAndDigest,
- gm->shortName(), configName, "", true));
+ gm->getName(), configName, "", true));
} else {
// If we are running without expectations, we still want to
// record the actual results.
@@ -1069,7 +1069,7 @@ public:
gm, gRec, gRec.fName, &bitmapAndDigest));
if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
- path = make_bitmap_filename(writePath, gm->shortName(), gRec.fName,
+ path = make_bitmap_filename(writePath, gm->getName(), gRec.fName,
"", bitmapAndDigest.fDigest);
errors.add(write_bitmap(path, bitmapAndDigest.fBitmap));
}
@@ -1079,7 +1079,7 @@ public:
} else {
SkAutoTUnref<SkStreamAsset> documentStream(document.detachAsStream());
if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
- path = make_filename(writePath, gm->shortName(), gRec.fName, "", "pdf");
+ path = make_filename(writePath, gm->getName(), gRec.fName, "", "pdf");
errors.add(write_document(path, documentStream));
}
@@ -1091,7 +1091,7 @@ public:
documentStream.get(), &pdfBitmap);
if (!success) {
gm_fprintf(stderr, "FAILED to render PDF for %s using renderer %s\n",
- gm->shortName(),
+ gm->getName(),
pdfRasterizers[i]->fName);
continue;
}
@@ -1105,7 +1105,7 @@ public:
gm, gRec, configName.c_str(), &bitmapAndDigest));
if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
- path = make_bitmap_filename(writePath, gm->shortName(),
+ path = make_bitmap_filename(writePath, gm->getName(),
configName.c_str(),
"", bitmapAndDigest.fDigest);
errors.add(write_bitmap(path, bitmapAndDigest.fBitmap));
@@ -1123,7 +1123,7 @@ public:
gm, gRec, gRec.fName, NULL));
if (writePath && (gRec.fFlags & kWrite_ConfigFlag)) {
- path = make_filename(writePath, gm->shortName(), gRec.fName, "", "xps");
+ path = make_filename(writePath, gm->getName(), gRec.fName, "", "xps");
errors.add(write_document(path, documentStream));
}
} else {
@@ -1160,14 +1160,14 @@ public:
return kEmpty_ErrorCombination;
}
return compare_test_results_to_reference_bitmap(
- gm->shortName(), gRec.fName, renderModeDescriptor, bitmap, &referenceBitmap);
+ gm->getName(), gRec.fName, renderModeDescriptor, bitmap, &referenceBitmap);
}
return kEmpty_ErrorCombination;
}
ErrorCombination test_pipe_playback(GM* gm, const ConfigData& gRec,
const SkBitmap& referenceBitmap, bool simulateFailure) {
- const SkString shortNamePlusConfig = make_shortname_plus_config(gm->shortName(),
+ const SkString shortNamePlusConfig = make_shortname_plus_config(gm->getName(),
gRec.fName);
ErrorCombination errors;
for (size_t i = 0; i < SK_ARRAY_COUNT(gPipeWritingFlagCombos); ++i) {
@@ -1199,7 +1199,7 @@ public:
complete_bitmap(&bitmap);
writer.endRecording();
errors.add(compare_test_results_to_reference_bitmap(
- gm->shortName(), gRec.fName, renderModeDescriptor.c_str(), bitmap,
+ gm->getName(), gRec.fName, renderModeDescriptor.c_str(), bitmap,
&referenceBitmap));
if (!errors.isEmpty()) {
break;
@@ -1211,7 +1211,7 @@ public:
ErrorCombination test_tiled_pipe_playback(GM* gm, const ConfigData& gRec,
const SkBitmap& referenceBitmap) {
- const SkString shortNamePlusConfig = make_shortname_plus_config(gm->shortName(),
+ const SkString shortNamePlusConfig = make_shortname_plus_config(gm->getName(),
gRec.fName);
ErrorCombination errors;
for (size_t i = 0; i < SK_ARRAY_COUNT(gPipeWritingFlagCombos); ++i) {
@@ -1237,7 +1237,7 @@ public:
invokeGM(gm, pipeCanvas, false, false);
complete_bitmap(&bitmap);
writer.endRecording();
- errors.add(compare_test_results_to_reference_bitmap(gm->shortName(), gRec.fName,
+ errors.add(compare_test_results_to_reference_bitmap(gm->getName(), gRec.fName,
renderModeDescriptor.c_str(),
bitmap, &referenceBitmap));
if (!errors.isEmpty()) {
@@ -1555,7 +1555,7 @@ ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co
const SkTDArray<SkScalar> &tileGridReplayScales) {
ErrorCombination errorsForAllModes;
uint32_t gmFlags = gm->getFlags();
- const SkString shortNamePlusConfig = gmmain.make_shortname_plus_config(gm->shortName(),
+ const SkString shortNamePlusConfig = gmmain.make_shortname_plus_config(gm->getName(),
compareConfig.fName);
SkPicture* pict = gmmain.generate_new_picture(gm, kNone_BbhType, 0);
@@ -1570,7 +1570,7 @@ ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co
SkBitmap bitmap;
gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap);
errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitmap(
- gm->shortName(), compareConfig.fName, renderModeDescriptor, bitmap,
+ gm->getName(), compareConfig.fName, renderModeDescriptor, bitmap,
&comparisonBitmap));
}
}
@@ -1587,7 +1587,7 @@ ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co
SkBitmap bitmap;
gmmain.generate_image_from_picture(gm, compareConfig, repict, &bitmap);
errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitmap(
- gm->shortName(), compareConfig.fName, renderModeDescriptor, bitmap,
+ gm->getName(), compareConfig.fName, renderModeDescriptor, bitmap,
&comparisonBitmap));
}
}
@@ -1602,7 +1602,7 @@ ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co
// write out their SkPictures to separate files rather than
// overwriting each other. But we should make sure it doesn't
// break anybody.
- SkString path = gmmain.make_filename(FLAGS_writePicturePath[0], gm->shortName(),
+ SkString path = gmmain.make_filename(FLAGS_writePicturePath[0], gm->getName(),
compareConfig.fName, "", pictureSuffix);
SkFILEWStream stream(path.c_str());
pict->serialize(&stream);
@@ -1622,7 +1622,7 @@ ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co
SkBitmap bitmap;
gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap);
errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitmap(
- gm->shortName(), compareConfig.fName, renderModeDescriptor, bitmap,
+ gm->getName(), compareConfig.fName, renderModeDescriptor, bitmap,
&comparisonBitmap));
}
}
@@ -1657,7 +1657,7 @@ ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co
gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap,
replayScale /*, true */);
errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitmap(
- gm->shortName(), compareConfig.fName, renderModeDescriptor.c_str(), bitmap,
+ gm->getName(), compareConfig.fName, renderModeDescriptor.c_str(), bitmap,
&comparisonBitmap));
}
}
@@ -1699,7 +1699,7 @@ ErrorCombination run_multiple_configs(GMMain &gmmain, GM *gm,
for (int i = 0; i < configs.count(); i++) {
ConfigData config = gRec[configs[i]];
- const SkString shortNamePlusConfig = gmmain.make_shortname_plus_config(gm->shortName(),
+ const SkString shortNamePlusConfig = gmmain.make_shortname_plus_config(gm->getName(),
config.fName);
// Skip any tests that we don't even need to try.
@@ -2316,7 +2316,7 @@ int tool_main(int argc, char** argv) {
moduloStr.printf("[%d.%d] ", gmIndex, moduloDivisor);
}
- const char* shortName = gm->shortName();
+ const char* shortName = gm->getName();
if (SkCommandLineFlags::ShouldSkip(FLAGS_match, shortName)) {
continue;
diff --git a/gyp/bench.gyp b/gyp/bench.gyp
index cd0cdc73c1..c2337f6bba 100644
--- a/gyp/bench.gyp
+++ b/gyp/bench.gyp
@@ -8,11 +8,6 @@
{
'target_name': 'bench',
'type': 'executable',
- 'include_dirs' : [
- '../src/core',
- '../src/effects',
- '../src/utils',
- ],
'dependencies': [
'skia_lib.gyp:skia_lib',
'bench_timer',
@@ -20,87 +15,10 @@
'jsoncpp.gyp:jsoncpp',
],
'sources': [
- '../bench/AAClipBench.cpp',
- '../bench/BicubicBench.cpp',
- '../bench/BitmapBench.cpp',
- '../bench/BitmapRectBench.cpp',
- '../bench/BitmapScaleBench.cpp',
- '../bench/BlurBench.cpp',
- '../bench/BlurImageFilterBench.cpp',
- '../bench/BlurRectBench.cpp',
- '../bench/BlurRoundRectBench.cpp',
- '../bench/ChartBench.cpp',
- '../bench/ChecksumBench.cpp',
- '../bench/ChromeBench.cpp',
- '../bench/CmapBench.cpp',
- '../bench/ColorFilterBench.cpp',
- '../bench/ColorPrivBench.cpp',
- '../bench/CoverageBench.cpp',
- '../bench/DashBench.cpp',
- '../bench/DecodeBench.cpp',
- '../bench/DeferredCanvasBench.cpp',
- '../bench/DeferredSurfaceCopyBench.cpp',
- '../bench/DisplacementBench.cpp',
- '../bench/FSRectBench.cpp',
- '../bench/FontCacheBench.cpp',
- '../bench/FontScalerBench.cpp',
- '../bench/GameBench.cpp',
- '../bench/GrMemoryPoolBench.cpp',
- '../bench/GrResourceCacheBench.cpp',
- '../bench/GradientBench.cpp',
- '../bench/HairlinePathBench.cpp',
- '../bench/ImageCacheBench.cpp',
- '../bench/ImageDecodeBench.cpp',
- '../bench/InterpBench.cpp',
- '../bench/LightingBench.cpp',
- '../bench/LineBench.cpp',
- '../bench/MagnifierBench.cpp',
- '../bench/MathBench.cpp',
- '../bench/Matrix44Bench.cpp',
- '../bench/MatrixBench.cpp',
- '../bench/MatrixConvolutionBench.cpp',
- '../bench/MemoryBench.cpp',
- '../bench/MemsetBench.cpp',
- '../bench/MergeBench.cpp',
- '../bench/MorphologyBench.cpp',
- '../bench/MutexBench.cpp',
- '../bench/PathBench.cpp',
- '../bench/PathIterBench.cpp',
- '../bench/PathUtilsBench.cpp',
- '../bench/PerlinNoiseBench.cpp',
- '../bench/PicturePlaybackBench.cpp',
- '../bench/PictureRecordBench.cpp',
- '../bench/PremulAndUnpremulAlphaOpsBench.cpp',
- '../bench/QuadTreeBench.cpp',
- '../bench/RTreeBench.cpp',
- '../bench/ReadPixBench.cpp',
- '../bench/RectBench.cpp',
- '../bench/RectoriBench.cpp',
- '../bench/RefCntBench.cpp',
- '../bench/RegionBench.cpp',
- '../bench/RegionContainBench.cpp',
- '../bench/RepeatTileBench.cpp',
- '../bench/ScalarBench.cpp',
- '../bench/ShaderMaskBench.cpp',
- '../bench/SkipZeroesBench.cpp',
- '../bench/SortBench.cpp',
- '../bench/StackBench.cpp',
- '../bench/StrokeBench.cpp',
- '../bench/TableBench.cpp',
- '../bench/TextBench.cpp',
- '../bench/TileBench.cpp',
- '../bench/VertBench.cpp',
- '../bench/WritePixelsBench.cpp',
- '../bench/WriterBench.cpp',
- '../bench/XfermodeBench.cpp',
-
'../bench/SkBenchLogger.cpp',
'../bench/SkBenchLogger.h',
- '../bench/SkBenchmark.cpp',
- '../bench/SkBenchmark.h',
'../bench/SkGMBench.cpp',
'../bench/SkGMBench.h',
-
'../bench/benchmain.cpp',
],
'conditions': [
@@ -116,6 +34,7 @@
],
],
'includes': [
+ 'bench.gypi',
'gmslides.gypi',
],
},
diff --git a/gyp/bench.gypi b/gyp/bench.gypi
new file mode 100644
index 0000000000..2d934d8366
--- /dev/null
+++ b/gyp/bench.gypi
@@ -0,0 +1,88 @@
+{
+ 'include_dirs': [
+ '../src/core',
+ '../src/effects',
+ '../src/utils',
+ ],
+ 'dependencies': [
+ 'skia_lib.gyp:skia_lib',
+ ],
+ 'sources': [
+ '../bench/SkBenchmark.cpp',
+ '../bench/SkBenchmark.h',
+
+ '../bench/AAClipBench.cpp',
+ '../bench/BicubicBench.cpp',
+ '../bench/BitmapBench.cpp',
+ '../bench/BitmapRectBench.cpp',
+ '../bench/BitmapScaleBench.cpp',
+ '../bench/BlurBench.cpp',
+ '../bench/BlurImageFilterBench.cpp',
+ '../bench/BlurRectBench.cpp',
+ '../bench/BlurRoundRectBench.cpp',
+ '../bench/ChartBench.cpp',
+ '../bench/ChecksumBench.cpp',
+ '../bench/ChromeBench.cpp',
+ '../bench/CmapBench.cpp',
+ '../bench/ColorFilterBench.cpp',
+ '../bench/ColorPrivBench.cpp',
+ '../bench/CoverageBench.cpp',
+ '../bench/DashBench.cpp',
+ '../bench/DecodeBench.cpp',
+ '../bench/DeferredCanvasBench.cpp',
+ '../bench/DeferredSurfaceCopyBench.cpp',
+ '../bench/DisplacementBench.cpp',
+ '../bench/FSRectBench.cpp',
+ '../bench/FontCacheBench.cpp',
+ '../bench/FontScalerBench.cpp',
+ '../bench/GameBench.cpp',
+ '../bench/GrMemoryPoolBench.cpp',
+ '../bench/GrResourceCacheBench.cpp',
+ '../bench/GradientBench.cpp',
+ '../bench/HairlinePathBench.cpp',
+ '../bench/ImageCacheBench.cpp',
+ '../bench/ImageDecodeBench.cpp',
+ '../bench/InterpBench.cpp',
+ '../bench/LightingBench.cpp',
+ '../bench/LineBench.cpp',
+ '../bench/MagnifierBench.cpp',
+ '../bench/MathBench.cpp',
+ '../bench/Matrix44Bench.cpp',
+ '../bench/MatrixBench.cpp',
+ '../bench/MatrixConvolutionBench.cpp',
+ '../bench/MemoryBench.cpp',
+ '../bench/MemsetBench.cpp',
+ '../bench/MergeBench.cpp',
+ '../bench/MorphologyBench.cpp',
+ '../bench/MutexBench.cpp',
+ '../bench/PathBench.cpp',
+ '../bench/PathIterBench.cpp',
+ '../bench/PathUtilsBench.cpp',
+ '../bench/PerlinNoiseBench.cpp',
+ '../bench/PicturePlaybackBench.cpp',
+ '../bench/PictureRecordBench.cpp',
+ '../bench/PremulAndUnpremulAlphaOpsBench.cpp',
+ '../bench/QuadTreeBench.cpp',
+ '../bench/RTreeBench.cpp',
+ '../bench/ReadPixBench.cpp',
+ '../bench/RectBench.cpp',
+ '../bench/RectoriBench.cpp',
+ '../bench/RefCntBench.cpp',
+ '../bench/RegionBench.cpp',
+ '../bench/RegionContainBench.cpp',
+ '../bench/RepeatTileBench.cpp',
+ '../bench/ScalarBench.cpp',
+ '../bench/ShaderMaskBench.cpp',
+ '../bench/SkipZeroesBench.cpp',
+ '../bench/SortBench.cpp',
+ '../bench/StackBench.cpp',
+ '../bench/StrokeBench.cpp',
+ '../bench/TableBench.cpp',
+ '../bench/TextBench.cpp',
+ '../bench/TileBench.cpp',
+ '../bench/VertBench.cpp',
+ '../bench/WritePixelsBench.cpp',
+ '../bench/WriterBench.cpp',
+ '../bench/XfermodeBench.cpp',
+ ],
+}
diff --git a/gyp/dm.gyp b/gyp/dm.gyp
index 55f5f9bd14..db509938db 100644
--- a/gyp/dm.gyp
+++ b/gyp/dm.gyp
@@ -7,6 +7,7 @@
'target_name': 'dm',
'type': 'executable',
'include_dirs': [
+ '../bench',
'../dm',
'../gm',
'../tests',
@@ -20,12 +21,14 @@
'../tools',
],
'includes': [
+ 'bench.gypi',
'gmslides.gypi',
'pathops_unittest.gypi',
'tests.gypi',
],
'sources': [
'../dm/DM.cpp',
+ '../dm/DMBenchTask.cpp',
'../dm/DMCpuTask.cpp',
'../dm/DMExpectationsTask.cpp',
'../dm/DMGpuTask.cpp',
diff --git a/samplecode/GMSampleView.h b/samplecode/GMSampleView.h
index 6791c344c7..40d11abce4 100644
--- a/samplecode/GMSampleView.h
+++ b/samplecode/GMSampleView.h
@@ -36,7 +36,7 @@ protected:
virtual bool onQuery(SkEvent* evt) {
if (SampleCode::TitleQ(*evt)) {
SkString name("GM:");
- name.append(fGM->shortName());
+ name.append(fGM->getName());
SampleCode::TitleR(evt, name.c_str());
return true;
}