Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(555)

Unified Diff: content/common/gpu/client/gl_helper_unittest.cc

Issue 151203005: Add test code for readback comparision with more image pattens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add empty spaces between functions. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698