| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 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 #ifndef SkPicturePlayback_DEFINED | 9 #ifndef SkPicturePlayback_DEFINED |
| 9 #define SkPicturePlayback_DEFINED | 10 #define SkPicturePlayback_DEFINED |
| 10 | 11 |
| 11 #include "SkPicture.h" | 12 #include "SkPicture.h" |
| 12 #include "SkReader32.h" | 13 #include "SkReader32.h" |
| 13 | 14 |
| 14 #include "SkBitmap.h" | 15 #include "SkBitmap.h" |
| 15 #include "SkData.h" | 16 #include "SkData.h" |
| 16 #include "SkMatrix.h" | 17 #include "SkMatrix.h" |
| 17 #include "SkReadBuffer.h" | 18 #include "SkReadBuffer.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 const SkPictInfo&, | 85 const SkPictInfo&, |
| 85 SkPicture::InstallPixelRefProc); | 86 SkPicture::InstallPixelRefProc); |
| 86 static SkPicturePlayback* CreateFromBuffer(SkPicture* picture, | 87 static SkPicturePlayback* CreateFromBuffer(SkPicture* picture, |
| 87 SkReadBuffer&, | 88 SkReadBuffer&, |
| 88 const SkPictInfo&); | 89 const SkPictInfo&); |
| 89 | 90 |
| 90 virtual ~SkPicturePlayback(); | 91 virtual ~SkPicturePlayback(); |
| 91 | 92 |
| 92 const SkPicture::OperationList& getActiveOps(const SkIRect& queryRect); | 93 const SkPicture::OperationList& getActiveOps(const SkIRect& queryRect); |
| 93 | 94 |
| 95 void setUseBBH(bool useBBH) { fUseBBH = useBBH; } |
| 96 |
| 94 void draw(SkCanvas& canvas, SkDrawPictureCallback*); | 97 void draw(SkCanvas& canvas, SkDrawPictureCallback*); |
| 95 | 98 |
| 96 void serialize(SkWStream*, SkPicture::EncodeBitmap) const; | 99 void serialize(SkWStream*, SkPicture::EncodeBitmap) const; |
| 97 void flatten(SkWriteBuffer&) const; | 100 void flatten(SkWriteBuffer&) const; |
| 98 | 101 |
| 99 void dumpSize() const; | 102 void dumpSize() const; |
| 100 | 103 |
| 101 bool containsBitmaps() const; | 104 bool containsBitmaps() const; |
| 102 | 105 |
| 103 #ifdef SK_BUILD_FOR_ANDROID | 106 #ifdef SK_BUILD_FOR_ANDROID |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 #endif | 223 #endif |
| 221 | 224 |
| 222 private: // these help us with reading/writing | 225 private: // these help us with reading/writing |
| 223 bool parseStreamTag(SkPicture* picture, SkStream*, uint32_t tag, uint32_t si
ze, | 226 bool parseStreamTag(SkPicture* picture, SkStream*, uint32_t tag, uint32_t si
ze, |
| 224 SkPicture::InstallPixelRefProc); | 227 SkPicture::InstallPixelRefProc); |
| 225 bool parseBufferTag(SkPicture* picture, SkReadBuffer&, uint32_t tag, uint32_
t size); | 228 bool parseBufferTag(SkPicture* picture, SkReadBuffer&, uint32_t tag, uint32_
t size); |
| 226 void flattenToBuffer(SkWriteBuffer&) const; | 229 void flattenToBuffer(SkWriteBuffer&) const; |
| 227 | 230 |
| 228 private: | 231 private: |
| 229 friend class SkPicture; | 232 friend class SkPicture; |
| 233 friend class SkGpuDevice; // for access to setDrawLimits & setReplacements |
| 230 | 234 |
| 231 // The picture that owns this SkPicturePlayback object | 235 // The picture that owns this SkPicturePlayback object |
| 232 const SkPicture* fPicture; | 236 const SkPicture* fPicture; |
| 233 | 237 |
| 234 // Only used by getBitmap() if the passed in index is SkBitmapHeap::INVALID_
SLOT. This empty | 238 // Only used by getBitmap() if the passed in index is SkBitmapHeap::INVALID_
SLOT. This empty |
| 235 // bitmap allows playback to draw nothing and move on. | 239 // bitmap allows playback to draw nothing and move on. |
| 236 SkBitmap fBadBitmap; | 240 SkBitmap fBadBitmap; |
| 237 | 241 |
| 238 SkAutoTUnref<SkBitmapHeap> fBitmapHeap; | 242 SkAutoTUnref<SkBitmapHeap> fBitmapHeap; |
| 239 | 243 |
| 240 SkTRefArray<SkBitmap>* fBitmaps; | 244 SkTRefArray<SkBitmap>* fBitmaps; |
| 241 SkTRefArray<SkPaint>* fPaints; | 245 SkTRefArray<SkPaint>* fPaints; |
| 242 | 246 |
| 243 SkData* fOpData; // opcodes and parameters | 247 SkData* fOpData; // opcodes and parameters |
| 244 | 248 |
| 245 SkPicture** fPictureRefs; | 249 SkPicture** fPictureRefs; |
| 246 int fPictureCount; | 250 int fPictureCount; |
| 247 | 251 |
| 248 SkBBoxHierarchy* fBoundingHierarchy; | 252 SkBBoxHierarchy* fBoundingHierarchy; |
| 249 SkPictureStateTree* fStateTree; | 253 SkPictureStateTree* fStateTree; |
| 250 | 254 |
| 255 // Limit the opcode playback to be between the offsets 'start' and 'stop'. |
| 256 // The opcode at 'start' should be a saveLayer while the opcode at |
| 257 // 'stop' should be a restore. Neither of those commands will be issued. |
| 258 // Set both start & stop to 0 to disable draw limiting |
| 259 // Draw limiting cannot be enabled at the same time as draw replacing |
| 260 void setDrawLimits(size_t start, size_t stop) { |
| 261 SkASSERT(NULL == fReplacements); |
| 262 fStart = start; |
| 263 fStop = stop; |
| 264 } |
| 265 |
| 266 // PlaybackReplacements collects op ranges that can be replaced with |
| 267 // a single drawBitmap call (using a precomputed bitmap). |
| 268 class PlaybackReplacements { |
| 269 public: |
| 270 // All the operations between fStart and fStop (inclusive) will be repla
ced with |
| 271 // a single drawBitmap call using fPos, fBM and fPaint. |
| 272 // fPaint will be NULL if the picture's paint wasn't copyable |
| 273 struct ReplacementInfo { |
| 274 size_t fStart; |
| 275 size_t fStop; |
| 276 SkPoint fPos; |
| 277 SkBitmap* fBM; |
| 278 const SkPaint* fPaint; // Note: this object doesn't own the paint |
| 279 }; |
| 280 |
| 281 ~PlaybackReplacements() { this->freeAll(); } |
| 282 |
| 283 // Add a new replacement range. The replacement ranges should be |
| 284 // sorted in increasing order and non-overlapping (esp. no nested |
| 285 // saveLayers). |
| 286 ReplacementInfo* push(); |
| 287 |
| 288 private: |
| 289 friend class SkPicturePlayback; // for access to lookupByStart |
| 290 |
| 291 // look up a replacement range by its start offset |
| 292 ReplacementInfo* lookupByStart(size_t start); |
| 293 |
| 294 void freeAll(); |
| 295 |
| 296 #ifdef SK_DEBUG |
| 297 void validate() const; |
| 298 #endif |
| 299 |
| 300 SkTDArray<ReplacementInfo> fReplacements; |
| 301 }; |
| 302 |
| 303 |
| 304 // Replace all the draw ops in the replacement ranges in 'replacements' with |
| 305 // the associated drawBitmap call |
| 306 // Draw replacing cannot be enabled at the same time as draw limiting |
| 307 void setReplacements(PlaybackReplacements* replacements) { |
| 308 SkASSERT(fStart == 0 && fStop == 0); |
| 309 fReplacements = replacements; |
| 310 } |
| 311 |
| 312 bool fUseBBH; |
| 313 size_t fStart; |
| 314 size_t fStop; |
| 315 PlaybackReplacements* fReplacements; |
| 316 |
| 251 class CachedOperationList : public SkPicture::OperationList { | 317 class CachedOperationList : public SkPicture::OperationList { |
| 252 public: | 318 public: |
| 253 CachedOperationList() { | 319 CachedOperationList() { |
| 254 fCacheQueryRect.setEmpty(); | 320 fCacheQueryRect.setEmpty(); |
| 255 } | 321 } |
| 256 | 322 |
| 257 virtual bool valid() const { return true; } | 323 virtual bool valid() const { return true; } |
| 258 virtual int numOps() const SK_OVERRIDE { return fOps.count(); } | 324 virtual int numOps() const SK_OVERRIDE { return fOps.count(); } |
| 259 virtual uint32_t offset(int index) const SK_OVERRIDE; | 325 virtual uint32_t offset(int index) const SK_OVERRIDE; |
| 260 virtual const SkMatrix& matrix(int index) const SK_OVERRIDE; | 326 virtual const SkMatrix& matrix(int index) const SK_OVERRIDE; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 282 static void WriteFactories(SkWStream* stream, const SkFactorySet& rec); | 348 static void WriteFactories(SkWStream* stream, const SkFactorySet& rec); |
| 283 static void WriteTypefaces(SkWStream* stream, const SkRefCntSet& rec); | 349 static void WriteTypefaces(SkWStream* stream, const SkRefCntSet& rec); |
| 284 | 350 |
| 285 #ifdef SK_BUILD_FOR_ANDROID | 351 #ifdef SK_BUILD_FOR_ANDROID |
| 286 SkMutex fDrawMutex; | 352 SkMutex fDrawMutex; |
| 287 bool fAbortCurrentPlayback; | 353 bool fAbortCurrentPlayback; |
| 288 #endif | 354 #endif |
| 289 }; | 355 }; |
| 290 | 356 |
| 291 #endif | 357 #endif |
| OLD | NEW |