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

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

Issue 2309483002: WIP RasterCanvasLayerAllocator experiment 2
Patch Set: support initial data? Created 4 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 2008 The Android Open Source Project 2 * Copyright 2008 The Android Open Source Project
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 "SkBitmapDevice.h" 8 #include "SkBitmapDevice.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkCanvasPriv.h" 10 #include "SkCanvasPriv.h"
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 fDeviceClipBounds = qr_clip_bounds(device->getGlobalBounds()); 689 fDeviceClipBounds = qr_clip_bounds(device->getGlobalBounds());
690 } 690 }
691 691
692 return device; 692 return device;
693 } 693 }
694 694
695 SkCanvas::SkCanvas() 695 SkCanvas::SkCanvas()
696 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) 696 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
697 , fProps(SkSurfaceProps::kLegacyFontHost_InitType) 697 , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
698 , fConservativeRasterClip(false) 698 , fConservativeRasterClip(false)
699 , fLayerAllocator(nullptr)
reed1 2016/09/16 13:15:00 Are any of these (nullptr) initializers needed, gi
tomhudson 2016/09/28 21:23:57 Done.
699 { 700 {
700 inc_canvas(); 701 inc_canvas();
701 702
702 this->init(nullptr, kDefault_InitFlags); 703 this->init(nullptr, kDefault_InitFlags);
703 } 704 }
704 705
705 static SkBitmap make_nopixels(int width, int height) { 706 static SkBitmap make_nopixels(int width, int height) {
706 SkBitmap bitmap; 707 SkBitmap bitmap;
707 bitmap.setInfo(SkImageInfo::MakeUnknown(width, height)); 708 bitmap.setInfo(SkImageInfo::MakeUnknown(width, height));
708 return bitmap; 709 return bitmap;
709 } 710 }
710 711
711 class SkNoPixelsBitmapDevice : public SkBitmapDevice { 712 class SkNoPixelsBitmapDevice : public SkBitmapDevice {
712 public: 713 public:
713 SkNoPixelsBitmapDevice(const SkIRect& bounds, const SkSurfaceProps& surfaceP rops) 714 SkNoPixelsBitmapDevice(const SkIRect& bounds, const SkSurfaceProps& surfaceP rops)
714 : INHERITED(make_nopixels(bounds.width(), bounds.height()), surfaceProps ) 715 : INHERITED(make_nopixels(bounds.width(), bounds.height()), surfaceProps )
715 { 716 {
716 this->setOrigin(bounds.x(), bounds.y()); 717 this->setOrigin(bounds.x(), bounds.y());
717 } 718 }
718 719
719 private: 720 private:
720 721
721 typedef SkBitmapDevice INHERITED; 722 typedef SkBitmapDevice INHERITED;
722 }; 723 };
723 724
724 SkCanvas::SkCanvas(int width, int height, const SkSurfaceProps* props) 725 SkCanvas::SkCanvas(int width, int height, const SkSurfaceProps* props)
725 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) 726 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
726 , fProps(SkSurfacePropsCopyOrDefault(props)) 727 , fProps(SkSurfacePropsCopyOrDefault(props))
727 , fConservativeRasterClip(false) 728 , fConservativeRasterClip(false)
729 , fLayerAllocator(nullptr)
728 { 730 {
729 inc_canvas(); 731 inc_canvas();
730 732
731 this->init(new SkNoPixelsBitmapDevice(SkIRect::MakeWH(width, height), fProps ), 733 this->init(new SkNoPixelsBitmapDevice(SkIRect::MakeWH(width, height), fProps ),
732 kDefault_InitFlags)->unref(); 734 kDefault_InitFlags)->unref();
733 } 735 }
734 736
735 SkCanvas::SkCanvas(const SkIRect& bounds, InitFlags flags) 737 SkCanvas::SkCanvas(const SkIRect& bounds, InitFlags flags)
736 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) 738 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
737 , fProps(SkSurfaceProps::kLegacyFontHost_InitType) 739 , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
738 , fConservativeRasterClip(false) 740 , fConservativeRasterClip(false)
741 , fLayerAllocator(nullptr)
739 { 742 {
740 inc_canvas(); 743 inc_canvas();
741 744
742 this->init(new SkNoPixelsBitmapDevice(bounds, fProps), flags)->unref(); 745 this->init(new SkNoPixelsBitmapDevice(bounds, fProps), flags)->unref();
743 } 746 }
744 747
745 SkCanvas::SkCanvas(SkBaseDevice* device) 748 SkCanvas::SkCanvas(SkBaseDevice* device)
746 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) 749 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
747 , fProps(device->surfaceProps()) 750 , fProps(device->surfaceProps())
748 , fConservativeRasterClip(false) 751 , fConservativeRasterClip(false)
752 , fLayerAllocator(nullptr)
749 { 753 {
750 inc_canvas(); 754 inc_canvas();
751 755
752 this->init(device, kDefault_InitFlags); 756 this->init(device, kDefault_InitFlags);
753 } 757 }
754 758
755 SkCanvas::SkCanvas(SkBaseDevice* device, InitFlags flags) 759 SkCanvas::SkCanvas(SkBaseDevice* device, InitFlags flags)
756 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) 760 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
757 , fProps(device->surfaceProps()) 761 , fProps(device->surfaceProps())
758 , fConservativeRasterClip(false) 762 , fConservativeRasterClip(false)
763 , fLayerAllocator(nullptr)
759 { 764 {
760 inc_canvas(); 765 inc_canvas();
761 766
762 this->init(device, flags); 767 this->init(device, flags);
763 } 768 }
764 769
765 SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props) 770 SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)
766 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) 771 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
767 , fProps(props) 772 , fProps(props)
768 , fConservativeRasterClip(false) 773 , fConservativeRasterClip(false)
774 , fLayerAllocator(nullptr)
769 { 775 {
770 inc_canvas(); 776 inc_canvas();
771 777
772 SkAutoTUnref<SkBaseDevice> device(new SkBitmapDevice(bitmap, fProps)); 778 SkAutoTUnref<SkBaseDevice> device(new SkBitmapDevice(bitmap, fProps));
773 this->init(device, kDefault_InitFlags); 779 this->init(device, kDefault_InitFlags);
774 } 780 }
775 781
776 SkCanvas::SkCanvas(const SkBitmap& bitmap) 782 SkCanvas::SkCanvas(const SkBitmap& bitmap)
777 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) 783 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
778 , fProps(SkSurfaceProps::kLegacyFontHost_InitType) 784 , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
779 , fConservativeRasterClip(false) 785 , fConservativeRasterClip(false)
786 , fLayerAllocator(nullptr)
780 { 787 {
781 inc_canvas(); 788 inc_canvas();
782 789
790 SkAutoTUnref<SkBaseDevice> device(new SkBitmapDevice(bitmap, fProps));
791 this->init(device, kDefault_InitFlags);
792 }
793
794 SkCanvas::SkCanvas(const SkBitmap& bitmap,
795 SkRasterCanvasLayerAllocator* allocator)
796 : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
797 , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
798 , fConservativeRasterClip(false)
799 , fLayerAllocator(allocator)
800 {
801 inc_canvas();
802
tomhudson 2016/09/16 12:48:28 Should probably put an SkASSERT() here to guarante
783 SkAutoTUnref<SkBaseDevice> device(new SkBitmapDevice(bitmap, fProps)); 803 SkAutoTUnref<SkBaseDevice> device(new SkBitmapDevice(bitmap, fProps));
784 this->init(device, kDefault_InitFlags); 804 this->init(device, kDefault_InitFlags);
785 } 805 }
786 806
787 SkCanvas::~SkCanvas() { 807 SkCanvas::~SkCanvas() {
788 // free up the contents of our deque 808 // free up the contents of our deque
789 this->restoreToCount(1); // restore everything but the last 809 this->restoreToCount(1); // restore everything but the last
790 810
791 this->internalRestore(); // restore the last, since we're going away 811 this->internalRestore(); // restore the last, since we're going away
792 812
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
1259 SkImageInfo info = make_layer_info(priorDevice->imageInfo(), ir.width(), ir. height(), isOpaque, 1279 SkImageInfo info = make_layer_info(priorDevice->imageInfo(), ir.width(), ir. height(), isOpaque,
1260 paint); 1280 paint);
1261 1281
1262 SkAutoTUnref<SkBaseDevice> newDevice; 1282 SkAutoTUnref<SkBaseDevice> newDevice;
1263 { 1283 {
1264 const bool preserveLCDText = kOpaque_SkAlphaType == info.alphaType() || 1284 const bool preserveLCDText = kOpaque_SkAlphaType == info.alphaType() ||
1265 (saveLayerFlags & kPreserveLCDText_SaveLaye rFlag); 1285 (saveLayerFlags & kPreserveLCDText_SaveLaye rFlag);
1266 const SkBaseDevice::TileUsage usage = SkBaseDevice::kNever_TileUsage; 1286 const SkBaseDevice::TileUsage usage = SkBaseDevice::kNever_TileUsage;
1267 const SkBaseDevice::CreateInfo createInfo = SkBaseDevice::CreateInfo(inf o, usage, geo, 1287 const SkBaseDevice::CreateInfo createInfo = SkBaseDevice::CreateInfo(inf o, usage, geo,
1268 pre serveLCDText); 1288 pre serveLCDText);
1269 newDevice.reset(priorDevice->onCreateDevice(createInfo, paint)); 1289 newDevice.reset(priorDevice->onCreateDevice(createInfo, paint, fLayerAll ocator.get()));
1270 if (!newDevice) { 1290 if (!newDevice) {
1271 SkErrorInternals::SetError(kInternalError_SkError, 1291 SkErrorInternals::SetError(kInternalError_SkError,
1272 "Unable to create device for layer."); 1292 "Unable to create device for layer.");
1273 return; 1293 return;
1274 } 1294 }
1275 } 1295 }
1276 newDevice->setOrigin(ir.fLeft, ir.fTop); 1296 newDevice->setOrigin(ir.fLeft, ir.fTop);
1277 1297
1278 DeviceCM* layer = new DeviceCM(newDevice, paint, this, fConservativeRasterCl ip, stashedMatrix); 1298 DeviceCM* layer = new DeviceCM(newDevice, paint, this, fConservativeRasterCl ip, stashedMatrix);
1279 1299
(...skipping 2224 matching lines...) Expand 10 before | Expand all | Expand 10 after
3504 3524
3505 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { 3525 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() {
3506 fCanvas->restoreToCount(fSaveCount); 3526 fCanvas->restoreToCount(fSaveCount);
3507 } 3527 }
3508 3528
3509 #ifdef SK_SUPPORT_LEGACY_NEW_SURFACE_API 3529 #ifdef SK_SUPPORT_LEGACY_NEW_SURFACE_API
3510 SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p rops) { 3530 SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p rops) {
3511 return this->makeSurface(info, props).release(); 3531 return this->makeSurface(info, props).release();
3512 } 3532 }
3513 #endif 3533 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698