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

Side by Side Diff: src/utils/debugger/SkDebugCanvas.cpp

Issue 177423013: Add cull rect visualization to debugger (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 9 months 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 | Annotate | Revision Log
« no previous file with comments | « src/utils/debugger/SkDebugCanvas.h ('k') | src/utils/debugger/SkDrawCommand.h » ('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 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 190
191 protected: 191 protected:
192 SkCanvas* fCanvas; 192 SkCanvas* fCanvas;
193 193
194 private: 194 private:
195 typedef SkCanvas::ClipVisitor INHERITED; 195 typedef SkCanvas::ClipVisitor INHERITED;
196 }; 196 };
197 197
198 // set up the saveLayer commands so that the active ones 198 // set up the saveLayer commands so that the active ones
199 // return true in their 'active' method 199 // return true in their 'active' method
200 void SkDebugCanvas::markActiveSaveLayers(int index) { 200 void SkDebugCanvas::markActiveCommands(int index) {
201 SkTDArray<SkDrawCommand*> activeLayers; 201 fActiveLayers.rewind();
202 fActiveCulls.rewind();
202 203
203 for (int i = 0; i < fCommandVector.count(); ++i) { 204 for (int i = 0; i < fCommandVector.count(); ++i) {
204 fCommandVector[i]->setActive(false); 205 fCommandVector[i]->setActive(false);
205 } 206 }
206 207
207 for (int i = 0; i < index; ++i) { 208 for (int i = 0; i < index; ++i) {
208 SkDrawCommand::Action result = fCommandVector[i]->action(); 209 SkDrawCommand::Action result = fCommandVector[i]->action();
209 if (SkDrawCommand::kPush_Action == result) { 210 if (SkDrawCommand::kPushLayer_Action == result) {
210 activeLayers.push(fCommandVector[i]); 211 fActiveLayers.push(fCommandVector[i]);
211 } else if (SkDrawCommand::kPop_Action == result) { 212 } else if (SkDrawCommand::kPopLayer_Action == result) {
212 activeLayers.pop(); 213 fActiveLayers.pop();
214 } else if (SkDrawCommand::kPushCull_Action == result) {
215 fActiveCulls.push(fCommandVector[i]);
216 } else if (SkDrawCommand::kPopCull_Action == result) {
217 fActiveCulls.pop();
213 } 218 }
214 } 219 }
215 220
216 for (int i = 0; i < activeLayers.count(); ++i) { 221 for (int i = 0; i < fActiveLayers.count(); ++i) {
217 activeLayers[i]->setActive(true); 222 fActiveLayers[i]->setActive(true);
223 }
224
225 for (int i = 0; i < fActiveCulls.count(); ++i) {
226 fActiveCulls[i]->setActive(true);
218 } 227 }
219 } 228 }
220 229
221 void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) { 230 void SkDebugCanvas::drawTo(SkCanvas* canvas, int index) {
222 SkASSERT(!fCommandVector.isEmpty()); 231 SkASSERT(!fCommandVector.isEmpty());
223 SkASSERT(index < fCommandVector.count()); 232 SkASSERT(index < fCommandVector.count());
224 int i = 0; 233 int i = 0;
225 234
226 // This only works assuming the canvas and device are the same ones that 235 // This only works assuming the canvas and device are the same ones that
227 // were previously drawn into because they need to preserve all saves 236 // were previously drawn into because they need to preserve all saves
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 } 270 }
262 271
263 if (fTexOverrideFilter != canvas->getDrawFilter()) { 272 if (fTexOverrideFilter != canvas->getDrawFilter()) {
264 canvas->setDrawFilter(fTexOverrideFilter); 273 canvas->setDrawFilter(fTexOverrideFilter);
265 } 274 }
266 } else { 275 } else {
267 canvas->setDrawFilter(NULL); 276 canvas->setDrawFilter(NULL);
268 } 277 }
269 278
270 if (fMegaVizMode) { 279 if (fMegaVizMode) {
271 this->markActiveSaveLayers(index); 280 this->markActiveCommands(index);
272 } 281 }
273 282
274 for (; i <= index; i++) { 283 for (; i <= index; i++) {
275 if (i == index && fFilter) { 284 if (i == index && fFilter) {
276 SkPaint p; 285 SkPaint p;
277 p.setColor(0xAAFFFFFF); 286 p.setColor(0xAAFFFFFF);
278 canvas->save(); 287 canvas->save();
279 canvas->resetMatrix(); 288 canvas->resetMatrix();
280 SkRect mask; 289 SkRect mask;
281 mask.set(SkIntToScalar(0), SkIntToScalar(0), 290 mask.set(SkIntToScalar(0), SkIntToScalar(0),
282 SkIntToScalar(fWidth), SkIntToScalar(fHeight)); 291 SkIntToScalar(fWidth), SkIntToScalar(fHeight));
283 canvas->clipRect(mask, SkRegion::kReplace_Op, false); 292 canvas->clipRect(mask, SkRegion::kReplace_Op, false);
284 canvas->drawRectCoords(SkIntToScalar(0), SkIntToScalar(0), 293 canvas->drawRectCoords(SkIntToScalar(0), SkIntToScalar(0),
285 SkIntToScalar(fWidth), SkIntToScalar(fHeight), p); 294 SkIntToScalar(fWidth), SkIntToScalar(fHeight), p);
286 canvas->restore(); 295 canvas->restore();
287 } 296 }
288 297
289 if (fCommandVector[i]->isVisible()) { 298 if (fCommandVector[i]->isVisible()) {
290 if (fMegaVizMode && fCommandVector[i]->active()) { 299 if (fMegaVizMode && fCommandVector[i]->active()) {
291 // All active saveLayers get replaced with saves so all draws go to the 300 // "active" commands execute their visualization behaviors:
292 // visible canvas 301 // All active saveLayers get replaced with saves so all draw s go to the
293 canvas->save(); 302 // visible canvas.
294 ++fOutstandingSaveCount; 303 // All active culls draw their cull box
304 fCommandVector[i]->vizExecute(canvas);
295 } else { 305 } else {
296 fCommandVector[i]->execute(canvas); 306 fCommandVector[i]->execute(canvas);
297 fCommandVector[i]->trackSaveState(&fOutstandingSaveCount);
298 } 307 }
308
309 fCommandVector[i]->trackSaveState(&fOutstandingSaveCount);
299 } 310 }
300 } 311 }
301 312
302 if (fMegaVizMode) { 313 if (fMegaVizMode) {
303 SkRect r = SkRect::MakeWH(SkIntToScalar(fWidth), SkIntToScalar(fHeight)) ; 314 SkRect r = SkRect::MakeWH(SkIntToScalar(fWidth), SkIntToScalar(fHeight)) ;
304 r.outset(SK_Scalar1, SK_Scalar1); 315 r.outset(SK_Scalar1, SK_Scalar1);
305 316
306 canvas->save(); 317 canvas->save();
307 // nuke the CTM 318 // nuke the CTM
308 canvas->setMatrix(SkMatrix::I()); 319 canvas->setMatrix(SkMatrix::I());
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 564
554 bool SkDebugCanvas::translate(SkScalar dx, SkScalar dy) { 565 bool SkDebugCanvas::translate(SkScalar dx, SkScalar dy) {
555 addDrawCommand(new SkTranslateCommand(dx, dy)); 566 addDrawCommand(new SkTranslateCommand(dx, dy));
556 return true; 567 return true;
557 } 568 }
558 569
559 void SkDebugCanvas::toggleCommand(int index, bool toggle) { 570 void SkDebugCanvas::toggleCommand(int index, bool toggle) {
560 SkASSERT(index < fCommandVector.count()); 571 SkASSERT(index < fCommandVector.count());
561 fCommandVector[index]->setVisible(toggle); 572 fCommandVector[index]->setVisible(toggle);
562 } 573 }
OLDNEW
« no previous file with comments | « src/utils/debugger/SkDebugCanvas.h ('k') | src/utils/debugger/SkDrawCommand.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698