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

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

Issue 113193003: Revert of remvoe duplicate impl for SkImageInfo flattening (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « samplecode/SamplePicture.cpp ('k') | src/core/SkBitmapDevice.cpp » ('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 2008 The Android Open Source Project 3 * Copyright 2008 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 "SkBitmap.h" 10 #include "SkBitmap.h"
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 bool SkBitmap::lockPixelsAreWritable() const { 446 bool SkBitmap::lockPixelsAreWritable() const {
447 return (fPixelRef) ? fPixelRef->lockPixelsAreWritable() : false; 447 return (fPixelRef) ? fPixelRef->lockPixelsAreWritable() : false;
448 } 448 }
449 449
450 void SkBitmap::setPixels(void* p, SkColorTable* ctable) { 450 void SkBitmap::setPixels(void* p, SkColorTable* ctable) {
451 if (NULL == p) { 451 if (NULL == p) {
452 this->setPixelRef(NULL, 0); 452 this->setPixelRef(NULL, 0);
453 return; 453 return;
454 } 454 }
455 455
456 SkImageInfo info; 456 Sk64 size = this->getSize64();
457 if (!this->asImageInfo(&info)) { 457 SkASSERT(!size.isNeg() && size.is32());
458 this->setPixelRef(NULL, 0);
459 return;
460 }
461 458
462 SkPixelRef* pr = SkMallocPixelRef::NewDirect(info, p, fRowBytes, ctable); 459 this->setPixelRef(new SkMallocPixelRef(p, size.get32(), ctable, false))->unr ef();
463 if (NULL == pr) {
464 this->setPixelRef(NULL, 0);
465 return;
466 }
467
468 this->setPixelRef(pr)->unref();
469
470 // since we're already allocated, we lockPixels right away 460 // since we're already allocated, we lockPixels right away
471 this->lockPixels(); 461 this->lockPixels();
472 SkDEBUGCODE(this->validate();) 462 SkDEBUGCODE(this->validate();)
473 } 463 }
474 464
475 bool SkBitmap::allocPixels(Allocator* allocator, SkColorTable* ctable) { 465 bool SkBitmap::allocPixels(Allocator* allocator, SkColorTable* ctable) {
476 HeapAllocator stdalloc; 466 HeapAllocator stdalloc;
477 467
478 if (NULL == allocator) { 468 if (NULL == allocator) {
479 allocator = &stdalloc; 469 allocator = &stdalloc;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 return fPixelRef ? fPixelRef->getTexture() : NULL; 514 return fPixelRef ? fPixelRef->getTexture() : NULL;
525 } 515 }
526 516
527 /////////////////////////////////////////////////////////////////////////////// 517 ///////////////////////////////////////////////////////////////////////////////
528 518
529 /** We explicitly use the same allocator for our pixels that SkMask does, 519 /** We explicitly use the same allocator for our pixels that SkMask does,
530 so that we can freely assign memory allocated by one class to the other. 520 so that we can freely assign memory allocated by one class to the other.
531 */ 521 */
532 bool SkBitmap::HeapAllocator::allocPixelRef(SkBitmap* dst, 522 bool SkBitmap::HeapAllocator::allocPixelRef(SkBitmap* dst,
533 SkColorTable* ctable) { 523 SkColorTable* ctable) {
534 SkImageInfo info; 524 Sk64 size = dst->getSize64();
535 if (!dst->asImageInfo(&info)) { 525 if (size.isNeg() || !size.is32()) {
536 // SkDebugf("unsupported config for info %d\n", dst->config());
537 return false;
538 }
539
540 SkPixelRef* pr = SkMallocPixelRef::NewAllocate(info, dst->rowBytes(),
541 ctable);
542 if (NULL == pr) {
543 return false; 526 return false;
544 } 527 }
545 528
546 dst->setPixelRef(pr, 0)->unref(); 529 void* addr = sk_malloc_flags(size.get32(), 0); // returns NULL on failure
530 if (NULL == addr) {
531 return false;
532 }
533
534 dst->setPixelRef(new SkMallocPixelRef(addr, size.get32(), ctable))->unref();
547 // since we're already allocated, we lockPixels right away 535 // since we're already allocated, we lockPixels right away
548 dst->lockPixels(); 536 dst->lockPixels();
549 return true; 537 return true;
550 } 538 }
551 539
552 /////////////////////////////////////////////////////////////////////////////// 540 ///////////////////////////////////////////////////////////////////////////////
553 541
554 size_t SkBitmap::getSafeSize() const { 542 size_t SkBitmap::getSafeSize() const {
555 // This is intended to be a size_t version of ComputeSafeSize64(), just 543 // This is intended to be a size_t version of ComputeSafeSize64(), just
556 // faster. The computation is meant to be identical. 544 // faster. The computation is meant to be identical.
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1711 if (NULL != uri) { 1699 if (NULL != uri) {
1712 str->appendf(" uri:\"%s\"", uri); 1700 str->appendf(" uri:\"%s\"", uri);
1713 } else { 1701 } else {
1714 str->appendf(" pixelref:%p", pr); 1702 str->appendf(" pixelref:%p", pr);
1715 } 1703 }
1716 } 1704 }
1717 1705
1718 str->append(")"); 1706 str->append(")");
1719 } 1707 }
1720 #endif 1708 #endif
OLDNEW
« no previous file with comments | « samplecode/SamplePicture.cpp ('k') | src/core/SkBitmapDevice.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698