diff options
author | tomhudson <tomhudson@google.com> | 2015-10-20 11:12:11 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-20 18:12:48 +0000 |
commit | 3c954e6fddda266a385a6ab076203eeba8290c24 (patch) | |
tree | 6a5cf28071a87f27fca6277bee2ec22754cf6465 /skia/ext | |
parent | 7fa3690e341398f681128764be6b0b14f5a79a16 (diff) | |
download | chromium_src-3c954e6fddda266a385a6ab076203eeba8290c24.zip chromium_src-3c954e6fddda266a385a6ab076203eeba8290c24.tar.gz chromium_src-3c954e6fddda266a385a6ab076203eeba8290c24.tar.bz2 |
80% of calls to skia::GetTopDevice() were retrieving a read-only reference to the raw pixel data; this CL simplifies those call sites and migrates to a more GPU-friendly and less internals-exposing implementation.
BUG=543755
Review URL: https://codereview.chromium.org/1399223004
Cr-Commit-Position: refs/heads/master@{#355104}
Diffstat (limited to 'skia/ext')
-rw-r--r-- | skia/ext/platform_canvas.cc | 7 | ||||
-rw-r--r-- | skia/ext/platform_canvas.h | 7 | ||||
-rw-r--r-- | skia/ext/platform_canvas_unittest.cc | 3 |
3 files changed, 15 insertions, 2 deletions
diff --git a/skia/ext/platform_canvas.cc b/skia/ext/platform_canvas.cc index 778ee09..5e5aeb2 100644 --- a/skia/ext/platform_canvas.cc +++ b/skia/ext/platform_canvas.cc @@ -13,6 +13,13 @@ SkBaseDevice* GetTopDevice(const SkCanvas& canvas) { return canvas.getTopDevice(true); } +SkBitmap ReadPixels(SkCanvas* canvas) { + SkBitmap bitmap; + bitmap.setInfo(canvas->imageInfo()); + canvas->readPixels(&bitmap, 0, 0); + return bitmap; +} + bool SupportsPlatformPaint(const SkCanvas* canvas) { PlatformDevice* platform_device = GetPlatformDevice(GetTopDevice(*canvas)); return platform_device && platform_device->SupportsPlatformPaint(); diff --git a/skia/ext/platform_canvas.h b/skia/ext/platform_canvas.h index 79c10fd..4499041 100644 --- a/skia/ext/platform_canvas.h +++ b/skia/ext/platform_canvas.h @@ -116,6 +116,13 @@ SK_API size_t PlatformCanvasStrideForWidth(unsigned width); // by the next call to save() or restore(). SK_API SkBaseDevice* GetTopDevice(const SkCanvas& canvas); +// Copies pixels from the SkCanvas into an SkBitmap, fetching pixels from +// GPU memory if necessary. +// +// The bitmap will remain empty if we can't allocate enough memory for a copy +// of the pixels. +SK_API SkBitmap ReadPixels(SkCanvas* canvas); + // Returns true if native platform routines can be used to draw on the // given canvas. If this function returns false, BeginPlatformPaint will // return NULL PlatformSurface. diff --git a/skia/ext/platform_canvas_unittest.cc b/skia/ext/platform_canvas_unittest.cc index cb2862f..a4a2ff5 100644 --- a/skia/ext/platform_canvas_unittest.cc +++ b/skia/ext/platform_canvas_unittest.cc @@ -42,8 +42,7 @@ bool IsOfColor(const SkBitmap& bitmap, int x, int y, uint32_t color) { bool VerifyRect(const PlatformCanvas& canvas, uint32_t canvas_color, uint32_t rect_color, int x, int y, int w, int h) { - SkBaseDevice* device = skia::GetTopDevice(canvas); - const SkBitmap& bitmap = device->accessBitmap(false); + const SkBitmap bitmap = skia::ReadPixels(const_cast<PlatformCanvas*>(&canvas)); SkAutoLockPixels lock(bitmap); for (int cur_y = 0; cur_y < bitmap.height(); cur_y++) { |