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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: src/core/SkCanvas.cpp
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index e53a104c47fa28406f1d440dbcd670365d877a24..b12f63d356253783ee33dc941a9bf529c771cbf4 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -696,6 +696,7 @@ SkCanvas::SkCanvas()
: fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
, fProps(SkSurfaceProps::kLegacyFontHost_InitType)
, fConservativeRasterClip(false)
+ , 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.
{
inc_canvas();
@@ -725,6 +726,7 @@ SkCanvas::SkCanvas(int width, int height, const SkSurfaceProps* props)
: fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
, fProps(SkSurfacePropsCopyOrDefault(props))
, fConservativeRasterClip(false)
+ , fLayerAllocator(nullptr)
{
inc_canvas();
@@ -736,6 +738,7 @@ SkCanvas::SkCanvas(const SkIRect& bounds, InitFlags flags)
: fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
, fProps(SkSurfaceProps::kLegacyFontHost_InitType)
, fConservativeRasterClip(false)
+ , fLayerAllocator(nullptr)
{
inc_canvas();
@@ -746,6 +749,7 @@ SkCanvas::SkCanvas(SkBaseDevice* device)
: fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
, fProps(device->surfaceProps())
, fConservativeRasterClip(false)
+ , fLayerAllocator(nullptr)
{
inc_canvas();
@@ -756,6 +760,7 @@ SkCanvas::SkCanvas(SkBaseDevice* device, InitFlags flags)
: fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
, fProps(device->surfaceProps())
, fConservativeRasterClip(false)
+ , fLayerAllocator(nullptr)
{
inc_canvas();
@@ -766,6 +771,7 @@ SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)
: fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
, fProps(props)
, fConservativeRasterClip(false)
+ , fLayerAllocator(nullptr)
{
inc_canvas();
@@ -777,6 +783,20 @@ SkCanvas::SkCanvas(const SkBitmap& bitmap)
: fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
, fProps(SkSurfaceProps::kLegacyFontHost_InitType)
, fConservativeRasterClip(false)
+ , fLayerAllocator(nullptr)
+{
+ inc_canvas();
+
+ SkAutoTUnref<SkBaseDevice> device(new SkBitmapDevice(bitmap, fProps));
+ this->init(device, kDefault_InitFlags);
+}
+
+SkCanvas::SkCanvas(const SkBitmap& bitmap,
+ SkRasterCanvasLayerAllocator* allocator)
+ : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage))
+ , fProps(SkSurfaceProps::kLegacyFontHost_InitType)
+ , fConservativeRasterClip(false)
+ , fLayerAllocator(allocator)
{
inc_canvas();
tomhudson 2016/09/16 12:48:28 Should probably put an SkASSERT() here to guarante
@@ -1266,7 +1286,7 @@ void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy stra
const SkBaseDevice::TileUsage usage = SkBaseDevice::kNever_TileUsage;
const SkBaseDevice::CreateInfo createInfo = SkBaseDevice::CreateInfo(info, usage, geo,
preserveLCDText);
- newDevice.reset(priorDevice->onCreateDevice(createInfo, paint));
+ newDevice.reset(priorDevice->onCreateDevice(createInfo, paint, fLayerAllocator.get()));
if (!newDevice) {
SkErrorInternals::SetError(kInternalError_SkError,
"Unable to create device for layer.");

Powered by Google App Engine
This is Rietveld 408576698