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

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

Issue 143883006: No deduping dictionaries for matrices and regions. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: bump picture version Created 6 years, 11 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 | « src/core/SkPicturePlayback.h ('k') | src/core/SkPictureRecord.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 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 #include "SkPicturePlayback.h" 8 #include "SkPicturePlayback.h"
9 #include "SkPictureRecord.h" 9 #include "SkPictureRecord.h"
10 #include "SkTypeface.h" 10 #include "SkTypeface.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 void* buffer = sk_malloc_throw(size); 89 void* buffer = sk_malloc_throw(size);
90 writer.flatten(buffer); 90 writer.flatten(buffer);
91 SkASSERT(!fOpData); 91 SkASSERT(!fOpData);
92 fOpData = SkData::NewFromMalloc(buffer, size); 92 fOpData = SkData::NewFromMalloc(buffer, size);
93 } 93 }
94 94
95 // copy over the refcnt dictionary to our reader 95 // copy over the refcnt dictionary to our reader
96 record.fFlattenableHeap.setupPlaybacks(); 96 record.fFlattenableHeap.setupPlaybacks();
97 97
98 fBitmaps = record.fBitmapHeap->extractBitmaps(); 98 fBitmaps = record.fBitmapHeap->extractBitmaps();
99 fMatrices = record.fMatrices.unflattenToArray();
100 fPaints = record.fPaints.unflattenToArray(); 99 fPaints = record.fPaints.unflattenToArray();
101 fRegions = record.fRegions.unflattenToArray();
102 100
103 fBitmapHeap.reset(SkSafeRef(record.fBitmapHeap)); 101 fBitmapHeap.reset(SkSafeRef(record.fBitmapHeap));
104 fPathHeap.reset(SkSafeRef(record.fPathHeap)); 102 fPathHeap.reset(SkSafeRef(record.fPathHeap));
105 103
106 // ensure that the paths bounds are pre-computed 104 // ensure that the paths bounds are pre-computed
107 if (fPathHeap.get()) { 105 if (fPathHeap.get()) {
108 for (int i = 0; i < fPathHeap->count(); i++) { 106 for (int i = 0; i < fPathHeap->count(); i++) {
109 (*fPathHeap)[i].updateBoundsCache(); 107 (*fPathHeap)[i].updateBoundsCache();
110 } 108 }
111 } 109 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 paint.getLooper() || 161 paint.getLooper() ||
164 paint.getImageFilter(); 162 paint.getImageFilter();
165 } 163 }
166 164
167 SkPicturePlayback::SkPicturePlayback(const SkPicturePlayback& src, SkPictCopyInf o* deepCopyInfo) { 165 SkPicturePlayback::SkPicturePlayback(const SkPicturePlayback& src, SkPictCopyInf o* deepCopyInfo) {
168 this->init(); 166 this->init();
169 167
170 fBitmapHeap.reset(SkSafeRef(src.fBitmapHeap.get())); 168 fBitmapHeap.reset(SkSafeRef(src.fBitmapHeap.get()));
171 fPathHeap.reset(SkSafeRef(src.fPathHeap.get())); 169 fPathHeap.reset(SkSafeRef(src.fPathHeap.get()));
172 170
173 fMatrices = SkSafeRef(src.fMatrices);
174 fRegions = SkSafeRef(src.fRegions);
175 fOpData = SkSafeRef(src.fOpData); 171 fOpData = SkSafeRef(src.fOpData);
176 172
177 fBoundingHierarchy = src.fBoundingHierarchy; 173 fBoundingHierarchy = src.fBoundingHierarchy;
178 fStateTree = src.fStateTree; 174 fStateTree = src.fStateTree;
179 175
180 SkSafeRef(fBoundingHierarchy); 176 SkSafeRef(fBoundingHierarchy);
181 SkSafeRef(fStateTree); 177 SkSafeRef(fStateTree);
182 178
183 if (deepCopyInfo) { 179 if (deepCopyInfo) {
184 int paintCount = SafeCount(src.fPaints); 180 int paintCount = SafeCount(src.fPaints);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 fPictureRefs[i] = src.fPictureRefs[i]->clone(); 250 fPictureRefs[i] = src.fPictureRefs[i]->clone();
255 } else { 251 } else {
256 fPictureRefs[i] = src.fPictureRefs[i]; 252 fPictureRefs[i] = src.fPictureRefs[i];
257 fPictureRefs[i]->ref(); 253 fPictureRefs[i]->ref();
258 } 254 }
259 } 255 }
260 } 256 }
261 257
262 void SkPicturePlayback::init() { 258 void SkPicturePlayback::init() {
263 fBitmaps = NULL; 259 fBitmaps = NULL;
264 fMatrices = NULL;
265 fPaints = NULL; 260 fPaints = NULL;
266 fPictureRefs = NULL; 261 fPictureRefs = NULL;
267 fRegions = NULL;
268 fPictureCount = 0; 262 fPictureCount = 0;
269 fOpData = NULL; 263 fOpData = NULL;
270 fFactoryPlayback = NULL; 264 fFactoryPlayback = NULL;
271 fBoundingHierarchy = NULL; 265 fBoundingHierarchy = NULL;
272 fStateTree = NULL; 266 fStateTree = NULL;
273 } 267 }
274 268
275 SkPicturePlayback::~SkPicturePlayback() { 269 SkPicturePlayback::~SkPicturePlayback() {
276 fOpData->unref(); 270 fOpData->unref();
277 271
278 SkSafeUnref(fBitmaps); 272 SkSafeUnref(fBitmaps);
279 SkSafeUnref(fMatrices);
280 SkSafeUnref(fPaints); 273 SkSafeUnref(fPaints);
281 SkSafeUnref(fRegions);
282 SkSafeUnref(fBoundingHierarchy); 274 SkSafeUnref(fBoundingHierarchy);
283 SkSafeUnref(fStateTree); 275 SkSafeUnref(fStateTree);
284 276
285 for (int i = 0; i < fPictureCount; i++) { 277 for (int i = 0; i < fPictureCount; i++) {
286 fPictureRefs[i]->unref(); 278 fPictureRefs[i]->unref();
287 } 279 }
288 SkDELETE_ARRAY(fPictureRefs); 280 SkDELETE_ARRAY(fPictureRefs);
289 281
290 SkDELETE(fFactoryPlayback); 282 SkDELETE(fFactoryPlayback);
291 } 283 }
292 284
293 void SkPicturePlayback::dumpSize() const { 285 void SkPicturePlayback::dumpSize() const {
294 SkDebugf("--- picture size: ops=%d bitmaps=%d [%d] matrices=%d [%d] paints=% d [%d] paths=%d regions=%d\n", 286 SkDebugf("--- picture size: ops=%d bitmaps=%d [%d] paints=%d [%d] paths=%d\n ",
295 fOpData->size(), 287 fOpData->size(),
296 SafeCount(fBitmaps), SafeCount(fBitmaps) * sizeof(SkBitmap), 288 SafeCount(fBitmaps), SafeCount(fBitmaps) * sizeof(SkBitmap),
297 SafeCount(fMatrices), SafeCount(fMatrices) * sizeof(SkMatrix),
298 SafeCount(fPaints), SafeCount(fPaints) * sizeof(SkPaint), 289 SafeCount(fPaints), SafeCount(fPaints) * sizeof(SkPaint),
299 SafeCount(fPathHeap.get()), 290 SafeCount(fPathHeap.get()));
300 SafeCount(fRegions));
301 } 291 }
302 292
303 bool SkPicturePlayback::containsBitmaps() const { 293 bool SkPicturePlayback::containsBitmaps() const {
304 if (fBitmaps && fBitmaps->count() > 0) { 294 if (fBitmaps && fBitmaps->count() > 0) {
305 return true; 295 return true;
306 } 296 }
307 for (int i = 0; i < fPictureCount; ++i) { 297 for (int i = 0; i < fPictureCount; ++i) {
308 if (fPictureRefs[i]->willPlayBackBitmaps()) { 298 if (fPictureRefs[i]->willPlayBackBitmaps()) {
309 return true; 299 return true;
310 } 300 }
311 } 301 }
312 return false; 302 return false;
313 } 303 }
314 304
315 /////////////////////////////////////////////////////////////////////////////// 305 ///////////////////////////////////////////////////////////////////////////////
316 /////////////////////////////////////////////////////////////////////////////// 306 ///////////////////////////////////////////////////////////////////////////////
317 307
318 #define PICT_READER_TAG SkSetFourByteTag('r', 'e', 'a', 'd') 308 #define PICT_READER_TAG SkSetFourByteTag('r', 'e', 'a', 'd')
319 #define PICT_FACTORY_TAG SkSetFourByteTag('f', 'a', 'c', 't') 309 #define PICT_FACTORY_TAG SkSetFourByteTag('f', 'a', 'c', 't')
320 #define PICT_TYPEFACE_TAG SkSetFourByteTag('t', 'p', 'f', 'c') 310 #define PICT_TYPEFACE_TAG SkSetFourByteTag('t', 'p', 'f', 'c')
321 #define PICT_PICTURE_TAG SkSetFourByteTag('p', 'c', 't', 'r') 311 #define PICT_PICTURE_TAG SkSetFourByteTag('p', 'c', 't', 'r')
322 312
323 // This tag specifies the size of the ReadBuffer, needed for the following tags 313 // This tag specifies the size of the ReadBuffer, needed for the following tags
324 #define PICT_BUFFER_SIZE_TAG SkSetFourByteTag('a', 'r', 'a', 'y') 314 #define PICT_BUFFER_SIZE_TAG SkSetFourByteTag('a', 'r', 'a', 'y')
325 // these are all inside the ARRAYS tag 315 // these are all inside the ARRAYS tag
326 #define PICT_BITMAP_BUFFER_TAG SkSetFourByteTag('b', 't', 'm', 'p') 316 #define PICT_BITMAP_BUFFER_TAG SkSetFourByteTag('b', 't', 'm', 'p')
327 #define PICT_MATRIX_BUFFER_TAG SkSetFourByteTag('m', 't', 'r', 'x')
328 #define PICT_PAINT_BUFFER_TAG SkSetFourByteTag('p', 'n', 't', ' ') 317 #define PICT_PAINT_BUFFER_TAG SkSetFourByteTag('p', 'n', 't', ' ')
329 #define PICT_PATH_BUFFER_TAG SkSetFourByteTag('p', 't', 'h', ' ') 318 #define PICT_PATH_BUFFER_TAG SkSetFourByteTag('p', 't', 'h', ' ')
330 #define PICT_REGION_BUFFER_TAG SkSetFourByteTag('r', 'g', 'n', ' ')
331 319
332 // Always write this guy last (with no length field afterwards) 320 // Always write this guy last (with no length field afterwards)
333 #define PICT_EOF_TAG SkSetFourByteTag('e', 'o', 'f', ' ') 321 #define PICT_EOF_TAG SkSetFourByteTag('e', 'o', 'f', ' ')
334 322
335 #include "SkStream.h" 323 #include "SkStream.h"
336 324
337 static void writeTagSize(SkOrderedWriteBuffer& buffer, uint32_t tag, 325 static void writeTagSize(SkOrderedWriteBuffer& buffer, uint32_t tag,
338 uint32_t size) { 326 uint32_t size) {
339 buffer.writeUInt(tag); 327 buffer.writeUInt(tag);
340 buffer.writeUInt(size); 328 buffer.writeUInt(size);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 void SkPicturePlayback::flattenToBuffer(SkOrderedWriteBuffer& buffer) const { 373 void SkPicturePlayback::flattenToBuffer(SkOrderedWriteBuffer& buffer) const {
386 int i, n; 374 int i, n;
387 375
388 if ((n = SafeCount(fBitmaps)) > 0) { 376 if ((n = SafeCount(fBitmaps)) > 0) {
389 writeTagSize(buffer, PICT_BITMAP_BUFFER_TAG, n); 377 writeTagSize(buffer, PICT_BITMAP_BUFFER_TAG, n);
390 for (i = 0; i < n; i++) { 378 for (i = 0; i < n; i++) {
391 buffer.writeBitmap((*fBitmaps)[i]); 379 buffer.writeBitmap((*fBitmaps)[i]);
392 } 380 }
393 } 381 }
394 382
395 if ((n = SafeCount(fMatrices)) > 0) {
396 writeTagSize(buffer, PICT_MATRIX_BUFFER_TAG, n);
397 for (i = 0; i < n; i++) {
398 buffer.writeMatrix((*fMatrices)[i]);
399 }
400
401 }
402
403 if ((n = SafeCount(fPaints)) > 0) { 383 if ((n = SafeCount(fPaints)) > 0) {
404 writeTagSize(buffer, PICT_PAINT_BUFFER_TAG, n); 384 writeTagSize(buffer, PICT_PAINT_BUFFER_TAG, n);
405 for (i = 0; i < n; i++) { 385 for (i = 0; i < n; i++) {
406 buffer.writePaint((*fPaints)[i]); 386 buffer.writePaint((*fPaints)[i]);
407 } 387 }
408 } 388 }
409 389
410 if ((n = SafeCount(fPathHeap.get())) > 0) { 390 if ((n = SafeCount(fPathHeap.get())) > 0) {
411 writeTagSize(buffer, PICT_PATH_BUFFER_TAG, n); 391 writeTagSize(buffer, PICT_PATH_BUFFER_TAG, n);
412 fPathHeap->flatten(buffer); 392 fPathHeap->flatten(buffer);
413 } 393 }
414
415 if ((n = SafeCount(fRegions)) > 0) {
416 writeTagSize(buffer, PICT_REGION_BUFFER_TAG, n);
417 for (i = 0; i < n; i++) {
418 buffer.writeRegion((*fRegions)[i]);
419 }
420 }
421 } 394 }
422 395
423 void SkPicturePlayback::serialize(SkWStream* stream, 396 void SkPicturePlayback::serialize(SkWStream* stream,
424 SkPicture::EncodeBitmap encoder) const { 397 SkPicture::EncodeBitmap encoder) const {
425 writeTagSize(stream, PICT_READER_TAG, fOpData->size()); 398 writeTagSize(stream, PICT_READER_TAG, fOpData->size());
426 stream->write(fOpData->bytes(), fOpData->size()); 399 stream->write(fOpData->bytes(), fOpData->size());
427 400
428 if (fPictureCount > 0) { 401 if (fPictureCount > 0) {
429 writeTagSize(stream, PICT_PICTURE_TAG, fPictureCount); 402 writeTagSize(stream, PICT_PICTURE_TAG, fPictureCount);
430 for (int i = 0; i < fPictureCount; i++) { 403 for (int i = 0; i < fPictureCount; i++) {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 uint32_t tag, size_t size) { 558 uint32_t tag, size_t size) {
586 switch (tag) { 559 switch (tag) {
587 case PICT_BITMAP_BUFFER_TAG: { 560 case PICT_BITMAP_BUFFER_TAG: {
588 fBitmaps = SkTRefArray<SkBitmap>::Create(size); 561 fBitmaps = SkTRefArray<SkBitmap>::Create(size);
589 for (size_t i = 0; i < size; ++i) { 562 for (size_t i = 0; i < size; ++i) {
590 SkBitmap* bm = &fBitmaps->writableAt(i); 563 SkBitmap* bm = &fBitmaps->writableAt(i);
591 buffer.readBitmap(bm); 564 buffer.readBitmap(bm);
592 bm->setImmutable(); 565 bm->setImmutable();
593 } 566 }
594 } break; 567 } break;
595 case PICT_MATRIX_BUFFER_TAG:
596 fMatrices = SkTRefArray<SkMatrix>::Create(size);
597 for (size_t i = 0; i < size; ++i) {
598 buffer.readMatrix(&fMatrices->writableAt(i));
599 }
600 break;
601 case PICT_PAINT_BUFFER_TAG: { 568 case PICT_PAINT_BUFFER_TAG: {
602 fPaints = SkTRefArray<SkPaint>::Create(size); 569 fPaints = SkTRefArray<SkPaint>::Create(size);
603 for (size_t i = 0; i < size; ++i) { 570 for (size_t i = 0; i < size; ++i) {
604 buffer.readPaint(&fPaints->writableAt(i)); 571 buffer.readPaint(&fPaints->writableAt(i));
605 } 572 }
606 } break; 573 } break;
607 case PICT_PATH_BUFFER_TAG: 574 case PICT_PATH_BUFFER_TAG:
608 if (size > 0) { 575 if (size > 0) {
609 fPathHeap.reset(SkNEW_ARGS(SkPathHeap, (buffer))); 576 fPathHeap.reset(SkNEW_ARGS(SkPathHeap, (buffer)));
610 } 577 }
611 break; 578 break;
612 case PICT_REGION_BUFFER_TAG: {
613 fRegions = SkTRefArray<SkRegion>::Create(size);
614 for (size_t i = 0; i < size; ++i) {
615 buffer.readRegion(&fRegions->writableAt(i));
616 }
617 } break;
618 default: 579 default:
619 // The tag was invalid. 580 // The tag was invalid.
620 return false; 581 return false;
621 } 582 }
622 return true; // success 583 return true; // success
623 } 584 }
624 585
625 SkPicturePlayback* SkPicturePlayback::CreateFromStream(SkStream* stream, 586 SkPicturePlayback* SkPicturePlayback::CreateFromStream(SkStream* stream,
626 const SkPictInfo& info, 587 const SkPictInfo& info,
627 SkPicture::InstallPixelRe fProc proc) { 588 SkPicture::InstallPixelRe fProc proc) {
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 SkASSERT(!offsetToRestore || \ 776 SkASSERT(!offsetToRestore || \
816 offsetToRestore >= reader.offset()); 777 offsetToRestore >= reader.offset());
817 if (!canvas.clipPath(path, regionOp, doAA) && offsetToRestore) { 778 if (!canvas.clipPath(path, regionOp, doAA) && offsetToRestore) {
818 #ifdef SPEW_CLIP_SKIPPING 779 #ifdef SPEW_CLIP_SKIPPING
819 skipPath.recordSkip(offsetToRestore - reader.offset()); 780 skipPath.recordSkip(offsetToRestore - reader.offset());
820 #endif 781 #endif
821 reader.setOffset(offsetToRestore); 782 reader.setOffset(offsetToRestore);
822 } 783 }
823 } break; 784 } break;
824 case CLIP_REGION: { 785 case CLIP_REGION: {
825 const SkRegion& region = getRegion(reader); 786 SkRegion region;
787 this->getRegion(reader, &region);
826 uint32_t packed = reader.readInt(); 788 uint32_t packed = reader.readInt();
827 SkRegion::Op regionOp = ClipParams_unpackRegionOp(packed); 789 SkRegion::Op regionOp = ClipParams_unpackRegionOp(packed);
828 size_t offsetToRestore = reader.readInt(); 790 size_t offsetToRestore = reader.readInt();
829 SkASSERT(!offsetToRestore || \ 791 SkASSERT(!offsetToRestore || \
830 offsetToRestore >= reader.offset()); 792 offsetToRestore >= reader.offset());
831 if (!canvas.clipRegion(region, regionOp) && offsetToRestore) { 793 if (!canvas.clipRegion(region, regionOp) && offsetToRestore) {
832 #ifdef SPEW_CLIP_SKIPPING 794 #ifdef SPEW_CLIP_SKIPPING
833 skipRegion.recordSkip(offsetToRestore - reader.offset()); 795 skipRegion.recordSkip(offsetToRestore - reader.offset());
834 #endif 796 #endif
835 reader.setOffset(offsetToRestore); 797 reader.setOffset(offsetToRestore);
(...skipping 23 matching lines...) Expand all
859 size_t offsetToRestore = reader.readInt(); 821 size_t offsetToRestore = reader.readInt();
860 SkASSERT(!offsetToRestore || \ 822 SkASSERT(!offsetToRestore || \
861 offsetToRestore >= reader.offset()); 823 offsetToRestore >= reader.offset());
862 if (!canvas.clipRRect(rrect, regionOp, doAA) && offsetToRestore) { 824 if (!canvas.clipRRect(rrect, regionOp, doAA) && offsetToRestore) {
863 #ifdef SPEW_CLIP_SKIPPING 825 #ifdef SPEW_CLIP_SKIPPING
864 skipRRect.recordSkip(offsetToRestore - reader.offset()); 826 skipRRect.recordSkip(offsetToRestore - reader.offset());
865 #endif 827 #endif
866 reader.setOffset(offsetToRestore); 828 reader.setOffset(offsetToRestore);
867 } 829 }
868 } break; 830 } break;
869 case CONCAT: 831 case CONCAT: {
870 canvas.concat(*getMatrix(reader)); 832 SkMatrix matrix;
833 this->getMatrix(reader, &matrix);
834 canvas.concat(matrix);
871 break; 835 break;
836 }
872 case DRAW_BITMAP: { 837 case DRAW_BITMAP: {
873 const SkPaint* paint = getPaint(reader); 838 const SkPaint* paint = getPaint(reader);
874 const SkBitmap& bitmap = getBitmap(reader); 839 const SkBitmap& bitmap = getBitmap(reader);
875 const SkPoint& loc = reader.skipT<SkPoint>(); 840 const SkPoint& loc = reader.skipT<SkPoint>();
876 canvas.drawBitmap(bitmap, loc.fX, loc.fY, paint); 841 canvas.drawBitmap(bitmap, loc.fX, loc.fY, paint);
877 } break; 842 } break;
878 case DRAW_BITMAP_RECT_TO_RECT: { 843 case DRAW_BITMAP_RECT_TO_RECT: {
879 const SkPaint* paint = getPaint(reader); 844 const SkPaint* paint = getPaint(reader);
880 const SkBitmap& bitmap = getBitmap(reader); 845 const SkBitmap& bitmap = getBitmap(reader);
881 const SkRect* src = this->getRectPtr(reader); // may be null 846 const SkRect* src = this->getRectPtr(reader); // may be null
882 const SkRect& dst = reader.skipT<SkRect>(); // required 847 const SkRect& dst = reader.skipT<SkRect>(); // required
883 SkCanvas::DrawBitmapRectFlags flags; 848 SkCanvas::DrawBitmapRectFlags flags;
884 flags = (SkCanvas::DrawBitmapRectFlags) reader.readInt(); 849 flags = (SkCanvas::DrawBitmapRectFlags) reader.readInt();
885 canvas.drawBitmapRectToRect(bitmap, src, dst, paint, flags); 850 canvas.drawBitmapRectToRect(bitmap, src, dst, paint, flags);
886 } break; 851 } break;
887 case DRAW_BITMAP_MATRIX: { 852 case DRAW_BITMAP_MATRIX: {
888 const SkPaint* paint = getPaint(reader); 853 const SkPaint* paint = getPaint(reader);
889 const SkBitmap& bitmap = getBitmap(reader); 854 const SkBitmap& bitmap = getBitmap(reader);
890 const SkMatrix* matrix = getMatrix(reader); 855 SkMatrix matrix;
891 canvas.drawBitmapMatrix(bitmap, *matrix, paint); 856 this->getMatrix(reader, &matrix);
857 canvas.drawBitmapMatrix(bitmap, matrix, paint);
892 } break; 858 } break;
893 case DRAW_BITMAP_NINE: { 859 case DRAW_BITMAP_NINE: {
894 const SkPaint* paint = getPaint(reader); 860 const SkPaint* paint = getPaint(reader);
895 const SkBitmap& bitmap = getBitmap(reader); 861 const SkBitmap& bitmap = getBitmap(reader);
896 const SkIRect& src = reader.skipT<SkIRect>(); 862 const SkIRect& src = reader.skipT<SkIRect>();
897 const SkRect& dst = reader.skipT<SkRect>(); 863 const SkRect& dst = reader.skipT<SkRect>();
898 canvas.drawBitmapNine(bitmap, src, dst, paint); 864 canvas.drawBitmapNine(bitmap, src, dst, paint);
899 } break; 865 } break;
900 case DRAW_CLEAR: 866 case DRAW_CLEAR:
901 canvas.clear(reader.readInt()); 867 canvas.clear(reader.readInt());
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 // ptr[3] == bottom 978 // ptr[3] == bottom
1013 if (!canvas.quickRejectY(ptr[2], ptr[3])) { 979 if (!canvas.quickRejectY(ptr[2], ptr[3])) {
1014 canvas.drawText(text.text(), text.length(), ptr[0], ptr[1], 980 canvas.drawText(text.text(), text.length(), ptr[0], ptr[1],
1015 paint); 981 paint);
1016 } 982 }
1017 } break; 983 } break;
1018 case DRAW_TEXT_ON_PATH: { 984 case DRAW_TEXT_ON_PATH: {
1019 const SkPaint& paint = *getPaint(reader); 985 const SkPaint& paint = *getPaint(reader);
1020 getText(reader, &text); 986 getText(reader, &text);
1021 const SkPath& path = getPath(reader); 987 const SkPath& path = getPath(reader);
1022 const SkMatrix* matrix = getMatrix(reader); 988 SkMatrix matrix;
1023 canvas.drawTextOnPath(text.text(), text.length(), path, 989 this->getMatrix(reader, &matrix);
1024 matrix, paint); 990 canvas.drawTextOnPath(text.text(), text.length(), path, &matrix, paint);
1025 } break; 991 } break;
1026 case DRAW_VERTICES: { 992 case DRAW_VERTICES: {
1027 SkAutoTUnref<SkXfermode> xfer; 993 SkAutoTUnref<SkXfermode> xfer;
1028 const SkPaint& paint = *getPaint(reader); 994 const SkPaint& paint = *getPaint(reader);
1029 DrawVertexFlags flags = (DrawVertexFlags)reader.readInt(); 995 DrawVertexFlags flags = (DrawVertexFlags)reader.readInt();
1030 SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader.readIn t(); 996 SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader.readIn t();
1031 int vCount = reader.readInt(); 997 int vCount = reader.readInt();
1032 const SkPoint* verts = (const SkPoint*)reader.skip( 998 const SkPoint* verts = (const SkPoint*)reader.skip(
1033 vCount * sizeof(SkPoint)); 999 vCount * sizeof(SkPoint));
1034 const SkPoint* texs = NULL; 1000 const SkPoint* texs = NULL;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 const SkPaint* paint = getPaint(reader); 1038 const SkPaint* paint = getPaint(reader);
1073 canvas.saveLayer(boundsPtr, paint, (SkCanvas::SaveFlags) reader. readInt()); 1039 canvas.saveLayer(boundsPtr, paint, (SkCanvas::SaveFlags) reader. readInt());
1074 } break; 1040 } break;
1075 case SCALE: { 1041 case SCALE: {
1076 SkScalar sx = reader.readScalar(); 1042 SkScalar sx = reader.readScalar();
1077 SkScalar sy = reader.readScalar(); 1043 SkScalar sy = reader.readScalar();
1078 canvas.scale(sx, sy); 1044 canvas.scale(sx, sy);
1079 } break; 1045 } break;
1080 case SET_MATRIX: { 1046 case SET_MATRIX: {
1081 SkMatrix matrix; 1047 SkMatrix matrix;
1082 matrix.setConcat(initialMatrix, *getMatrix(reader)); 1048 this->getMatrix(reader, &matrix);
1049 matrix.postConcat(initialMatrix);
1083 canvas.setMatrix(matrix); 1050 canvas.setMatrix(matrix);
1084 } break; 1051 } break;
1085 case SKEW: { 1052 case SKEW: {
1086 SkScalar sx = reader.readScalar(); 1053 SkScalar sx = reader.readScalar();
1087 SkScalar sy = reader.readScalar(); 1054 SkScalar sy = reader.readScalar();
1088 canvas.skew(sx, sy); 1055 canvas.skew(sx, sy);
1089 } break; 1056 } break;
1090 case TRANSLATE: { 1057 case TRANSLATE: {
1091 SkScalar dx = reader.readScalar(); 1058 SkScalar dx = reader.readScalar();
1092 SkScalar dy = reader.readScalar(); 1059 SkScalar dy = reader.readScalar();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 1122
1156 int SkPicturePlayback::paths(size_t* size) { 1123 int SkPicturePlayback::paths(size_t* size) {
1157 size_t result = 0; 1124 size_t result = 0;
1158 for (int index = 0; index < fPathCount; index++) { 1125 for (int index = 0; index < fPathCount; index++) {
1159 const SkPath& path = fPaths[index]; 1126 const SkPath& path = fPaths[index];
1160 result += path.flatten(NULL); 1127 result += path.flatten(NULL);
1161 } 1128 }
1162 *size = result; 1129 *size = result;
1163 return fPathCount; 1130 return fPathCount;
1164 } 1131 }
1165
1166 int SkPicturePlayback::regions(size_t* size) {
1167 size_t result = 0;
1168 for (int index = 0; index < fRegionCount; index++) {
1169 // const SkRegion& region = fRegions[index];
1170 result += sizeof(SkRegion); // region->size();
1171 }
1172 *size = result;
1173 return fRegionCount;
1174 }
1175 #endif 1132 #endif
1176 1133
1177 #ifdef SK_DEBUG_DUMP 1134 #ifdef SK_DEBUG_DUMP
1178 void SkPicturePlayback::dumpBitmap(const SkBitmap& bitmap) const { 1135 void SkPicturePlayback::dumpBitmap(const SkBitmap& bitmap) const {
1179 char pBuffer[DUMP_BUFFER_SIZE]; 1136 char pBuffer[DUMP_BUFFER_SIZE];
1180 char* bufferPtr = pBuffer; 1137 char* bufferPtr = pBuffer;
1181 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer), 1138 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer),
1182 "BitmapData bitmap%p = {", &bitmap); 1139 "BitmapData bitmap%p = {", &bitmap);
1183 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer), 1140 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer),
1184 "{kWidth, %d}, ", bitmap.width()); 1141 "{kWidth, %d}, ", bitmap.width());
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 while (fReadStream.read(&drawType, sizeof(drawType))) { 1421 while (fReadStream.read(&drawType, sizeof(drawType))) {
1465 bufferPtr = buffer; 1422 bufferPtr = buffer;
1466 DUMP_DRAWTYPE(drawType); 1423 DUMP_DRAWTYPE(drawType);
1467 switch (drawType) { 1424 switch (drawType) {
1468 case CLIP_PATH: { 1425 case CLIP_PATH: {
1469 DUMP_PTR(SkPath, &getPath()); 1426 DUMP_PTR(SkPath, &getPath());
1470 DUMP_INT(SkRegion::Op); 1427 DUMP_INT(SkRegion::Op);
1471 DUMP_INT(offsetToRestore); 1428 DUMP_INT(offsetToRestore);
1472 } break; 1429 } break;
1473 case CLIP_REGION: { 1430 case CLIP_REGION: {
1474 DUMP_PTR(SkRegion, &getRegion());
1475 DUMP_INT(SkRegion::Op); 1431 DUMP_INT(SkRegion::Op);
1476 DUMP_INT(offsetToRestore); 1432 DUMP_INT(offsetToRestore);
1477 } break; 1433 } break;
1478 case CLIP_RECT: { 1434 case CLIP_RECT: {
1479 DUMP_RECT(rect); 1435 DUMP_RECT(rect);
1480 DUMP_INT(SkRegion::Op); 1436 DUMP_INT(SkRegion::Op);
1481 DUMP_INT(offsetToRestore); 1437 DUMP_INT(offsetToRestore);
1482 } break; 1438 } break;
1483 case CONCAT: 1439 case CONCAT:
1484 DUMP_PTR(SkMatrix, getMatrix());
1485 break; 1440 break;
1486 case DRAW_BITMAP: { 1441 case DRAW_BITMAP: {
1487 DUMP_PTR(SkPaint, getPaint()); 1442 DUMP_PTR(SkPaint, getPaint());
1488 DUMP_PTR(SkBitmap, &getBitmap()); 1443 DUMP_PTR(SkBitmap, &getBitmap());
1489 DUMP_SCALAR(left); 1444 DUMP_SCALAR(left);
1490 DUMP_SCALAR(top); 1445 DUMP_SCALAR(top);
1491 } break; 1446 } break;
1492 case DRAW_PAINT: 1447 case DRAW_PAINT:
1493 DUMP_PTR(SkPaint, getPaint()); 1448 DUMP_PTR(SkPaint, getPaint());
1494 break; 1449 break;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1536 case DRAW_TEXT: { 1491 case DRAW_TEXT: {
1537 DUMP_PTR(SkPaint, getPaint()); 1492 DUMP_PTR(SkPaint, getPaint());
1538 DUMP_TEXT(); 1493 DUMP_TEXT();
1539 DUMP_SCALAR(x); 1494 DUMP_SCALAR(x);
1540 DUMP_SCALAR(y); 1495 DUMP_SCALAR(y);
1541 } break; 1496 } break;
1542 case DRAW_TEXT_ON_PATH: { 1497 case DRAW_TEXT_ON_PATH: {
1543 DUMP_PTR(SkPaint, getPaint()); 1498 DUMP_PTR(SkPaint, getPaint());
1544 DUMP_TEXT(); 1499 DUMP_TEXT();
1545 DUMP_PTR(SkPath, &getPath()); 1500 DUMP_PTR(SkPath, &getPath());
1546 DUMP_PTR(SkMatrix, getMatrix());
1547 } break; 1501 } break;
1548 case RESTORE: 1502 case RESTORE:
1549 break; 1503 break;
1550 case ROTATE: 1504 case ROTATE:
1551 DUMP_SCALAR(rotate); 1505 DUMP_SCALAR(rotate);
1552 break; 1506 break;
1553 case SAVE: 1507 case SAVE:
1554 DUMP_INT(SkCanvas::SaveFlags); 1508 DUMP_INT(SkCanvas::SaveFlags);
1555 break; 1509 break;
1556 case SAVE_LAYER: { 1510 case SAVE_LAYER: {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1589 } 1543 }
1590 if (fBitmapCount > 0) 1544 if (fBitmapCount > 0)
1591 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ), 1545 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
1592 "Bitmaps bitmaps = {"); 1546 "Bitmaps bitmaps = {");
1593 for (index = 0; index < fBitmapCount; index++) 1547 for (index = 0; index < fBitmapCount; index++)
1594 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ), 1548 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
1595 "bitmap%p, ", &fBitmaps[index]); 1549 "bitmap%p, ", &fBitmaps[index]);
1596 if (fBitmapCount > 0) 1550 if (fBitmapCount > 0)
1597 SkDebugf("%s0};\n", pBuffer); 1551 SkDebugf("%s0};\n", pBuffer);
1598 1552
1599 if (fMatrixCount > 0)
1600 SkDebugf("// matrices (%d)\n", fMatrixCount);
1601 for (index = 0; index < fMatrixCount; index++) {
1602 const SkMatrix& matrix = fMatrices[index];
1603 dumpMatrix(matrix);
1604 }
1605 bufferPtr = pBuffer;
1606 if (fMatrixCount > 0)
1607 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
1608 "Matrices matrices = {");
1609 for (index = 0; index < fMatrixCount; index++)
1610 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
1611 "matrix%p, ", &fMatrices[index]);
1612 if (fMatrixCount > 0)
1613 SkDebugf("%s0};\n", pBuffer);
1614 1553
1615 if (fPaintCount > 0) 1554 if (fPaintCount > 0)
1616 SkDebugf("// paints (%d)\n", fPaintCount); 1555 SkDebugf("// paints (%d)\n", fPaintCount);
1617 for (index = 0; index < fPaintCount; index++) { 1556 for (index = 0; index < fPaintCount; index++) {
1618 const SkPaint& paint = fPaints[index]; 1557 const SkPaint& paint = fPaints[index];
1619 dumpPaint(paint); 1558 dumpPaint(paint);
1620 } 1559 }
1621 bufferPtr = pBuffer; 1560 bufferPtr = pBuffer;
1622 if (fPaintCount > 0) 1561 if (fPaintCount > 0)
1623 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ), 1562 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
(...skipping 24 matching lines...) Expand all
1648 bufferPtr = pBuffer; 1587 bufferPtr = pBuffer;
1649 if (fPictureCount > 0) 1588 if (fPictureCount > 0)
1650 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ), 1589 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
1651 "Pictures pictures = {"); 1590 "Pictures pictures = {");
1652 for (index = 0; index < fPictureCount; index++) 1591 for (index = 0; index < fPictureCount; index++)
1653 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ), 1592 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
1654 "picture%p, ", fPictureRefs[index]); 1593 "picture%p, ", fPictureRefs[index]);
1655 if (fPictureCount > 0) 1594 if (fPictureCount > 0)
1656 SkDebugf("%s0};\n", pBuffer); 1595 SkDebugf("%s0};\n", pBuffer);
1657 1596
1658 for (index = 0; index < fRegionCount; index++) {
1659 const SkRegion& region = fRegions[index];
1660 dumpRegion(region);
1661 }
1662 bufferPtr = pBuffer;
1663 if (fRegionCount > 0)
1664 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
1665 "Regions regions = {");
1666 for (index = 0; index < fRegionCount; index++)
1667 bufferPtr += snprintf(bufferPtr, DUMP_BUFFER_SIZE - (bufferPtr - pBuffer ),
1668 "region%p, ", &fRegions[index]);
1669 if (fRegionCount > 0)
1670 SkDebugf("%s0};\n", pBuffer);
1671
1672 const_cast<SkPicturePlayback*>(this)->dumpStream(); 1597 const_cast<SkPicturePlayback*>(this)->dumpStream();
1673 } 1598 }
1674 1599
1675 #endif 1600 #endif
OLDNEW
« no previous file with comments | « src/core/SkPicturePlayback.h ('k') | src/core/SkPictureRecord.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698