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

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

Issue 2187613002: Deserialize pictures with custom image-deserializer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix build Created 4 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
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 "SkCanvas.h" 8 #include "SkCanvas.h"
9 #include "SkPatchUtils.h" 9 #include "SkPatchUtils.h"
10 #include "SkPictureData.h" 10 #include "SkPictureData.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 const void* text() { return (const void*)fText; } 73 const void* text() { return (const void*)fText; }
74 size_t fByteLength; 74 size_t fByteLength;
75 const char* fText; 75 const char* fText;
76 }; 76 };
77 77
78 void get_text(SkReadBuffer* reader, TextContainer* text) { 78 void get_text(SkReadBuffer* reader, TextContainer* text) {
79 size_t length = text->fByteLength = reader->readInt(); 79 size_t length = text->fByteLength = reader->readInt();
80 text->fText = (const char*)reader->skip(length); 80 text->fText = (const char*)reader->skip(length);
81 } 81 }
82 82
83 // FIXME: SkBitmaps are stateful, so we need to copy them to play back in multip le threads.
84 static SkBitmap shallow_copy(const SkBitmap& bitmap) {
85 return bitmap;
86 }
87
88 void SkPicturePlayback::draw(SkCanvas* canvas, 83 void SkPicturePlayback::draw(SkCanvas* canvas,
89 SkPicture::AbortCallback* callback, 84 SkPicture::AbortCallback* callback,
90 const SkReadBuffer* buffer) { 85 const SkReadBuffer* buffer) {
91 AutoResetOpID aroi(this); 86 AutoResetOpID aroi(this);
92 SkASSERT(0 == fCurOffset); 87 SkASSERT(0 == fCurOffset);
93 88
94 SkAutoTDelete<SkReadBuffer> reader; 89 SkAutoTDelete<SkReadBuffer> reader;
95 if (buffer) { 90 if (buffer) {
96 reader.reset(buffer->clone(fPictureData->opData()->bytes(), 91 reader.reset(buffer->clone(fPictureData->opData()->bytes(),
97 fPictureData->opData()->size())); 92 fPictureData->opData()->size()));
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 mode = (SkXfermode::Mode)reader->readUInt(); 202 mode = (SkXfermode::Mode)reader->readUInt();
208 } 203 }
209 const SkRect* cull = nullptr; 204 const SkRect* cull = nullptr;
210 if (flags & DRAW_ATLAS_HAS_CULL) { 205 if (flags & DRAW_ATLAS_HAS_CULL) {
211 cull = (const SkRect*)reader->skip(sizeof(SkRect)); 206 cull = (const SkRect*)reader->skip(sizeof(SkRect));
212 } 207 }
213 canvas->drawAtlas(atlas, xform, tex, colors, count, mode, cull, pain t); 208 canvas->drawAtlas(atlas, xform, tex, colors, count, mode, cull, pain t);
214 } break; 209 } break;
215 case DRAW_BITMAP: { 210 case DRAW_BITMAP: {
216 const SkPaint* paint = fPictureData->getPaint(reader); 211 const SkPaint* paint = fPictureData->getPaint(reader);
217 const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader) ); 212 const SkImage* image = fPictureData->getBitmapAsImage(reader);
218 SkPoint loc; 213 SkPoint loc;
219 reader->readPoint(&loc); 214 reader->readPoint(&loc);
220 canvas->drawBitmap(bitmap, loc.fX, loc.fY, paint); 215 canvas->drawImage(image, loc.fX, loc.fY, paint);
221 } break; 216 } break;
222 case DRAW_BITMAP_RECT: { 217 case DRAW_BITMAP_RECT: {
223 const SkPaint* paint = fPictureData->getPaint(reader); 218 const SkPaint* paint = fPictureData->getPaint(reader);
224 const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader) ); 219 const SkImage* image = fPictureData->getBitmapAsImage(reader);
225 SkRect storage; 220 SkRect storage;
226 const SkRect* src = get_rect_ptr(reader, &storage); // may be null 221 const SkRect* src = get_rect_ptr(reader, &storage); // may be null
227 SkRect dst; 222 SkRect dst;
228 reader->readRect(&dst); // required 223 reader->readRect(&dst); // required
229 SkCanvas::SrcRectConstraint constraint = (SkCanvas::SrcRectConstrain t)reader->readInt(); 224 SkCanvas::SrcRectConstraint constraint = (SkCanvas::SrcRectConstrain t)reader->readInt();
230 canvas->legacy_drawBitmapRect(bitmap, src, dst, paint, constraint); 225 if (src) {
226 canvas->drawImageRect(image, *src, dst, paint, constraint);
227 } else {
228 canvas->drawImageRect(image, dst, paint, constraint);
229 }
231 } break; 230 } break;
232 case DRAW_BITMAP_MATRIX: { 231 case DRAW_BITMAP_MATRIX: {
233 const SkPaint* paint = fPictureData->getPaint(reader); 232 const SkPaint* paint = fPictureData->getPaint(reader);
234 const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader) ); 233 const SkImage* image = fPictureData->getBitmapAsImage(reader);
235 SkMatrix matrix; 234 SkMatrix matrix;
236 reader->readMatrix(&matrix); 235 reader->readMatrix(&matrix);
237 236
238 SkAutoCanvasRestore acr(canvas, true); 237 SkAutoCanvasRestore acr(canvas, true);
239 canvas->concat(matrix); 238 canvas->concat(matrix);
240 canvas->drawBitmap(bitmap, 0, 0, paint); 239 canvas->drawImage(image, 0, 0, paint);
241 } break; 240 } break;
242 case DRAW_BITMAP_NINE: { 241 case DRAW_BITMAP_NINE: {
243 const SkPaint* paint = fPictureData->getPaint(reader); 242 const SkPaint* paint = fPictureData->getPaint(reader);
244 const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader) ); 243 const SkImage* image = fPictureData->getBitmapAsImage(reader);
245 SkIRect src; 244 SkIRect src;
246 reader->readIRect(&src); 245 reader->readIRect(&src);
247 SkRect dst; 246 SkRect dst;
248 reader->readRect(&dst); 247 reader->readRect(&dst);
249 canvas->drawBitmapNine(bitmap, src, dst, paint); 248 canvas->drawImageNine(image, src, dst, paint);
250 } break; 249 } break;
251 case DRAW_CLEAR: 250 case DRAW_CLEAR:
252 canvas->clear(reader->readInt()); 251 canvas->clear(reader->readInt());
253 break; 252 break;
254 case DRAW_DATA: { 253 case DRAW_DATA: {
255 // This opcode is now dead, just need to skip it for backwards compa tibility 254 // This opcode is now dead, just need to skip it for backwards compa tibility
256 size_t length = reader->readInt(); 255 size_t length = reader->readInt();
257 (void)reader->skip(length); 256 (void)reader->skip(length);
258 // skip handles padding the read out to a multiple of 4 257 // skip handles padding the read out to a multiple of 4
259 } break; 258 } break;
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 case DRAW_RRECT: { 457 case DRAW_RRECT: {
459 const SkPaint* paint = fPictureData->getPaint(reader); 458 const SkPaint* paint = fPictureData->getPaint(reader);
460 SkRRect rrect; 459 SkRRect rrect;
461 reader->readRRect(&rrect); 460 reader->readRRect(&rrect);
462 if (paint) { 461 if (paint) {
463 canvas->drawRRect(rrect, *paint); 462 canvas->drawRRect(rrect, *paint);
464 } 463 }
465 } break; 464 } break;
466 case DRAW_SPRITE: { 465 case DRAW_SPRITE: {
467 /* const SkPaint* paint = */ fPictureData->getPaint(reader); 466 /* const SkPaint* paint = */ fPictureData->getPaint(reader);
468 /* const SkBitmap bitmap = */ shallow_copy(fPictureData->getBitmap(r eader)); 467 /* const SkImage* image = */ fPictureData->getBitmapAsImage(reader);
469 /* int left = */ reader->readInt(); 468 /* int left = */ reader->readInt();
470 /* int top = */ reader->readInt(); 469 /* int top = */ reader->readInt();
471 // drawSprite removed dec-2015 470 // drawSprite removed dec-2015
472 } break; 471 } break;
473 case DRAW_TEXT: { 472 case DRAW_TEXT: {
474 const SkPaint* paint = fPictureData->getPaint(reader); 473 const SkPaint* paint = fPictureData->getPaint(reader);
475 TextContainer text; 474 TextContainer text;
476 get_text(reader, &text); 475 get_text(reader, &text);
477 SkScalar x = reader->readScalar(); 476 SkScalar x = reader->readScalar();
478 SkScalar y = reader->readScalar(); 477 SkScalar y = reader->readScalar();
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 case TRANSLATE_Z: { 630 case TRANSLATE_Z: {
632 #ifdef SK_EXPERIMENTAL_SHADOWING 631 #ifdef SK_EXPERIMENTAL_SHADOWING
633 SkScalar dz = reader->readScalar(); 632 SkScalar dz = reader->readScalar();
634 canvas->translateZ(dz); 633 canvas->translateZ(dz);
635 #endif 634 #endif
636 } break; 635 } break;
637 default: 636 default:
638 SkASSERTF(false, "Unknown draw type: %d", op); 637 SkASSERTF(false, "Unknown draw type: %d", op);
639 } 638 }
640 } 639 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698