diff options
author | joshualitt <joshualitt@chromium.org> | 2015-09-30 12:11:07 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-30 12:11:07 -0700 |
commit | 8a6697af95b340aad6dee7e6228048fa305c1e59 (patch) | |
tree | 08b4c39b0bc264940ff65b97a83c95d3d9bc1bbf /bench/Benchmark.h | |
parent | 7fac5af5e9310826721ff416bdbe71294d607b2a (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.h | 10 |
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; |