| Index: content/common/gpu/client/gl_helper_unittest.cc
|
| diff --git a/content/common/gpu/client/gl_helper_unittest.cc b/content/common/gpu/client/gl_helper_unittest.cc
|
| index 72593ae3e1ead599fc9f43c24a252d108ac94f32..91cfa2179f5261cb855609e567c514b9ed93d9bf 100644
|
| --- a/content/common/gpu/client/gl_helper_unittest.cc
|
| +++ b/content/common/gpu/client/gl_helper_unittest.cc
|
| @@ -842,6 +842,55 @@ class GLHelperTest : public testing::Test {
|
| }
|
| }
|
|
|
| + void DrawGridToBitmap(int w, int h,
|
| + SkColor background_color,
|
| + SkColor grid_color,
|
| + int grid_pitch,
|
| + int grid_width,
|
| + SkBitmap& bmp) {
|
| + ASSERT_GT(grid_pitch, 0);
|
| + ASSERT_GT(grid_width, 0);
|
| + ASSERT_NE(background_color, grid_color);
|
| +
|
| + for (int y = 0; y < h; ++y) {
|
| + bool y_on_grid = ((y % grid_pitch) < grid_width);
|
| +
|
| + for (int x = 0; x < w; ++x) {
|
| + bool on_grid = (y_on_grid || ((x % grid_pitch) < grid_width));
|
| +
|
| + if (bmp.getConfig() == SkBitmap::kARGB_8888_Config) {
|
| + *bmp.getAddr32(x, y) = (on_grid ? grid_color : background_color);
|
| + } else if (bmp.getConfig() == SkBitmap::kRGB_565_Config) {
|
| + *bmp.getAddr16(x, y) = (on_grid ? grid_color : background_color);
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + void DrawCheckerToBitmap(int w, int h,
|
| + SkColor color1, SkColor color2,
|
| + int rect_w, int rect_h,
|
| + SkBitmap& bmp) {
|
| + ASSERT_GT(rect_w, 0);
|
| + ASSERT_GT(rect_h, 0);
|
| + ASSERT_NE(color1, color2);
|
| +
|
| + for (int y = 0; y < h; ++y) {
|
| + bool y_bit = (((y / rect_h) & 0x1) == 0);
|
| +
|
| + for (int x = 0; x < w; ++x) {
|
| + bool x_bit = (((x / rect_w) & 0x1) == 0);
|
| +
|
| + bool use_color2 = (x_bit != y_bit); // xor
|
| + if (bmp.getConfig() == SkBitmap::kARGB_8888_Config) {
|
| + *bmp.getAddr32(x, y) = (use_color2 ? color2 : color1);
|
| + } else if (bmp.getConfig() == SkBitmap::kRGB_565_Config) {
|
| + *bmp.getAddr16(x, y) = (use_color2 ? color2 : color1);
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| bool ColorComponentsClose(SkColor component1,
|
| SkColor component2,
|
| SkBitmap::Config config) {
|
| @@ -906,26 +955,10 @@ class GLHelperTest : public testing::Test {
|
| return true;
|
| }
|
|
|
| - // Test basic format readback.
|
| - bool TestTextureFormatReadback(const gfx::Size& src_size,
|
| - SkBitmap::Config bitmap_config,
|
| - bool readback_async) {
|
| - DCHECK((bitmap_config == SkBitmap::kRGB_565_Config) ||
|
| - (bitmap_config == SkBitmap::kARGB_8888_Config));
|
| - bool rgb565_format = (bitmap_config == SkBitmap::kRGB_565_Config);
|
| - if (rgb565_format && !helper_->CanUseRgb565Readback()) {
|
| - LOG(INFO) << "RGB565 Format Not supported on this platform";
|
| - LOG(INFO) << "Skipping RGB565ReadBackTest";
|
| - return true;
|
| - }
|
| - WebGLId src_texture = context_->createTexture();
|
| - SkBitmap input_pixels;
|
| - input_pixels.setConfig(bitmap_config, src_size.width(),
|
| - src_size.height());
|
| - input_pixels.allocPixels();
|
| - SkAutoLockPixels lock1(input_pixels);
|
| - // Erase the input bitmap with red color.
|
| - input_pixels.eraseColor(SK_ColorRED);
|
| + void BindAndAttachTextureWithPixels(GLuint src_texture,
|
| + SkBitmap::Config bitmap_config,
|
| + const gfx::Size& src_size,
|
| + const SkBitmap& input_pixels) {
|
| context_->bindTexture(GL_TEXTURE_2D, src_texture);
|
| GLenum format = (bitmap_config == SkBitmap::kRGB_565_Config) ?
|
| GL_RGB : GL_RGBA;
|
| @@ -940,16 +973,14 @@ class GLHelperTest : public testing::Test {
|
| format,
|
| type,
|
| input_pixels.getPixels());
|
| - SkBitmap output_pixels;
|
| - output_pixels.setConfig(bitmap_config, src_size.width(),
|
| - src_size.height());
|
| - output_pixels.allocPixels();
|
| - SkAutoLockPixels lock2(output_pixels);
|
| - // Initialize the output bitmap with Green color.
|
| - // When the readback is over output bitmap should have the red color.
|
| - output_pixels.eraseColor(SK_ColorGREEN);
|
| - uint8* pixels = static_cast<uint8*>(output_pixels.getPixels());
|
| - if (readback_async) {
|
| + }
|
| +
|
| + void ReadBackTexture(GLuint src_texture,
|
| + const gfx::Size& src_size,
|
| + unsigned char* pixels,
|
| + SkBitmap::Config bitmap_config,
|
| + bool async) {
|
| + if (async) {
|
| base::RunLoop run_loop;
|
| helper_->ReadbackTextureAsync(src_texture,
|
| src_size,
|
| @@ -964,9 +995,78 @@ class GLHelperTest : public testing::Test {
|
| pixels,
|
| bitmap_config);
|
| }
|
| + }
|
| +
|
| + // Test basic format readback.
|
| + bool TestTextureFormatReadback(const gfx::Size& src_size,
|
| + SkBitmap::Config bitmap_config,
|
| + bool async) {
|
| + DCHECK((bitmap_config == SkBitmap::kRGB_565_Config) ||
|
| + (bitmap_config == SkBitmap::kARGB_8888_Config));
|
| + bool rgb565_format = (bitmap_config == SkBitmap::kRGB_565_Config);
|
| + if (rgb565_format && !helper_->CanUseRgb565Readback()) {
|
| + LOG(INFO) << "RGB565 Format Not supported on this platform";
|
| + LOG(INFO) << "Skipping RGB565ReadBackTest";
|
| + return true;
|
| + }
|
| + WebGLId src_texture = context_->createTexture();
|
| + SkBitmap input_pixels;
|
| + input_pixels.setConfig(bitmap_config, src_size.width(),
|
| + src_size.height());
|
| + input_pixels.allocPixels();
|
| + SkAutoLockPixels lock1(input_pixels);
|
| + // Test Pattern-1, Fill with Plain color pattern.
|
| + // Erase the input bitmap with red color.
|
| + input_pixels.eraseColor(SK_ColorRED);
|
| + BindAndAttachTextureWithPixels(src_texture,
|
| + bitmap_config,
|
| + src_size,
|
| + input_pixels);
|
| + SkBitmap output_pixels;
|
| + output_pixels.setConfig(bitmap_config, src_size.width(),
|
| + src_size.height());
|
| + output_pixels.allocPixels();
|
| + SkAutoLockPixels lock2(output_pixels);
|
| + // Initialize the output bitmap with Green color.
|
| + // When the readback is over output bitmap should have the red color.
|
| + output_pixels.eraseColor(SK_ColorGREEN);
|
| + uint8* pixels = static_cast<uint8*>(output_pixels.getPixels());
|
| + ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async);
|
| bool result = IsEqual(input_pixels, output_pixels);
|
| if (!result) {
|
| - LOG(ERROR) << "Bitmap comparision failure";
|
| + LOG(ERROR) << "Bitmap comparision failure Pattern-1";
|
| + return false;
|
| + }
|
| + const int rect_w = 10, rect_h = 4, src_grid_pitch = 10, src_grid_width = 4;
|
| + const SkColor color1 = SK_ColorRED, color2 = SK_ColorBLUE;
|
| + // Test Pattern-2, Fill with Grid Pattern.
|
| + DrawGridToBitmap(src_size.width(), src_size.height(),
|
| + color2, color1,
|
| + src_grid_pitch, src_grid_width,
|
| + input_pixels);
|
| + BindAndAttachTextureWithPixels(src_texture,
|
| + bitmap_config,
|
| + src_size,
|
| + input_pixels);
|
| + ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async);
|
| + result = IsEqual(input_pixels, output_pixels);
|
| + if (!result) {
|
| + LOG(ERROR) << "Bitmap comparision failure Pattern-2";
|
| + return false;
|
| + }
|
| + // Test Pattern-3, Fill with CheckerBoard Pattern.
|
| + DrawCheckerToBitmap(src_size.width(),
|
| + src_size.height(),
|
| + color1,
|
| + color2, rect_w, rect_h, input_pixels);
|
| + BindAndAttachTextureWithPixels(src_texture,
|
| + bitmap_config,
|
| + src_size,
|
| + input_pixels);
|
| + ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async);
|
| + result = IsEqual(input_pixels, output_pixels);
|
| + if (!result) {
|
| + LOG(ERROR) << "Bitmap comparision failure Pattern-3";
|
| return false;
|
| }
|
| context_->deleteTexture(src_texture);
|
|
|