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/SkPicture.cpp

Issue 138063005: Serialization of SkPictureImageFilter (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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
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 #include "SkPictureFlat.h" 10 #include "SkPictureFlat.h"
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 ) { 291 ) {
292 return false; 292 return false;
293 } 293 }
294 294
295 if (pInfo != NULL) { 295 if (pInfo != NULL) {
296 *pInfo = info; 296 *pInfo = info;
297 } 297 }
298 return true; 298 return true;
299 } 299 }
300 300
301 bool SkPicture::BufferIsSKP(SkFlattenableReadBuffer& buffer, SkPictInfo* pInfo) {
302 // Check magic bytes.
303 char magic[sizeof(kMagic)];
304
305 if (!buffer.readByteArray(magic, sizeof(kMagic)) ||
306 (0 != memcmp(magic, kMagic, sizeof(kMagic)))) {
307 return false;
308 }
309
310 SkPictInfo info;
311 if (!buffer.readByteArray(&info, sizeof(SkPictInfo))) {
312 return false;
313 }
314
315 if (PICTURE_VERSION != info.fVersion
316 #ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V16_AND_ALL_OTHER_INSTANCES_TO O
Stephen White 2014/01/15 14:59:02 Considering that this will be the first time that
sugoi 2014/01/15 16:49:22 Done.
317 // V16 is backwards compatible with V15
318 && PRIOR_PICTURE_VERSION != info.fVersion // TODO: remove when .skps re generated
319 #endif
320 ) {
321 return false;
322 }
323
324 if (pInfo != NULL) {
325 *pInfo = info;
326 }
327 return true;
328 }
329
301 SkPicture::SkPicture(SkPicturePlayback* playback, int width, int height) 330 SkPicture::SkPicture(SkPicturePlayback* playback, int width, int height)
302 : fPlayback(playback) 331 : fPlayback(playback)
303 , fRecord(NULL) 332 , fRecord(NULL)
304 , fWidth(width) 333 , fWidth(width)
305 , fHeight(height) {} 334 , fHeight(height) {}
306 335
307 SkPicture* SkPicture::CreateFromStream(SkStream* stream, InstallPixelRefProc pro c) { 336 SkPicture* SkPicture::CreateFromStream(SkStream* stream, InstallPixelRefProc pro c) {
308 SkPictInfo info; 337 SkPictInfo info;
309 338
310 if (!StreamIsSKP(stream, &info)) { 339 if (!StreamIsSKP(stream, &info)) {
311 return NULL; 340 return NULL;
312 } 341 }
313 342
314 SkPicturePlayback* playback; 343 SkPicturePlayback* playback;
315 // Check to see if there is a playback to recreate. 344 // Check to see if there is a playback to recreate.
316 if (stream->readBool()) { 345 if (stream->readBool()) {
317 playback = SkPicturePlayback::CreateFromStream(stream, info, proc); 346 playback = SkPicturePlayback::CreateFromStream(stream, info, proc);
318 if (NULL == playback) { 347 if (NULL == playback) {
319 return NULL; 348 return NULL;
320 } 349 }
321 } else { 350 } else {
322 playback = NULL; 351 playback = NULL;
323 } 352 }
324 353
325 return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight)); 354 return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight));
326 } 355 }
327 356
357 SkPicture* SkPicture::CreateFromBuffer(SkFlattenableReadBuffer& buffer) {
358 SkPictInfo info;
359
360 if (!BufferIsSKP(buffer, &info)) {
361 return NULL;
362 }
363
364 SkPicturePlayback* playback;
365 // Check to see if there is a playback to recreate.
366 if (buffer.readBool()) {
367 playback = SkPicturePlayback::CreateFromBuffer(buffer);
368 if (NULL == playback) {
369 return NULL;
370 }
371 } else {
372 playback = NULL;
373 }
374
375 return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight));
376 }
377
328 void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { 378 void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const {
329 SkPicturePlayback* playback = fPlayback; 379 SkPicturePlayback* playback = fPlayback;
330 380
331 if (NULL == playback && fRecord) { 381 if (NULL == playback && fRecord) {
332 playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); 382 playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord));
333 } 383 }
334 384
335 SkPictInfo info; 385 SkPictInfo info;
336 386
337 info.fVersion = PICTURE_VERSION; 387 info.fVersion = PICTURE_VERSION;
(...skipping 17 matching lines...) Expand all
355 playback->serialize(stream, encoder); 405 playback->serialize(stream, encoder);
356 // delete playback if it is a local version (i.e. cons'd up just now) 406 // delete playback if it is a local version (i.e. cons'd up just now)
357 if (playback != fPlayback) { 407 if (playback != fPlayback) {
358 SkDELETE(playback); 408 SkDELETE(playback);
359 } 409 }
360 } else { 410 } else {
361 stream->writeBool(false); 411 stream->writeBool(false);
362 } 412 }
363 } 413 }
364 414
415 void SkPicture::flatten(SkFlattenableWriteBuffer& buffer) const {
416 SkPicturePlayback* playback = fPlayback;
417
418 if (NULL == playback && fRecord) {
419 playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord));
420 }
421
422 SkPictInfo info;
423
424 info.fVersion = PICTURE_VERSION;
425 info.fWidth = fWidth;
426 info.fHeight = fHeight;
427 info.fFlags = SkPictInfo::kCrossProcess_Flag;
428 // TODO: remove this flag, since we're always float (now)
429 info.fFlags |= SkPictInfo::kScalarIsFloat_Flag;
430
431 if (8 == sizeof(void*)) {
432 info.fFlags |= SkPictInfo::kPtrIs64Bit_Flag;
433 }
434
435 // Write 8 magic bytes to ID this file format.
436 SkASSERT(sizeof(kMagic) == 8);
437 buffer.writeByteArray(kMagic, sizeof(kMagic));
438
439 buffer.writeByteArray(&info, sizeof(info));
440 if (playback) {
441 buffer.writeBool(true);
442 playback->flatten(buffer);
443 // delete playback if it is a local version (i.e. cons'd up just now)
444 if (playback != fPlayback) {
445 SkDELETE(playback);
446 }
447 } else {
448 buffer.writeBool(false);
449 }
450 }
451
365 bool SkPicture::willPlayBackBitmaps() const { 452 bool SkPicture::willPlayBackBitmaps() const {
366 if (!fPlayback) return false; 453 if (!fPlayback) return false;
367 return fPlayback->containsBitmaps(); 454 return fPlayback->containsBitmaps();
368 } 455 }
369 456
370 #ifdef SK_BUILD_FOR_ANDROID 457 #ifdef SK_BUILD_FOR_ANDROID
371 void SkPicture::abortPlayback() { 458 void SkPicture::abortPlayback() {
372 if (NULL == fPlayback) { 459 if (NULL == fPlayback) {
373 return; 460 return;
374 } 461 }
375 fPlayback->abort(); 462 fPlayback->abort();
376 } 463 }
377 #endif 464 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698