Index: bench/SKPBench.cpp |
diff --git a/bench/SKPBench.cpp b/bench/SKPBench.cpp |
index db55b45f435601bad64d2c371273549a4c6e7f9a..9b3ef84dc76d42d3993fd9950d7206a2c847dbc8 100644 |
--- a/bench/SKPBench.cpp |
+++ b/bench/SKPBench.cpp |
@@ -14,6 +14,10 @@ |
#include "GrContext.h" |
#endif |
+#include <stdlib.h> |
+ |
+DEFINE_bool(tileSKP, true, "Tile skp benches?"); |
+ |
// These CPU tile sizes are not good per se, but they are similar to what Chrome uses. |
DEFINE_int32(CPUbenchTileW, 256, "Tile width used for CPU SKP playback."); |
DEFINE_int32(CPUbenchTileH, 256, "Tile height used for CPU SKP playback."); |
@@ -31,6 +35,11 @@ SKPBench::SKPBench(const char* name, const SkPicture* pic, const SkIRect& clip, |
, fDoLooping(doLooping) { |
fUniqueName.printf("%s_%.2g", name, scale); // Scale makes this unqiue for perf.skia.org traces. |
if (useMultiPictureDraw) { |
+ if (!FLAGS_tileSKP) { |
+ SkDebugf("Tried to use SkMultiPictureDraw with a non-tiled SKP. Aborting. " |
+ "(Please use --mpd false.)"); |
+ exit(-1); |
+ } |
fUniqueName.append("_mpd"); |
} |
} |
@@ -50,6 +59,10 @@ const char* SKPBench::onGetUniqueName() { |
} |
void SKPBench::onPerCanvasPreDraw(SkCanvas* canvas) { |
+ if (!FLAGS_tileSKP) { |
+ return; |
+ } |
+ |
SkIRect bounds; |
SkAssertResult(canvas->getClipDeviceBounds(&bounds)); |
@@ -87,6 +100,10 @@ void SKPBench::onPerCanvasPreDraw(SkCanvas* canvas) { |
} |
void SKPBench::onPerCanvasPostDraw(SkCanvas* canvas) { |
+ if (!FLAGS_tileSKP) { |
+ return; |
+ } |
+ |
// Draw the last set of tiles into the master canvas in case we're |
// saving the images |
for (int i = 0; i < fTileRects.count(); ++i) { |
@@ -110,21 +127,28 @@ SkIPoint SKPBench::onGetSize() { |
void SKPBench::onDraw(int loops, SkCanvas* canvas) { |
SkASSERT(fDoLooping || 1 == loops); |
- if (fUseMultiPictureDraw) { |
- for (int i = 0; i < loops; i++) { |
+ while (1) { |
+ if (!FLAGS_tileSKP) { |
+ this->drawPicture(canvas); |
+ } else if (fUseMultiPictureDraw) { |
this->drawMPDPicture(); |
+ } else { |
+ this->drawPictureTiled(); |
} |
- } else { |
- for (int i = 0; i < loops; i++) { |
- this->drawPicture(); |
+ if (0 == --loops) { |
+ break; |
} |
- } |
#if SK_SUPPORT_GPU |
- // Ensure the GrContext doesn't batch across draw loops. |
- if (GrContext* context = canvas->getGrContext()) { |
- context->flush(); |
- } |
+ // Ensure the GrContext doesn't batch across draw loops. |
bsalomon
2015/12/22 17:04:25
It seems like now we will not flush after the last
Chris Dalton
2015/12/22 18:47:05
Oops :-\ the previous code was wrong.
|
+ if (GrContext* context = canvas->getGrContext()) { |
+ context->flush(); |
+ } |
#endif |
+ } |
+} |
+ |
+void SKPBench::drawPicture(SkCanvas* canvas) { |
+ canvas->drawPicture(fPic); |
} |
void SKPBench::drawMPDPicture() { |
@@ -144,7 +168,7 @@ void SKPBench::drawMPDPicture() { |
} |
} |
-void SKPBench::drawPicture() { |
+void SKPBench::drawPictureTiled() { |
for (int j = 0; j < fTileRects.count(); ++j) { |
const SkMatrix trans = SkMatrix::MakeTrans(-fTileRects[j].fLeft / fScale, |
-fTileRects[j].fTop / fScale); |