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

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

Issue 568683002: use SkData::NewUninitialized (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: add SkStream::readIntoData Created 6 years, 3 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 2011 Google Inc. 2 * Copyright 2011 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 #include <new> 7 #include <new>
8 #include "SkBBoxHierarchy.h" 8 #include "SkBBoxHierarchy.h"
9 #include "SkDrawPictureCallback.h" 9 #include "SkDrawPictureCallback.h"
10 #include "SkPictureData.h" 10 #include "SkPictureData.h"
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 * its dependents: FACTORY_TAG and TYPEFACE_TAG. These two are not required 383 * its dependents: FACTORY_TAG and TYPEFACE_TAG. These two are not required
384 * but if they are present, they need to have been seen before the buffer. 384 * but if they are present, they need to have been seen before the buffer.
385 * 385 *
386 * We assert that if/when we see either of these, that we have not yet seen 386 * We assert that if/when we see either of these, that we have not yet seen
387 * the buffer tag, because if we have, then its too-late to deal with the 387 * the buffer tag, because if we have, then its too-late to deal with the
388 * factories or typefaces. 388 * factories or typefaces.
389 */ 389 */
390 SkDEBUGCODE(bool haveBuffer = false;) 390 SkDEBUGCODE(bool haveBuffer = false;)
391 391
392 switch (tag) { 392 switch (tag) {
393 case SK_PICT_READER_TAG: { 393 case SK_PICT_READER_TAG:
394 SkAutoMalloc storage(size); 394 SkASSERT(NULL == fOpData);
395 if (stream->read(storage.get(), size) != size) { 395 fOpData = stream->readIntoData(size);
396 if (!fOpData) {
396 return false; 397 return false;
397 } 398 }
398 SkASSERT(NULL == fOpData); 399 break;
399 fOpData = SkData::NewFromMalloc(storage.detach(), size);
400 } break;
401 case SK_PICT_FACTORY_TAG: { 400 case SK_PICT_FACTORY_TAG: {
402 SkASSERT(!haveBuffer); 401 SkASSERT(!haveBuffer);
403 // Remove this code when v21 and below are no longer supported. At the 402 // Remove this code when v21 and below are no longer supported. At the
404 // same time add a new 'count' variable and use it rather then reusing ' size'. 403 // same time add a new 'count' variable and use it rather then reusing ' size'.
405 #ifndef DISABLE_V21_COMPATIBILITY_CODE 404 #ifndef DISABLE_V21_COMPATIBILITY_CODE
406 if (fInfo.fVersion >= 22) { 405 if (fInfo.fVersion >= 22) {
407 // in v22 this tag's size represents the size of the chunk in by tes 406 // in v22 this tag's size represents the size of the chunk in by tes
408 // and the number of factory strings is written out separately 407 // and the number of factory strings is written out separately
409 #endif 408 #endif
410 size = stream->readU32(); 409 size = stream->readU32();
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 fTextBlobRefs[j]->unref(); 530 fTextBlobRefs[j]->unref();
532 } 531 }
533 // Delete the array 532 // Delete the array
534 SkDELETE_ARRAY(fTextBlobRefs); 533 SkDELETE_ARRAY(fTextBlobRefs);
535 fTextBlobRefs = NULL; 534 fTextBlobRefs = NULL;
536 fTextBlobCount = 0; 535 fTextBlobCount = 0;
537 return false; 536 return false;
538 } 537 }
539 } break; 538 } break;
540 case SK_PICT_READER_TAG: { 539 case SK_PICT_READER_TAG: {
541 SkAutoMalloc storage(size); 540 SkAutoDataUnref data(SkData::NewUninitialized(size));
542 if (!buffer.readByteArray(storage.get(), size) || 541 if (!buffer.readByteArray(data->writable_data(), size) ||
543 !buffer.validate(NULL == fOpData)) { 542 !buffer.validate(NULL == fOpData)) {
544 return false; 543 return false;
545 } 544 }
546 SkASSERT(NULL == fOpData); 545 SkASSERT(NULL == fOpData);
547 fOpData = SkData::NewFromMalloc(storage.detach(), size); 546 fOpData = data.detach();
548 } break; 547 } break;
549 case SK_PICT_PICTURE_TAG: { 548 case SK_PICT_PICTURE_TAG: {
550 if (!buffer.validate((0 == fPictureCount) && (NULL == fPictureRefs)) ) { 549 if (!buffer.validate((0 == fPictureCount) && (NULL == fPictureRefs)) ) {
551 return false; 550 return false;
552 } 551 }
553 fPictureCount = size; 552 fPictureCount = size;
554 fPictureRefs = SkNEW_ARRAY(const SkPicture*, fPictureCount); 553 fPictureRefs = SkNEW_ARRAY(const SkPicture*, fPictureCount);
555 bool success = true; 554 bool success = true;
556 int i = 0; 555 int i = 0;
557 for ( ; i < fPictureCount; i++) { 556 for ( ; i < fPictureCount; i++) {
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 } 661 }
663 } 662 }
664 663
665 bool SkPictureData::suitableForLayerOptimization() const { 664 bool SkPictureData::suitableForLayerOptimization() const {
666 return fContentInfo.numLayers() > 0; 665 return fContentInfo.numLayers() > 0;
667 } 666 }
668 #endif 667 #endif
669 /////////////////////////////////////////////////////////////////////////////// 668 ///////////////////////////////////////////////////////////////////////////////
670 669
671 670
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698