| Index: bench/benchmain.cpp
|
| diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp
|
| index ba9bfcac56d4e1b82bfe44872d5e256a2ab18ba6..6eea11fc149a0d763df45f0cced79757a8501fbc 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) {
|
|
|