aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/Benchmark.h
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2015-09-30 12:11:07 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-30 12:11:07 -0700
commit8a6697af95b340aad6dee7e6228048fa305c1e59 (patch)
tree08b4c39b0bc264940ff65b97a83c95d3d9bc1bbf /bench/Benchmark.h
parent7fac5af5e9310826721ff416bdbe71294d607b2a (diff)
Fix for nexus 5 crashing in GL benches
GLBenches do not expect gl state to change between onPerCanvasPreDraw and *PostDraw, but we do a clear and sometimes we clear as draw. This causes us to bind vertex objects / programs / etc. This change creates two new virtual methods which are called right before and immediately after timing. BUG=skia: Review URL: https://codereview.chromium.org/1379853003
Diffstat (limited to 'bench/Benchmark.h')
-rw-r--r--bench/Benchmark.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/bench/Benchmark.h b/bench/Benchmark.h
index 751172685e..06d42e81d4 100644
--- a/bench/Benchmark.h
+++ b/bench/Benchmark.h
@@ -70,13 +70,17 @@ public:
// Call before draw, allows the benchmark to do setup work outside of the
// timer. When a benchmark is repeatedly drawn, this should be called once
// before the initial draw.
- void preDraw();
+ void delayedSetup();
// Called once before and after a series of draw calls to a single canvas.
// The setup/break down in these calls is not timed.
void perCanvasPreDraw(SkCanvas*);
void perCanvasPostDraw(SkCanvas*);
+ // Called just before and after each call to draw(). Not timed.
+ void preDraw(SkCanvas*);
+ void postDraw(SkCanvas*);
+
// Bench framework can tune loops to be large enough for stable timing.
void draw(const int loops, SkCanvas*);
@@ -112,9 +116,11 @@ protected:
virtual const char* onGetName() = 0;
virtual const char* onGetUniqueName() { return this->onGetName(); }
- virtual void onPreDraw() {}
+ virtual void onDelayedSetup() {}
virtual void onPerCanvasPreDraw(SkCanvas*) {}
virtual void onPerCanvasPostDraw(SkCanvas*) {}
+ virtual void onPreDraw(SkCanvas*) {}
+ virtual void onPostDraw(SkCanvas*) {}
// Each bench should do its main work in a loop like this:
// for (int i = 0; i < loops; i++) { <work here> }
virtual void onDraw(const int loops, SkCanvas*) = 0;