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

Side by Side Diff: src/core/SkRecordDraw.cpp

Issue 501153002: Unfurl catch-all bounds(). This makes it a little easier to track progress. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 4 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
« no previous file with comments | « no previous file | no next file » | 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 "SkRecordDraw.h" 8 #include "SkRecordDraw.h"
9 #include "SkTSort.h" 9 #include "SkTSort.h"
10 10
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 void updateClipBounds(const ClipRegion& op) { fCurrentClipBounds = op.devBou nds; } 178 void updateClipBounds(const ClipRegion& op) { fCurrentClipBounds = op.devBou nds; }
179 void updateClipBounds(const SaveLayer& op) { 179 void updateClipBounds(const SaveLayer& op) {
180 if (op.bounds) { 180 if (op.bounds) {
181 fCurrentClipBounds.intersect(this->adjustAndMap(*op.bounds, op.paint )); 181 fCurrentClipBounds.intersect(this->adjustAndMap(*op.bounds, op.paint ));
182 } 182 }
183 } 183 }
184 184
185 // The bounds of these ops must be calculated when we hit the Restore 185 // The bounds of these ops must be calculated when we hit the Restore
186 // from the bounds of the ops in the same Save block. 186 // from the bounds of the ops in the same Save block.
187 void trackBounds(const Save&) { this->pushSaveBlock(NULL); } 187 void trackBounds(const Save&) { this->pushSaveBlock(NULL); }
188 // TODO: bounds of SaveLayer may be more complicated?
189 void trackBounds(const SaveLayer& op) { this->pushSaveBlock(op.paint); } 188 void trackBounds(const SaveLayer& op) { this->pushSaveBlock(op.paint); }
190 void trackBounds(const Restore&) { fBounds[fCurrentOp] = this->popSaveBlock( ); } 189 void trackBounds(const Restore&) { fBounds[fCurrentOp] = this->popSaveBlock( ); }
191 190
192 void trackBounds(const SetMatrix&) { this->pushControl(); } 191 void trackBounds(const SetMatrix&) { this->pushControl(); }
193 void trackBounds(const ClipRect&) { this->pushControl(); } 192 void trackBounds(const ClipRect&) { this->pushControl(); }
194 void trackBounds(const ClipRRect&) { this->pushControl(); } 193 void trackBounds(const ClipRRect&) { this->pushControl(); }
195 void trackBounds(const ClipPath&) { this->pushControl(); } 194 void trackBounds(const ClipPath&) { this->pushControl(); }
196 void trackBounds(const ClipRegion&) { this->pushControl(); } 195 void trackBounds(const ClipRegion&) { this->pushControl(); }
robertphillips 2014/08/25 20:28:19 Seems like we should do more with the culling info
mtklein 2014/08/25 20:36:12 Yes. It's a little moot right now because we're n
196 void trackBounds(const PushCull&) { this->pushControl(); }
197 void trackBounds(const PopCull&) { this->pushControl(); }
robertphillips 2014/08/25 20:28:19 Could these guys be treated like Noop (since they
mtklein 2014/08/25 20:36:13 Could be, but then we'd be in the odd spot of play
198 void trackBounds(const BeginCommentGroup&) { this->pushControl(); }
199 void trackBounds(const AddComment&) { this->pushControl(); }
200 void trackBounds(const EndCommentGroup&) { this->pushControl(); }
197 201
198 // For all other ops, we can calculate and store the bounds directly now. 202 // For all other ops, we can calculate and store the bounds directly now.
199 template <typename T> void trackBounds(const T& op) { 203 template <typename T> void trackBounds(const T& op) {
200 fBounds[fCurrentOp] = this->bounds(op); 204 fBounds[fCurrentOp] = this->bounds(op);
201 this->updateSaveBounds(fBounds[fCurrentOp]); 205 this->updateSaveBounds(fBounds[fCurrentOp]);
202 } 206 }
203 207
204 void pushSaveBlock(const SkPaint* paint) { 208 void pushSaveBlock(const SkPaint* paint) {
205 // Starting a new Save block. Push a new entry to represent that. 209 // Starting a new Save block. Push a new entry to represent that.
206 SaveBounds sb = { 0, SkIRect::MakeEmpty(), paint }; 210 SaveBounds sb = { 0, SkIRect::MakeEmpty(), paint };
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 fControlIndices.pop(); 249 fControlIndices.pop();
246 } 250 }
247 251
248 void updateSaveBounds(const SkIRect& bounds) { 252 void updateSaveBounds(const SkIRect& bounds) {
249 // If we're in a Save block, expand its bounds to cover these bounds too . 253 // If we're in a Save block, expand its bounds to cover these bounds too .
250 if (!fSaveStack.isEmpty()) { 254 if (!fSaveStack.isEmpty()) {
251 fSaveStack.top().bounds.join(bounds); 255 fSaveStack.top().bounds.join(bounds);
252 } 256 }
253 } 257 }
254 258
255 // TODO(mtklein): Remove this default when done bounding all ops. 259 // FIXME: these methods could use better bounds
256 template <typename T> SkIRect bounds(const T&) const { return fCurrentClipBo unds; } 260 SkIRect bounds(const DrawPatch&) const { return fCurrentClipBounds; }
261 SkIRect bounds(const DrawPicture&) const { return fCurrentClipBounds; }
262 SkIRect bounds(const DrawTextOnPath&) const { return fCurrentClipBounds; }
263 SkIRect bounds(const DrawSprite&) const { return fCurrentClipBounds; }
264 SkIRect bounds(const DrawTextBlob&) const { return fCurrentClipBounds; }
265 SkIRect bounds(const DrawText&) const { return fCurrentClipBounds; }
266 SkIRect bounds(const DrawVertices&) const { return fCurrentClipBounds; }
267 // end of methods that could use better bounds
268
257 SkIRect bounds(const Clear&) const { return SkIRect::MakeLargest(); } // Ig nores the clip 269 SkIRect bounds(const Clear&) const { return SkIRect::MakeLargest(); } // Ig nores the clip
270 SkIRect bounds(const DrawPaint&) const { return fCurrentClipBounds; }
258 SkIRect bounds(const NoOp&) const { return SkIRect::MakeEmpty(); } // No Ops don't draw. 271 SkIRect bounds(const NoOp&) const { return SkIRect::MakeEmpty(); } // No Ops don't draw.
259 272
260 SkIRect bounds(const DrawRect& op) const { return this->adjustAndMap(op.rect , &op.paint); } 273 SkIRect bounds(const DrawRect& op) const { return this->adjustAndMap(op.rect , &op.paint); }
261 SkIRect bounds(const DrawOval& op) const { return this->adjustAndMap(op.oval , &op.paint); } 274 SkIRect bounds(const DrawOval& op) const { return this->adjustAndMap(op.oval , &op.paint); }
262 SkIRect bounds(const DrawRRect& op) const { 275 SkIRect bounds(const DrawRRect& op) const {
263 return this->adjustAndMap(op.rrect.rect(), &op.paint); 276 return this->adjustAndMap(op.rrect.rect(), &op.paint);
264 } 277 }
265 SkIRect bounds(const DrawDRRect& op) const { 278 SkIRect bounds(const DrawDRRect& op) const {
266 return this->adjustAndMap(op.outer.rect(), &op.paint); 279 return this->adjustAndMap(op.outer.rect(), &op.paint);
267 } 280 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 // Used to track the bounds of Save/Restore blocks and the control ops insid e them. 417 // Used to track the bounds of Save/Restore blocks and the control ops insid e them.
405 SkTDArray<SaveBounds> fSaveStack; 418 SkTDArray<SaveBounds> fSaveStack;
406 SkTDArray<unsigned> fControlIndices; 419 SkTDArray<unsigned> fControlIndices;
407 }; 420 };
408 421
409 } // namespace SkRecords 422 } // namespace SkRecords
410 423
411 void SkRecordFillBounds(const SkRecord& record, SkBBoxHierarchy* bbh) { 424 void SkRecordFillBounds(const SkRecord& record, SkBBoxHierarchy* bbh) {
412 SkRecords::FillBounds(record, bbh); 425 SkRecords::FillBounds(record, bbh);
413 } 426 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698