aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2015-09-24 12:42:02 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-24 12:42:02 -0700
commit8db65a6d0c60d0e31eadc64d427f6e7f050e1140 (patch)
treee6d090fa3eae94e918ec7a18022064a4c66d241a
parent89438a1dcec1b4ccebc1c2a20e348d14b8b6ff0d (diff)
stop scaling loops and improve warmup bench
-rw-r--r--bench/RectBench.cpp26
-rw-r--r--tools/VisualBench/VisualLightweightBenchModule.cpp21
-rw-r--r--tools/VisualBench/VisualLightweightBenchModule.h1
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();