diff options
-rw-r--r-- | chrome/browser/thumbnails/content_analysis_unittest.cc | 18 | ||||
-rw-r--r-- | chrome/browser/thumbnails/content_based_thumbnailing_algorithm_unittest.cc | 3 | ||||
-rw-r--r-- | chrome/browser/thumbnails/simple_thumbnail_crop_unittest.cc | 15 | ||||
-rw-r--r-- | components/test_runner/web_test_proxy.cc | 3 | ||||
-rw-r--r-- | content/renderer/pepper/plugin_instance_throttler_impl_unittest.cc | 3 | ||||
-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 | ||||
-rw-r--r-- | ui/gfx/blit_unittest.cc | 3 | ||||
-rw-r--r-- | ui/gfx/color_analysis_unittest.cc | 12 | ||||
-rw-r--r-- | ui/gfx/color_utils_unittest.cc | 6 |
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. |