diff options
-rw-r--r-- | bench/RectBench.cpp | 26 | ||||
-rw-r--r-- | tools/VisualBench/VisualLightweightBenchModule.cpp | 21 | ||||
-rw-r--r-- | tools/VisualBench/VisualLightweightBenchModule.h | 1 |
3 files changed, 39 insertions, 9 deletions
diff --git a/bench/RectBench.cpp b/bench/RectBench.cpp index f793c8ff57..23fb7c50c2 100644 --- a/bench/RectBench.cpp +++ b/bench/RectBench.cpp @@ -114,6 +114,30 @@ private: typedef RectBench INHERITED; }; +class TransparentRectBench : public RectBench { +public: + TransparentRectBench() : INHERITED(1, 0) {} + +protected: + void setupPaint(SkPaint* paint) override { + this->INHERITED::setupPaint(paint); + // draw non opaque rect + paint->setAlpha(0x80); + } + + const char* onGetName() override { + fName.set(this->INHERITED::onGetName()); + fName.prepend("transparent_"); + return fName.c_str(); + } + +private: + SkString fName; + + typedef RectBench INHERITED; +}; + + class OvalBench : public RectBench { public: OvalBench(int shift, int stroke = 0) : RectBench(shift, stroke) {} @@ -269,6 +293,8 @@ DEF_BENCH(return new PointsBench(SkCanvas::kPolygon_PointMode, "polygon");) DEF_BENCH(return new SrcModeRectBench();) +DEF_BENCH(return new TransparentRectBench();) + /* init the blitmask bench */ DEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, diff --git a/tools/VisualBench/VisualLightweightBenchModule.cpp b/tools/VisualBench/VisualLightweightBenchModule.cpp index 6f21c68041..d5e4e5b8b6 100644 --- a/tools/VisualBench/VisualLightweightBenchModule.cpp +++ b/tools/VisualBench/VisualLightweightBenchModule.cpp @@ -47,16 +47,26 @@ static SkString humanize(double ms) { #define HUMANIZE(time) humanize(time).c_str() -// A trivial bench to warm up the gpu +// We draw a big nonAA path to warmup the gpu / cpu class WarmupBench : public Benchmark { public: + WarmupBench() { + make_path(fPath); + } private: + static void make_path(SkPath& path) { + #include "BigPathBench.inc" + } const char* onGetName() override { return "warmupbench"; } void onDraw(const int loops, SkCanvas* canvas) override { + SkPaint paint; + paint.setStyle(SkPaint::kStroke_Style); + paint.setStrokeWidth(2); for (int i = 0; i < loops; i++) { - sk_tool_utils::draw_checkerboard(canvas, 0xffffffff, 0xffc6c3c6, 10); + canvas->drawPath(fPath, paint); } } + SkPath fPath; }; VisualLightweightBenchModule::VisualLightweightBenchModule(VisualBench* owner) @@ -143,6 +153,7 @@ void VisualLightweightBenchModule::printStats() { bool VisualLightweightBenchModule::advanceRecordIfNecessary(SkCanvas* canvas) { if (!fBenchmark && fState == kWarmup_State) { + fOwner->clear(canvas, SK_ColorWHITE, 2); fBenchmark.reset(new WarmupBench); return true; } @@ -259,11 +270,6 @@ void VisualLightweightBenchModule::resetTimingState() { fOwner->reset(); } -void VisualLightweightBenchModule::scaleLoops(double elapsedMs) { - // Scale back the number of loops - fLoops = (int)ceil(fLoops * FLAGS_loopMs / elapsedMs); -} - inline void VisualLightweightBenchModule::tuneLoops() { if (1 << 30 == fLoops) { // We're about to wrap. Something's wrong with the bench. @@ -272,7 +278,6 @@ inline void VisualLightweightBenchModule::tuneLoops() { } else { double elapsedMs = this->elapsed(); if (elapsedMs > FLAGS_loopMs) { - this->scaleLoops(elapsedMs); this->nextState(kPreWarmTimingPerCanvasPreDraw_State); } else { fLoops *= 2; diff --git a/tools/VisualBench/VisualLightweightBenchModule.h b/tools/VisualBench/VisualLightweightBenchModule.h index 0eb024b181..1a30875c61 100644 --- a/tools/VisualBench/VisualLightweightBenchModule.h +++ b/tools/VisualBench/VisualLightweightBenchModule.h @@ -71,7 +71,6 @@ private: inline void nextState(State); void perCanvasPreDraw(SkCanvas*, State); void preWarm(State nextState); - void scaleLoops(double elapsedMs); inline void tuneLoops(); inline void timing(SkCanvas*); inline double elapsed(); |