summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/thumbnails/content_analysis_unittest.cc18
-rw-r--r--chrome/browser/thumbnails/content_based_thumbnailing_algorithm_unittest.cc3
-rw-r--r--chrome/browser/thumbnails/simple_thumbnail_crop_unittest.cc15
-rw-r--r--components/test_runner/web_test_proxy.cc3
-rw-r--r--content/renderer/pepper/plugin_instance_throttler_impl_unittest.cc3
-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
-rw-r--r--ui/gfx/blit_unittest.cc3
-rw-r--r--ui/gfx/color_analysis_unittest.cc12
-rw-r--r--ui/gfx/color_utils_unittest.cc6
11 files changed, 36 insertions, 44 deletions
diff --git a/chrome/browser/thumbnails/content_analysis_unittest.cc b/chrome/browser/thumbnails/content_analysis_unittest.cc
index b1663cf..b9bb969 100644
--- a/chrome/browser/thumbnails/content_analysis_unittest.cc
+++ b/chrome/browser/thumbnails/content_analysis_unittest.cc
@@ -84,8 +84,7 @@ TEST_F(ThumbnailContentAnalysisTest, ApplyGradientMagnitudeOnImpulse) {
canvas.FillRect(gfx::Rect(0, 0, 800, 600), SkColorSetRGB(10, 10, 10));
canvas.FillRect(gfx::Rect(400, 300, 1, 1), SkColorSetRGB(255, 255, 255));
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap reduced_color;
reduced_color.allocPixels(SkImageInfo::MakeA8(source.width(),
@@ -128,8 +127,7 @@ TEST_F(ThumbnailContentAnalysisTest, ApplyGradientMagnitudeOnFrame) {
canvas.FillRect(gfx::Rect(0, 0, 800, 600), SkColorSetRGB(0, 0, 0));
canvas.DrawRect(draw_rect, SkColorSetRGB(255, 255, 255));
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap reduced_color;
reduced_color.allocPixels(SkImageInfo::MakeA8(source.width(),
@@ -167,8 +165,7 @@ TEST_F(ThumbnailContentAnalysisTest, ExtractImageProfileInformation) {
canvas.FillRect(image_rect, SkColorSetRGB(0, 0, 0));
canvas.DrawRect(draw_rect, SkColorSetRGB(255, 255, 255));
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap reduced_color;
reduced_color.allocPixels(SkImageInfo::MakeA8(source.width(),
source.height()));
@@ -231,8 +228,7 @@ TEST_F(ThumbnailContentAnalysisTest,
canvas.DrawRect(gfx::Rect(300, 250, 99, 100), SkColorSetRGB(255, 255, 255));
canvas.DrawRect(gfx::Rect(401, 250, 99, 100), SkColorSetRGB(255, 255, 255));
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap reduced_color;
reduced_color.allocPixels(SkImageInfo::MakeA8(source.width(),
source.height()));
@@ -573,8 +569,7 @@ TEST_F(ThumbnailContentAnalysisTest, ComputeDecimatedImage) {
std::fill_n(columns.begin() + 300, 100, true);
std::fill_n(columns.begin() + 500, 100, true);
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap result = ComputeDecimatedImage(source, rows, columns);
EXPECT_FALSE(result.empty());
EXPECT_EQ(300, result.width());
@@ -686,8 +681,7 @@ TEST_F(ThumbnailContentAnalysisTest, CreateRetargetedThumbnailImage) {
canvas.DrawRect(pict_rect, SkColorSetRGB(0, 0, 0));
}
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap result = CreateRetargetedThumbnailImage(
source, gfx::Size(424, 264), 2.5);
diff --git a/chrome/browser/thumbnails/content_based_thumbnailing_algorithm_unittest.cc b/chrome/browser/thumbnails/content_based_thumbnailing_algorithm_unittest.cc
index 3fbc8d4..2fa7ccd 100644
--- a/chrome/browser/thumbnails/content_based_thumbnailing_algorithm_unittest.cc
+++ b/chrome/browser/thumbnails/content_based_thumbnailing_algorithm_unittest.cc
@@ -137,8 +137,7 @@ TEST_F(ContentBasedThumbnailingAlgorithmTest, CreateRetargetedThumbnail) {
// The image consists of vertical non-overlapping stripes 150 pixels wide.
canvas.FillRect(gfx::Rect(200, 200, 800, 400), SkColorSetRGB(255, 255, 255));
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
ConsumerCallbackCatcher catcher;
const gfx::Size thumbnail_size(432, 284);
diff --git a/chrome/browser/thumbnails/simple_thumbnail_crop_unittest.cc b/chrome/browser/thumbnails/simple_thumbnail_crop_unittest.cc
index e7c7a2b..2852ef5 100644
--- a/chrome/browser/thumbnails/simple_thumbnail_crop_unittest.cc
+++ b/chrome/browser/thumbnails/simple_thumbnail_crop_unittest.cc
@@ -26,8 +26,7 @@ typedef testing::Test SimpleThumbnailCropTest;
TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_TallerThanWide) {
// The input bitmap is vertically long.
gfx::Canvas canvas(gfx::Size(40, 90), 1.0f, true);
- SkBitmap bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
// The desired size is square.
thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED;
@@ -43,8 +42,7 @@ TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_TallerThanWide) {
TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_WiderThanTall) {
// The input bitmap is horizontally long.
gfx::Canvas canvas(gfx::Size(70, 40), 1.0f, true);
- SkBitmap bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
// The desired size is square.
thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED;
@@ -60,8 +58,7 @@ TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_WiderThanTall) {
TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_TooWiderThanTall) {
// The input bitmap is horizontally very long.
gfx::Canvas canvas(gfx::Size(90, 40), 1.0f, true);
- SkBitmap bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
// The desired size is square.
thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED;
@@ -77,8 +74,7 @@ TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_TooWiderThanTall) {
TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_NotClipped) {
// The input bitmap is square.
gfx::Canvas canvas(gfx::Size(40, 40), 1.0f, true);
- SkBitmap bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
// The desired size is square.
thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED;
@@ -94,8 +90,7 @@ TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_NotClipped) {
TEST_F(SimpleThumbnailCropTest, GetClippedBitmap_NonSquareOutput) {
// The input bitmap is square.
gfx::Canvas canvas(gfx::Size(40, 40), 1.0f, true);
- SkBitmap bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
// The desired size is horizontally long.
thumbnails::ClipResult clip_result = thumbnails::CLIP_RESULT_NOT_CLIPPED;
diff --git a/components/test_runner/web_test_proxy.cc b/components/test_runner/web_test_proxy.cc
index 7dcb809..be90a68 100644
--- a/components/test_runner/web_test_proxy.cc
+++ b/components/test_runner/web_test_proxy.cc
@@ -600,8 +600,7 @@ void WebTestProxyBase::CapturePixelsForPrinting(
web_frame->printEnd();
DrawSelectionRect(canvas.get());
- SkBaseDevice* device = skia::GetTopDevice(*canvas);
- const SkBitmap& bitmap = device->accessBitmap(false);
+ const SkBitmap bitmap = skia::ReadPixels(canvas.get());
callback.Run(bitmap);
}
diff --git a/content/renderer/pepper/plugin_instance_throttler_impl_unittest.cc b/content/renderer/pepper/plugin_instance_throttler_impl_unittest.cc
index 5986cde..57c4563 100644
--- a/content/renderer/pepper/plugin_instance_throttler_impl_unittest.cc
+++ b/content/renderer/pepper/plugin_instance_throttler_impl_unittest.cc
@@ -99,8 +99,7 @@ TEST_F(PluginInstanceThrottlerImplTest, ThrottleByKeyframe) {
gfx::Canvas canvas(gfx::Size(20, 10), 1.0f, true);
canvas.FillRect(gfx::Rect(20, 10), SK_ColorBLACK);
canvas.FillRect(gfx::Rect(10, 10), SK_ColorWHITE);
- SkBitmap interesting_bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap interesting_bitmap = skia::ReadPixels(canvas.sk_canvas());
// Don't throttle for a boring frame.
throttler()->OnImageFlush(&boring_bitmap);
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++) {
diff --git a/ui/gfx/blit_unittest.cc b/ui/gfx/blit_unittest.cc
index 4f154f9..fcc0ac8 100644
--- a/ui/gfx/blit_unittest.cc
+++ b/ui/gfx/blit_unittest.cc
@@ -40,8 +40,7 @@ void SetToCanvas(skia::PlatformCanvas* canvas, uint8 values[h][w]) {
// bitmap (see SetToCanvas above).
template<int w, int h>
void VerifyCanvasValues(skia::PlatformCanvas* canvas, uint8 values[h][w]) {
- SkBitmap& bitmap = const_cast<SkBitmap&>(
- skia::GetTopDevice(*canvas)->accessBitmap(true));
+ SkBitmap bitmap = skia::ReadPixels(canvas);
SkAutoLockPixels lock(bitmap);
ASSERT_EQ(w, bitmap.width());
ASSERT_EQ(h, bitmap.height());
diff --git a/ui/gfx/color_analysis_unittest.cc b/ui/gfx/color_analysis_unittest.cc
index 903161f..6f53f78 100644
--- a/ui/gfx/color_analysis_unittest.cc
+++ b/ui/gfx/color_analysis_unittest.cc
@@ -342,8 +342,7 @@ TEST_F(ColorAnalysisTest, ComputeColorCovarianceWithCanvas) {
canvas.FillRect(gfx::Rect(150, 0, 50, 200), SkColorSetRGB(0, 100, 100));
canvas.FillRect(gfx::Rect(200, 0, 50, 200), SkColorSetRGB(0, 0, 100));
- SkBitmap bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
gfx::Matrix3F covariance = ComputeColorCovariance(bitmap);
gfx::Matrix3F expected_covariance = gfx::Matrix3F::Zeros();
@@ -401,8 +400,7 @@ TEST_F(ColorAnalysisTest, ApplyColorReductionBlackAndWhite) {
// The image consists of vertical non-overlapping stripes 150 pixels wide.
canvas.FillRect(gfx::Rect(0, 0, 150, 200), SkColorSetRGB(0, 0, 0));
canvas.FillRect(gfx::Rect(150, 0, 150, 200), SkColorSetRGB(255, 255, 255));
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap result;
result.allocPixels(SkImageInfo::MakeA8(300, 200));
@@ -439,8 +437,7 @@ TEST_F(ColorAnalysisTest, ApplyColorReductionMultiColor) {
canvas.FillRect(gfx::Rect(0, 0, 100, 200), SkColorSetRGB(100, 0, 0));
canvas.FillRect(gfx::Rect(100, 0, 100, 200), SkColorSetRGB(0, 255, 0));
canvas.FillRect(gfx::Rect(200, 0, 100, 200), SkColorSetRGB(0, 0, 128));
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap result;
result.allocPixels(SkImageInfo::MakeA8(300, 200));
@@ -482,8 +479,7 @@ TEST_F(ColorAnalysisTest, ComputePrincipalComponentImage) {
canvas.FillRect(gfx::Rect(0, 0, 100, 200), SkColorSetRGB(10, 10, 10));
canvas.FillRect(gfx::Rect(100, 0, 100, 200), SkColorSetRGB(100, 100, 100));
canvas.FillRect(gfx::Rect(200, 0, 100, 200), SkColorSetRGB(255, 255, 255));
- SkBitmap source =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap source = skia::ReadPixels(canvas.sk_canvas());
SkBitmap result;
result.allocPixels(SkImageInfo::MakeA8(300, 200));
diff --git a/ui/gfx/color_utils_unittest.cc b/ui/gfx/color_utils_unittest.cc
index c49052e..2993fe4 100644
--- a/ui/gfx/color_utils_unittest.cc
+++ b/ui/gfx/color_utils_unittest.cc
@@ -127,8 +127,7 @@ TEST(ColorUtils, CalculateBoringScore_SingleColor) {
// Fill all pixels in black.
canvas.FillRect(gfx::Rect(kSize), SK_ColorBLACK);
- SkBitmap bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
// The thumbnail should deserve the highest boring score.
EXPECT_DOUBLE_EQ(1.0, CalculateBoringScore(bitmap));
}
@@ -143,8 +142,7 @@ TEST(ColorUtils, CalculateBoringScore_TwoColors) {
canvas.FillRect(gfx::Rect(0, 0, kSize.width() / 2, kSize.height()),
SK_ColorWHITE);
- SkBitmap bitmap =
- skia::GetTopDevice(*canvas.sk_canvas())->accessBitmap(false);
+ SkBitmap bitmap = skia::ReadPixels(canvas.sk_canvas());
ASSERT_EQ(kSize.width(), bitmap.width());
ASSERT_EQ(kSize.height(), bitmap.height());
// The thumbnail should be less boring because two colors are used.