Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(540)

Side by Side Diff: bench/SKPBench.cpp

Issue 1427533002: Flush GrContext between benchmark draw loops (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Check for SK_SUPPORT_GPU Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | samplecode/SampleApp.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SKPBench.h" 8 #include "SKPBench.h"
9 #include "SkCommandLineFlags.h" 9 #include "SkCommandLineFlags.h"
10 #include "SkMultiPictureDraw.h" 10 #include "SkMultiPictureDraw.h"
11 #include "SkSurface.h" 11 #include "SkSurface.h"
12 12
13 #if SK_SUPPORT_GPU
14 #include "GrContext.h"
15 #endif
16
13 // These CPU tile sizes are not good per se, but they are similar to what Chrome uses. 17 // These CPU tile sizes are not good per se, but they are similar to what Chrome uses.
14 DEFINE_int32(CPUbenchTileW, 256, "Tile width used for CPU SKP playback."); 18 DEFINE_int32(CPUbenchTileW, 256, "Tile width used for CPU SKP playback.");
15 DEFINE_int32(CPUbenchTileH, 256, "Tile height used for CPU SKP playback."); 19 DEFINE_int32(CPUbenchTileH, 256, "Tile height used for CPU SKP playback.");
16 20
17 DEFINE_int32(GPUbenchTileW, 1600, "Tile width used for GPU SKP playback."); 21 DEFINE_int32(GPUbenchTileW, 1600, "Tile width used for GPU SKP playback.");
18 DEFINE_int32(GPUbenchTileH, 512, "Tile height used for GPU SKP playback."); 22 DEFINE_int32(GPUbenchTileH, 512, "Tile height used for GPU SKP playback.");
19 23
20 SKPBench::SKPBench(const char* name, const SkPicture* pic, const SkIRect& clip, SkScalar scale, 24 SKPBench::SKPBench(const char* name, const SkPicture* pic, const SkIRect& clip, SkScalar scale,
21 bool useMultiPictureDraw, bool doLooping) 25 bool useMultiPictureDraw, bool doLooping)
22 : fPic(SkRef(pic)) 26 : fPic(SkRef(pic))
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 SkASSERT(fDoLooping || 1 == loops); 112 SkASSERT(fDoLooping || 1 == loops);
109 if (fUseMultiPictureDraw) { 113 if (fUseMultiPictureDraw) {
110 for (int i = 0; i < loops; i++) { 114 for (int i = 0; i < loops; i++) {
111 this->drawMPDPicture(); 115 this->drawMPDPicture();
112 } 116 }
113 } else { 117 } else {
114 for (int i = 0; i < loops; i++) { 118 for (int i = 0; i < loops; i++) {
115 this->drawPicture(); 119 this->drawPicture();
116 } 120 }
117 } 121 }
122 #if SK_SUPPORT_GPU
123 // Ensure the GrContext doesn't batch across draw loops.
124 if (GrContext* context = canvas->getGrContext()) {
125 context->flush();
126 }
127 #endif
118 } 128 }
119 129
120 void SKPBench::drawMPDPicture() { 130 void SKPBench::drawMPDPicture() {
121 SkMultiPictureDraw mpd; 131 SkMultiPictureDraw mpd;
122 132
123 for (int j = 0; j < fTileRects.count(); ++j) { 133 for (int j = 0; j < fTileRects.count(); ++j) {
124 SkMatrix trans; 134 SkMatrix trans;
125 trans.setTranslate(-fTileRects[j].fLeft/fScale, 135 trans.setTranslate(-fTileRects[j].fLeft/fScale,
126 -fTileRects[j].fTop/fScale); 136 -fTileRects[j].fTop/fScale);
127 mpd.add(fSurfaces[j]->getCanvas(), fPic, &trans); 137 mpd.add(fSurfaces[j]->getCanvas(), fPic, &trans);
(...skipping 10 matching lines...) Expand all
138 for (int j = 0; j < fTileRects.count(); ++j) { 148 for (int j = 0; j < fTileRects.count(); ++j) {
139 const SkMatrix trans = SkMatrix::MakeTrans(-fTileRects[j].fLeft / fScale , 149 const SkMatrix trans = SkMatrix::MakeTrans(-fTileRects[j].fLeft / fScale ,
140 -fTileRects[j].fTop / fScale) ; 150 -fTileRects[j].fTop / fScale) ;
141 fSurfaces[j]->getCanvas()->drawPicture(fPic, &trans, nullptr); 151 fSurfaces[j]->getCanvas()->drawPicture(fPic, &trans, nullptr);
142 } 152 }
143 153
144 for (int j = 0; j < fTileRects.count(); ++j) { 154 for (int j = 0; j < fTileRects.count(); ++j) {
145 fSurfaces[j]->getCanvas()->flush(); 155 fSurfaces[j]->getCanvas()->flush();
146 } 156 }
147 } 157 }
OLDNEW
« no previous file with comments | « no previous file | samplecode/SampleApp.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698