summaryrefslogtreecommitdiffstats
path: root/skia/ext
diff options
context:
space:
mode:
authortomhudson <tomhudson@google.com>2015-10-20 11:12:11 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-20 18:12:48 +0000
commit3c954e6fddda266a385a6ab076203eeba8290c24 (patch)
tree6a5cf28071a87f27fca6277bee2ec22754cf6465 /skia/ext
parent7fa3690e341398f681128764be6b0b14f5a79a16 (diff)
downloadchromium_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.cc7
-rw-r--r--skia/ext/platform_canvas.h7
-rw-r--r--skia/ext/platform_canvas_unittest.cc3
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++) {