diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-02-24 23:25:49 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-02-24 23:25:49 +0000 |
commit | 575d9cd27032f6a43d30d9ddb4bc5b2f8091ba5d (patch) | |
tree | ba00279ea56d5bd46ac72dfc810d00706c8355fe /bench | |
parent | d85b822616d609b7056154489176910cbd9f81a9 (diff) |
Simplify GM-as-bench code.
Tested: bench --match GM
running bench [870 540] GM:convex_poly_clip
BUG=skia:
R=bsalomon@google.com, mtklein@google.com, brian@thesalomons.net
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/178893002
git-svn-id: http://skia.googlecode.com/svn/trunk@13573 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench')
-rw-r--r-- | bench/benchmain.cpp | 68 |
1 files changed, 15 insertions, 53 deletions
diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp index ba9bfcac56..6eea11fc14 100644 --- a/bench/benchmain.cpp +++ b/bench/benchmain.cpp @@ -35,53 +35,6 @@ class GrContext; #include <limits> -// Note that ~SkTDArray is not virtual. This inherits privately to bar using this as a SkTDArray*. -class RefCntArray : private SkTDArray<SkRefCnt*> { -public: - SkRefCnt** append() { return this->INHERITED::append(); } - ~RefCntArray() { this->unrefAll(); } -private: - typedef SkTDArray<SkRefCnt*> INHERITED; -}; - -class GMBenchFactory : public SkBenchmarkFactory { -public: - GMBenchFactory(const skiagm::GMRegistry* gmreg) - : fGMFactory(gmreg->factory()) { - fSelfRegistry = SkNEW_ARGS(BenchRegistry, (this)); - } - - virtual ~GMBenchFactory() { SkDELETE(fSelfRegistry); } - - virtual SkBenchmark* operator()() const SK_OVERRIDE { - skiagm::GM* gm = fGMFactory(NULL); - gm->setMode(skiagm::GM::kBench_Mode); - return SkNEW_ARGS(SkGMBench, (gm)); - } - -private: - skiagm::GMRegistry::Factory fGMFactory; - BenchRegistry* fSelfRegistry; -}; - -static void register_gm_benches() { - static bool gOnce; - static RefCntArray gGMBenchFactories; - - if (!gOnce) { - const skiagm::GMRegistry* gmreg = skiagm::GMRegistry::Head(); - while (gmreg) { - skiagm::GM* gm = gmreg->factory()(NULL); - if (NULL != gm && skiagm::GM::kAsBench_Flag & gm->getFlags()) { - *gGMBenchFactories.append() = SkNEW_ARGS(GMBenchFactory, (gmreg)); - } - SkDELETE(gm); - gmreg = gmreg->next(); - } - gOnce = true; - } -} - enum BenchMode { kNormal_BenchMode, kDeferred_BenchMode, @@ -99,19 +52,29 @@ static const char kDefaultsConfigStr[] = "defaults"; class Iter { public: - Iter() : fBench(BenchRegistry::Head()) {} + Iter() : fBenches(BenchRegistry::Head()), fGMs(skiagm::GMRegistry::Head()) {} SkBenchmark* next() { - if (fBench) { - BenchRegistry::Factory f = fBench->factory(); - fBench = fBench->next(); + if (fBenches) { + BenchRegistry::Factory f = fBenches->factory(); + fBenches = fBenches->next(); return (*f)(); } + + while (fGMs) { + SkAutoTDelete<skiagm::GM> gm(fGMs->factory()(NULL)); + fGMs = fGMs->next(); + if (gm->getFlags() & skiagm::GM::kAsBench_Flag) { + return SkNEW_ARGS(SkGMBench, (gm.detach())); + } + } + return NULL; } private: - const BenchRegistry* fBench; + const BenchRegistry* fBenches; + const skiagm::GMRegistry* fGMs; }; class AutoPrePostDraw { @@ -317,7 +280,6 @@ static bool HasConverged(double prevPerLoop, double currPerLoop, double currRaw) int tool_main(int argc, char** argv); int tool_main(int argc, char** argv) { - register_gm_benches(); SkCommandLineFlags::Parse(argc, argv); #if SK_ENABLE_INST_COUNT if (FLAGS_leaks) { |