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

Side by Side Diff: include/core/SkPicture.h

Issue 313613002: Remove legacy picture recording (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Remove dead files from core.gypi Created 6 years, 6 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
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2007 The Android Open Source Project 3 * Copyright 2007 The Android Open Source Project
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 #ifndef SkPicture_DEFINED 10 #ifndef SkPicture_DEFINED
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 */ 125 */
126 SkPicture* clone() const; 126 SkPicture* clone() const;
127 127
128 /** 128 /**
129 * Creates multiple thread-safe clones of this picture that are ready for 129 * Creates multiple thread-safe clones of this picture that are ready for
130 * playback. The resulting clones are stored in the provided array of 130 * playback. The resulting clones are stored in the provided array of
131 * SkPictures. 131 * SkPictures.
132 */ 132 */
133 void clone(SkPicture* pictures, int count) const; 133 void clone(SkPicture* pictures, int count) const;
134 134
135 // TODO: kUsePathBoundsForClip_RecordingFlag no longer belongs in
136 // SkPicture. It should be moved to SkPictureRecorder (or just made
mtklein 2014/06/03 15:27:44 +1 to default.
137 // the default behavior).
135 enum RecordingFlags { 138 enum RecordingFlags {
136 /* This flag specifies that when clipPath() is called, the path will 139 /* This flag specifies that when clipPath() is called, the path will
137 be faithfully recorded, but the recording canvas' current clip will 140 be faithfully recorded, but the recording canvas' current clip will
138 only see the path's bounds. This speeds up the recording process 141 only see the path's bounds. This speeds up the recording process
139 without compromising the fidelity of the playback. The only side- 142 without compromising the fidelity of the playback. The only side-
140 effect for recording is that calling getTotalClip() or related 143 effect for recording is that calling getTotalClip() or related
141 clip-query calls will reflect the path's bounds, not the actual 144 clip-query calls will reflect the path's bounds, not the actual
142 path. 145 path.
143 */ 146 */
144 kUsePathBoundsForClip_RecordingFlag = 0x01 147 kUsePathBoundsForClip_RecordingFlag = 0x01
145 }; 148 };
146 149
147 #ifndef SK_SUPPORT_DEPRECATED_RECORD_FLAGS
148 // TODO: once kOptimizeForClippedPlayback_RecordingFlag is hidden from
149 // all external consumers, SkPicture::createBBoxHierarchy can also be
150 // cleaned up.
151 private:
152 #endif
153 enum Deprecated_RecordingFlags {
154 /* This flag causes the picture to compute bounding boxes and build
155 up a spatial hierarchy (currently an R-Tree), plus a tree of Canvas'
156 usually stack-based clip/etc state. This requires an increase in
157 recording time (often ~2x; likely more for very complex pictures),
158 but allows us to perform much faster culling at playback time, and
159 completely avoid some unnecessary clips and other operations. This
160 is ideal for tiled rendering, or any other situation where you're
161 drawing a fraction of a large scene into a smaller viewport.
162
163 In most cases the record cost is offset by the playback improvement
164 after a frame or two of tiled rendering (and complex pictures that
165 induce the worst record times will generally get the largest
166 speedups at playback time).
167
168 Note: Currently this is not serializable, the bounding data will be
169 discarded if you serialize into a stream and then deserialize.
170 */
171 kOptimizeForClippedPlayback_RecordingFlag = 0x02,
172 };
173 #ifndef SK_SUPPORT_DEPRECATED_RECORD_FLAGS
174 public:
175 #endif
176
177 #ifndef SK_SUPPORT_LEGACY_PICTURE_CAN_RECORD
178 private:
179 #endif
180
181 #ifdef SK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES
182
183 /** Returns the canvas that records the drawing commands.
184 @param width the base width for the picture, as if the recording
185 canvas' bitmap had this width.
186 @param height the base width for the picture, as if the recording
187 canvas' bitmap had this height.
188 @param recordFlags optional flags that control recording.
189 @return the picture canvas.
190 */
191 SkCanvas* beginRecording(int width, int height, uint32_t recordFlags = 0);
192 #endif
193
194 /** Returns the recording canvas if one is active, or NULL if recording is
195 not active. This does not alter the refcnt on the canvas (if present).
196 */
197 SkCanvas* getRecordingCanvas() const;
198 /** Signal that the caller is done recording. This invalidates the canvas
199 returned by beginRecording/getRecordingCanvas, and prepares the picture
200 for drawing. Note: this happens implicitly the first time the picture
201 is drawn.
202 */
203 void endRecording();
204
205 #ifndef SK_SUPPORT_LEGACY_PICTURE_CAN_RECORD
206 public:
207 #endif
208
209 /** Replays the drawing commands on the specified canvas. This internally 150 /** Replays the drawing commands on the specified canvas. This internally
210 calls endRecording() if that has not already been called. 151 calls endRecording() if that has not already been called.
211 @param canvas the canvas receiving the drawing commands. 152 @param canvas the canvas receiving the drawing commands.
212 */ 153 */
213 void draw(SkCanvas* canvas, SkDrawPictureCallback* = NULL); 154 void draw(SkCanvas* canvas, SkDrawPictureCallback* = NULL);
214 155
215 /** Return the width of the picture's recording canvas. This 156 /** Return the width of the picture's recording canvas. This
216 value reflects what was passed to setSize(), and does not necessarily 157 value reflects what was passed to setSize(), and does not necessarily
217 reflect the bounds of what has been recorded into the picture. 158 reflect the bounds of what has been recorded into the picture.
218 @return the width of the picture's recording canvas 159 @return the width of the picture's recording canvas
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 SkPictureRecord* fRecord; 287 SkPictureRecord* fRecord;
347 int fWidth, fHeight; 288 int fWidth, fHeight;
348 const AccelData* fAccelData; 289 const AccelData* fAccelData;
349 290
350 void needsNewGenID() { fUniqueID = SK_InvalidGenID; } 291 void needsNewGenID() { fUniqueID = SK_InvalidGenID; }
351 292
352 // Create a new SkPicture from an existing SkPicturePlayback. Ref count of 293 // Create a new SkPicture from an existing SkPicturePlayback. Ref count of
353 // playback is unchanged. 294 // playback is unchanged.
354 SkPicture(SkPicturePlayback*, int width, int height); 295 SkPicture(SkPicturePlayback*, int width, int height);
355 296
356 #ifdef SK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES
357 // For testing. Derived classes may instantiate an alternate
358 // SkBBoxHierarchy implementation
359 virtual SkBBoxHierarchy* createBBoxHierarchy() const;
360 #endif
361
362 SkCanvas* beginRecording(int width, int height, SkBBHFactory* factory, uint3 2_t recordFlags);
363
364 private: 297 private:
365 friend class SkPictureRecord; 298 friend class SkPictureRecord;
366 friend class SkPictureTester; // for unit testing 299 friend class SkPictureTester; // for unit testing
367 300
368 SkAutoTUnref<SkPathHeap> fPathHeap; // reference counted 301 SkAutoTUnref<SkPathHeap> fPathHeap; // reference counted
369 302
370 // ContentInfo is not serialized! It is intended solely for use 303 // ContentInfo is not serialized! It is intended solely for use
371 // with suitableForGpuRasterization. 304 // with suitableForGpuRasterization.
372 class ContentInfo { 305 class ContentInfo {
373 public: 306 public:
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 bool deepCopy); 412 bool deepCopy);
480 413
481 friend class SkFlatPicture; 414 friend class SkFlatPicture;
482 friend class SkPicturePlayback; 415 friend class SkPicturePlayback;
483 friend class SkPictureRecorder; 416 friend class SkPictureRecorder;
484 friend class SkGpuDevice; 417 friend class SkGpuDevice;
485 friend class GrGatherCanvas; 418 friend class GrGatherCanvas;
486 friend class GrGatherDevice; 419 friend class GrGatherDevice;
487 friend class SkDebugCanvas; 420 friend class SkDebugCanvas;
488 421
422 // TODO: beginRecording, getRecordingCanvas & endRecording can now be
423 // be moved out of SkPicture (and, presumably, be directly implemented
424 // in SkPictureRecorder)
425
426 /** Returns the canvas that records the drawing commands.
427 @param width the base width for the picture, as if the recording
428 canvas' bitmap had this width.
429 @param height the base width for the picture, as if the recording
430 canvas' bitmap had this height.
431 @param factory if non-NULL, the factory used to the BBH for the recorded picture
432 @param recordFlags optional flags that control recording.
433 @return the picture canvas.
434 */
435 SkCanvas* beginRecording(int width, int height, SkBBHFactory* factory, uint3 2_t recordFlags);
436 /** Returns the recording canvas if one is active, or NULL if recording is
437 not active. This does not alter the refcnt on the canvas (if present).
438 */
439 SkCanvas* getRecordingCanvas() const;
440 /** Signal that the caller is done recording. This invalidates the canvas
441 returned by beginRecording/getRecordingCanvas, and prepares the picture
442 for drawing. Note: this happens implicitly the first time the picture
443 is drawn.
444 */
445 void endRecording();
446
489 typedef SkRefCnt INHERITED; 447 typedef SkRefCnt INHERITED;
490 }; 448 };
491 449
492 /** 450 /**
493 * Subclasses of this can be passed to canvas.drawPicture. During the drawing 451 * Subclasses of this can be passed to canvas.drawPicture. During the drawing
494 * of the picture, this callback will periodically be invoked. If its 452 * of the picture, this callback will periodically be invoked. If its
495 * abortDrawing() returns true, then picture playback will be interrupted. 453 * abortDrawing() returns true, then picture playback will be interrupted.
496 * 454 *
497 * The resulting drawing is undefined, as there is no guarantee how often the 455 * The resulting drawing is undefined, as there is no guarantee how often the
498 * callback will be invoked. If the abort happens inside some level of nested 456 * callback will be invoked. If the abort happens inside some level of nested
499 * calls to save(), restore will automatically be called to return the state 457 * calls to save(), restore will automatically be called to return the state
500 * to the same level it was before the drawPicture call was made. 458 * to the same level it was before the drawPicture call was made.
501 */ 459 */
502 class SK_API SkDrawPictureCallback { 460 class SK_API SkDrawPictureCallback {
503 public: 461 public:
504 SkDrawPictureCallback() {} 462 SkDrawPictureCallback() {}
505 virtual ~SkDrawPictureCallback() {} 463 virtual ~SkDrawPictureCallback() {}
506 464
507 virtual bool abortDrawing() = 0; 465 virtual bool abortDrawing() = 0;
508 }; 466 };
509 467
510 #ifdef SK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES
511
512 class SkPictureFactory : public SkRefCnt {
513 public:
514 /**
515 * Allocate a new SkPicture. Return NULL on failure.
516 */
517 virtual SkPicture* create(int width, int height) = 0;
518
519 private:
520 typedef SkRefCnt INHERITED;
521 };
522
523 #endif 468 #endif
524
525 #ifdef SK_SUPPORT_LEGACY_PICTURE_HEADERS
526 #include "SkPictureRecorder.h"
527 #endif
528
529 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698