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

Side by Side Diff: content/common/gpu/client/gl_helper_unittest.cc

Issue 374633002: SkBitmap::Config is deprecated, use SkColorType instead (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments from #4 Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdio.h> 5 #include <stdio.h>
6 #include <cmath> 6 #include <cmath>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include <GLES2/gl2.h> 10 #include <GLES2/gl2.h>
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 flip, 646 flip,
647 kQualities[quality]); 647 kQualities[quality]);
648 648
649 SkBitmap output_pixels; 649 SkBitmap output_pixels;
650 output_pixels.allocN32Pixels(scaled_xsize, scaled_ysize); 650 output_pixels.allocN32Pixels(scaled_xsize, scaled_ysize);
651 651
652 helper_->ReadbackTextureSync( 652 helper_->ReadbackTextureSync(
653 dst_texture, 653 dst_texture,
654 gfx::Rect(0, 0, scaled_xsize, scaled_ysize), 654 gfx::Rect(0, 0, scaled_xsize, scaled_ysize),
655 static_cast<unsigned char*>(output_pixels.getPixels()), 655 static_cast<unsigned char*>(output_pixels.getPixels()),
656 SkBitmap::kARGB_8888_Config); 656 kN32_SkColorType);
657 if (flip) { 657 if (flip) {
658 // Flip the pixels back. 658 // Flip the pixels back.
659 FlipSKBitmap(&output_pixels); 659 FlipSKBitmap(&output_pixels);
660 } 660 }
661 if (xsize == scaled_xsize && ysize == scaled_ysize) { 661 if (xsize == scaled_xsize && ysize == scaled_ysize) {
662 Compare(&input_pixels, 662 Compare(&input_pixels,
663 &output_pixels, 663 &output_pixels,
664 2, 664 2,
665 NULL, 665 NULL,
666 stages, 666 stages,
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 ASSERT_GT(grid_pitch, 0); 838 ASSERT_GT(grid_pitch, 0);
839 ASSERT_GT(grid_width, 0); 839 ASSERT_GT(grid_width, 0);
840 ASSERT_NE(background_color, grid_color); 840 ASSERT_NE(background_color, grid_color);
841 841
842 for (int y = 0; y < h; ++y) { 842 for (int y = 0; y < h; ++y) {
843 bool y_on_grid = ((y % grid_pitch) < grid_width); 843 bool y_on_grid = ((y % grid_pitch) < grid_width);
844 844
845 for (int x = 0; x < w; ++x) { 845 for (int x = 0; x < w; ++x) {
846 bool on_grid = (y_on_grid || ((x % grid_pitch) < grid_width)); 846 bool on_grid = (y_on_grid || ((x % grid_pitch) < grid_width));
847 847
848 if (bmp.config() == SkBitmap::kARGB_8888_Config) { 848 if (bmp.colorType() == kN32_SkColorType) {
849 *bmp.getAddr32(x, y) = (on_grid ? grid_color : background_color); 849 *bmp.getAddr32(x, y) = (on_grid ? grid_color : background_color);
850 } else if (bmp.config() == SkBitmap::kRGB_565_Config) { 850 } else if (bmp.colorType() == kRGB_565_SkColorType) {
851 *bmp.getAddr16(x, y) = (on_grid ? grid_color : background_color); 851 *bmp.getAddr16(x, y) = (on_grid ? grid_color : background_color);
852 } 852 }
853 } 853 }
854 } 854 }
855 } 855 }
856 856
857 void DrawCheckerToBitmap(int w, int h, 857 void DrawCheckerToBitmap(int w, int h,
858 SkColor color1, SkColor color2, 858 SkColor color1, SkColor color2,
859 int rect_w, int rect_h, 859 int rect_w, int rect_h,
860 SkBitmap& bmp) { 860 SkBitmap& bmp) {
861 ASSERT_GT(rect_w, 0); 861 ASSERT_GT(rect_w, 0);
862 ASSERT_GT(rect_h, 0); 862 ASSERT_GT(rect_h, 0);
863 ASSERT_NE(color1, color2); 863 ASSERT_NE(color1, color2);
864 864
865 for (int y = 0; y < h; ++y) { 865 for (int y = 0; y < h; ++y) {
866 bool y_bit = (((y / rect_h) & 0x1) == 0); 866 bool y_bit = (((y / rect_h) & 0x1) == 0);
867 867
868 for (int x = 0; x < w; ++x) { 868 for (int x = 0; x < w; ++x) {
869 bool x_bit = (((x / rect_w) & 0x1) == 0); 869 bool x_bit = (((x / rect_w) & 0x1) == 0);
870 870
871 bool use_color2 = (x_bit != y_bit); // xor 871 bool use_color2 = (x_bit != y_bit); // xor
872 if (bmp.config() == SkBitmap::kARGB_8888_Config) { 872 if (bmp.colorType() == kN32_SkColorType) {
873 *bmp.getAddr32(x, y) = (use_color2 ? color2 : color1); 873 *bmp.getAddr32(x, y) = (use_color2 ? color2 : color1);
874 } else if (bmp.config() == SkBitmap::kRGB_565_Config) { 874 } else if (bmp.colorType() == kRGB_565_SkColorType) {
875 *bmp.getAddr16(x, y) = (use_color2 ? color2 : color1); 875 *bmp.getAddr16(x, y) = (use_color2 ? color2 : color1);
876 } 876 }
877 } 877 }
878 } 878 }
879 } 879 }
880 880
881 bool ColorComponentsClose(SkColor component1, 881 bool ColorComponentsClose(SkColor component1,
882 SkColor component2, 882 SkColor component2,
883 SkBitmap::Config config) { 883 SkColorType color_type) {
884 int c1 = static_cast<int>(component1); 884 int c1 = static_cast<int>(component1);
885 int c2 = static_cast<int>(component2); 885 int c2 = static_cast<int>(component2);
886 bool result = false; 886 bool result = false;
887 switch (config) { 887 switch (color_type) {
888 case SkBitmap::kARGB_8888_Config: 888 case kN32_SkColorType:
889 result = (std::abs(c1 - c2) == 0); 889 result = (std::abs(c1 - c2) == 0);
890 break; 890 break;
891 case SkBitmap::kRGB_565_Config: 891 case kRGB_565_SkColorType:
892 result = (std::abs(c1 - c2) <= 7); 892 result = (std::abs(c1 - c2) <= 7);
893 break; 893 break;
894 default: 894 default:
895 break; 895 break;
896 } 896 }
897 return result; 897 return result;
898 } 898 }
899 899
900 bool ColorsClose(SkColor color1, SkColor color2, SkBitmap::Config config) { 900 bool ColorsClose(SkColor color1, SkColor color2, SkColorType color_type) {
901 bool red = ColorComponentsClose(SkColorGetR(color1), 901 bool red = ColorComponentsClose(SkColorGetR(color1),
902 SkColorGetR(color2), config); 902 SkColorGetR(color2), color_type);
903 bool green = ColorComponentsClose(SkColorGetG(color1), 903 bool green = ColorComponentsClose(SkColorGetG(color1),
904 SkColorGetG(color2), config); 904 SkColorGetG(color2), color_type);
905 bool blue = ColorComponentsClose(SkColorGetB(color1), 905 bool blue = ColorComponentsClose(SkColorGetB(color1),
906 SkColorGetB(color2), config); 906 SkColorGetB(color2), color_type);
907 bool alpha = ColorComponentsClose(SkColorGetA(color1), 907 bool alpha = ColorComponentsClose(SkColorGetA(color1),
908 SkColorGetA(color2), config); 908 SkColorGetA(color2), color_type);
909 if (config == SkBitmap::kRGB_565_Config) { 909 if (color_type == kRGB_565_SkColorType) {
910 return red && blue && green; 910 return red && blue && green;
911 } 911 }
912 return red && blue && green && alpha; 912 return red && blue && green && alpha;
913 } 913 }
914 914
915 bool IsEqual(const SkBitmap& bmp1, const SkBitmap& bmp2) { 915 bool IsEqual(const SkBitmap& bmp1, const SkBitmap& bmp2) {
916 if (bmp1.isNull() && bmp2.isNull()) 916 if (bmp1.isNull() && bmp2.isNull())
917 return true; 917 return true;
918 if (bmp1.width() != bmp2.width() || 918 if (bmp1.width() != bmp2.width() ||
919 bmp1.height() != bmp2.height()) { 919 bmp1.height() != bmp2.height()) {
920 LOG(ERROR) << "Bitmap geometry check failure"; 920 LOG(ERROR) << "Bitmap geometry check failure";
921 return false; 921 return false;
922 } 922 }
923 if (bmp1.config() != bmp2.config()) 923 if (bmp1.colorType() != bmp2.colorType())
924 return false; 924 return false;
925 925
926 SkAutoLockPixels lock1(bmp1); 926 SkAutoLockPixels lock1(bmp1);
927 SkAutoLockPixels lock2(bmp2); 927 SkAutoLockPixels lock2(bmp2);
928 if (!bmp1.getPixels() || !bmp2.getPixels()) { 928 if (!bmp1.getPixels() || !bmp2.getPixels()) {
929 LOG(ERROR) << "Empty Bitmap!"; 929 LOG(ERROR) << "Empty Bitmap!";
930 return false; 930 return false;
931 } 931 }
932 for (int y = 0; y < bmp1.height(); ++y) { 932 for (int y = 0; y < bmp1.height(); ++y) {
933 for (int x = 0; x < bmp1.width(); ++x) { 933 for (int x = 0; x < bmp1.width(); ++x) {
934 if (!ColorsClose(bmp1.getColor(x,y), 934 if (!ColorsClose(bmp1.getColor(x,y),
935 bmp2.getColor(x,y), 935 bmp2.getColor(x,y),
936 bmp1.config())) { 936 bmp1.colorType())) {
937 LOG(ERROR) << "Bitmap color comparision failure"; 937 LOG(ERROR) << "Bitmap color comparision failure";
938 return false; 938 return false;
939 } 939 }
940 } 940 }
941 } 941 }
942 return true; 942 return true;
943 } 943 }
944 944
945 void BindAndAttachTextureWithPixels(GLuint src_texture, 945 void BindAndAttachTextureWithPixels(GLuint src_texture,
946 SkBitmap::Config bitmap_config, 946 SkColorType color_type,
947 const gfx::Size& src_size, 947 const gfx::Size& src_size,
948 const SkBitmap& input_pixels) { 948 const SkBitmap& input_pixels) {
949 context_->bindTexture(GL_TEXTURE_2D, src_texture); 949 context_->bindTexture(GL_TEXTURE_2D, src_texture);
950 GLenum format = (bitmap_config == SkBitmap::kRGB_565_Config) ? 950 GLenum format = (color_type == kRGB_565_SkColorType) ?
951 GL_RGB : GL_RGBA; 951 GL_RGB : GL_RGBA;
952 GLenum type = (bitmap_config == SkBitmap::kRGB_565_Config) ? 952 GLenum type = (color_type == kRGB_565_SkColorType) ?
953 GL_UNSIGNED_SHORT_5_6_5 : GL_UNSIGNED_BYTE; 953 GL_UNSIGNED_SHORT_5_6_5 : GL_UNSIGNED_BYTE;
954 context_->texImage2D(GL_TEXTURE_2D, 954 context_->texImage2D(GL_TEXTURE_2D,
955 0, 955 0,
956 format, 956 format,
957 src_size.width(), 957 src_size.width(),
958 src_size.height(), 958 src_size.height(),
959 0, 959 0,
960 format, 960 format,
961 type, 961 type,
962 input_pixels.getPixels()); 962 input_pixels.getPixels());
963 } 963 }
964 964
965 void ReadBackTexture(GLuint src_texture, 965 void ReadBackTexture(GLuint src_texture,
966 const gfx::Size& src_size, 966 const gfx::Size& src_size,
967 unsigned char* pixels, 967 unsigned char* pixels,
968 SkBitmap::Config bitmap_config, 968 SkColorType color_type,
969 bool async) { 969 bool async) {
970 if (async) { 970 if (async) {
971 base::RunLoop run_loop; 971 base::RunLoop run_loop;
972 helper_->ReadbackTextureAsync(src_texture, 972 helper_->ReadbackTextureAsync(src_texture,
973 src_size, 973 src_size,
974 pixels, 974 pixels,
975 bitmap_config, 975 color_type,
976 base::Bind(&callcallback, 976 base::Bind(&callcallback,
977 run_loop.QuitClosure())); 977 run_loop.QuitClosure()));
978 run_loop.Run(); 978 run_loop.Run();
979 } else { 979 } else {
980 helper_->ReadbackTextureSync(src_texture, 980 helper_->ReadbackTextureSync(src_texture,
981 gfx::Rect(src_size), 981 gfx::Rect(src_size),
982 pixels, 982 pixels,
983 bitmap_config); 983 color_type);
984 } 984 }
985 } 985 }
986 986
987 // Test basic format readback. 987 // Test basic format readback.
988 bool TestTextureFormatReadback(const gfx::Size& src_size, 988 bool TestTextureFormatReadback(const gfx::Size& src_size,
989 SkBitmap::Config bitmap_config, 989 SkColorType color_type,
990 bool async) { 990 bool async) {
991 SkImageInfo info = 991 SkImageInfo info =
992 SkImageInfo::Make(src_size.width(), 992 SkImageInfo::Make(src_size.width(),
993 src_size.height(), 993 src_size.height(),
994 SkBitmapConfigToColorType(bitmap_config), 994 color_type,
995 kPremul_SkAlphaType); 995 kPremul_SkAlphaType);
996 if (!helper_->IsReadbackConfigSupported(bitmap_config)) { 996 if (!helper_->IsReadbackConfigSupported(color_type)) {
997 LOG(INFO) << "Skipping test format not supported" << bitmap_config; 997 LOG(INFO) << "Skipping test format not supported" << color_type;
998 return true; 998 return true;
999 } 999 }
1000 WebGLId src_texture = context_->createTexture(); 1000 WebGLId src_texture = context_->createTexture();
1001 SkBitmap input_pixels; 1001 SkBitmap input_pixels;
1002 input_pixels.allocPixels(info); 1002 input_pixels.allocPixels(info);
1003 // Test Pattern-1, Fill with Plain color pattern. 1003 // Test Pattern-1, Fill with Plain color pattern.
1004 // Erase the input bitmap with red color. 1004 // Erase the input bitmap with red color.
1005 input_pixels.eraseColor(SK_ColorRED); 1005 input_pixels.eraseColor(SK_ColorRED);
1006 BindAndAttachTextureWithPixels(src_texture, 1006 BindAndAttachTextureWithPixels(src_texture,
1007 bitmap_config, 1007 color_type,
1008 src_size, 1008 src_size,
1009 input_pixels); 1009 input_pixels);
1010 SkBitmap output_pixels; 1010 SkBitmap output_pixels;
1011 output_pixels.allocPixels(info); 1011 output_pixels.allocPixels(info);
1012 // Initialize the output bitmap with Green color. 1012 // Initialize the output bitmap with Green color.
1013 // When the readback is over output bitmap should have the red color. 1013 // When the readback is over output bitmap should have the red color.
1014 output_pixels.eraseColor(SK_ColorGREEN); 1014 output_pixels.eraseColor(SK_ColorGREEN);
1015 uint8* pixels = static_cast<uint8*>(output_pixels.getPixels()); 1015 uint8* pixels = static_cast<uint8*>(output_pixels.getPixels());
1016 ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async); 1016 ReadBackTexture(src_texture, src_size, pixels, color_type, async);
1017 bool result = IsEqual(input_pixels, output_pixels); 1017 bool result = IsEqual(input_pixels, output_pixels);
1018 if (!result) { 1018 if (!result) {
1019 LOG(ERROR) << "Bitmap comparision failure Pattern-1"; 1019 LOG(ERROR) << "Bitmap comparision failure Pattern-1";
1020 return false; 1020 return false;
1021 } 1021 }
1022 const int rect_w = 10, rect_h = 4, src_grid_pitch = 10, src_grid_width = 4; 1022 const int rect_w = 10, rect_h = 4, src_grid_pitch = 10, src_grid_width = 4;
1023 const SkColor color1 = SK_ColorRED, color2 = SK_ColorBLUE; 1023 const SkColor color1 = SK_ColorRED, color2 = SK_ColorBLUE;
1024 // Test Pattern-2, Fill with Grid Pattern. 1024 // Test Pattern-2, Fill with Grid Pattern.
1025 DrawGridToBitmap(src_size.width(), src_size.height(), 1025 DrawGridToBitmap(src_size.width(), src_size.height(),
1026 color2, color1, 1026 color2, color1,
1027 src_grid_pitch, src_grid_width, 1027 src_grid_pitch, src_grid_width,
1028 input_pixels); 1028 input_pixels);
1029 BindAndAttachTextureWithPixels(src_texture, 1029 BindAndAttachTextureWithPixels(src_texture,
1030 bitmap_config, 1030 color_type,
1031 src_size, 1031 src_size,
1032 input_pixels); 1032 input_pixels);
1033 ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async); 1033 ReadBackTexture(src_texture, src_size, pixels, color_type, async);
1034 result = IsEqual(input_pixels, output_pixels); 1034 result = IsEqual(input_pixels, output_pixels);
1035 if (!result) { 1035 if (!result) {
1036 LOG(ERROR) << "Bitmap comparision failure Pattern-2"; 1036 LOG(ERROR) << "Bitmap comparision failure Pattern-2";
1037 return false; 1037 return false;
1038 } 1038 }
1039 // Test Pattern-3, Fill with CheckerBoard Pattern. 1039 // Test Pattern-3, Fill with CheckerBoard Pattern.
1040 DrawCheckerToBitmap(src_size.width(), 1040 DrawCheckerToBitmap(src_size.width(),
1041 src_size.height(), 1041 src_size.height(),
1042 color1, 1042 color1,
1043 color2, rect_w, rect_h, input_pixels); 1043 color2, rect_w, rect_h, input_pixels);
1044 BindAndAttachTextureWithPixels(src_texture, 1044 BindAndAttachTextureWithPixels(src_texture,
1045 bitmap_config, 1045 color_type,
1046 src_size, 1046 src_size,
1047 input_pixels); 1047 input_pixels);
1048 ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async); 1048 ReadBackTexture(src_texture, src_size, pixels, color_type, async);
1049 result = IsEqual(input_pixels, output_pixels); 1049 result = IsEqual(input_pixels, output_pixels);
1050 if (!result) { 1050 if (!result) {
1051 LOG(ERROR) << "Bitmap comparision failure Pattern-3"; 1051 LOG(ERROR) << "Bitmap comparision failure Pattern-3";
1052 return false; 1052 return false;
1053 } 1053 }
1054 context_->deleteTexture(src_texture); 1054 context_->deleteTexture(src_texture);
1055 if (HasFailure()) { 1055 if (HasFailure()) {
1056 return false; 1056 return false;
1057 } 1057 }
1058 return true; 1058 return true;
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 }; 1432 };
1433 1433
1434 class GLHelperPixelTest : public GLHelperTest { 1434 class GLHelperPixelTest : public GLHelperTest {
1435 private: 1435 private:
1436 gfx::DisableNullDrawGLBindings enable_pixel_output_; 1436 gfx::DisableNullDrawGLBindings enable_pixel_output_;
1437 }; 1437 };
1438 1438
1439 TEST_F(GLHelperTest, ARGBSyncReadbackTest) { 1439 TEST_F(GLHelperTest, ARGBSyncReadbackTest) {
1440 const int kTestSize = 64; 1440 const int kTestSize = 64;
1441 bool result = TestTextureFormatReadback(gfx::Size(kTestSize,kTestSize), 1441 bool result = TestTextureFormatReadback(gfx::Size(kTestSize,kTestSize),
1442 SkBitmap::kARGB_8888_Config, 1442 kN32_SkColorType,
1443 false); 1443 false);
1444 EXPECT_EQ(result, true); 1444 EXPECT_EQ(result, true);
1445 } 1445 }
1446 1446
1447 TEST_F(GLHelperTest, RGB565SyncReadbackTest) { 1447 TEST_F(GLHelperTest, RGB565SyncReadbackTest) {
1448 const int kTestSize = 64; 1448 const int kTestSize = 64;
1449 bool result = TestTextureFormatReadback(gfx::Size(kTestSize,kTestSize), 1449 bool result = TestTextureFormatReadback(gfx::Size(kTestSize,kTestSize),
1450 SkBitmap::kRGB_565_Config, 1450 kRGB_565_SkColorType,
1451 false); 1451 false);
1452 EXPECT_EQ(result, true); 1452 EXPECT_EQ(result, true);
1453 } 1453 }
1454 1454
1455 TEST_F(GLHelperTest, ARGBASyncReadbackTest) { 1455 TEST_F(GLHelperTest, ARGBASyncReadbackTest) {
1456 const int kTestSize = 64; 1456 const int kTestSize = 64;
1457 bool result = TestTextureFormatReadback(gfx::Size(kTestSize,kTestSize), 1457 bool result = TestTextureFormatReadback(gfx::Size(kTestSize,kTestSize),
1458 SkBitmap::kARGB_8888_Config, 1458 kN32_SkColorType,
1459 true); 1459 true);
1460 EXPECT_EQ(result, true); 1460 EXPECT_EQ(result, true);
1461 } 1461 }
1462 1462
1463 TEST_F(GLHelperTest, RGB565ASyncReadbackTest) { 1463 TEST_F(GLHelperTest, RGB565ASyncReadbackTest) {
1464 const int kTestSize = 64; 1464 const int kTestSize = 64;
1465 bool result = TestTextureFormatReadback(gfx::Size(kTestSize,kTestSize), 1465 bool result = TestTextureFormatReadback(gfx::Size(kTestSize,kTestSize),
1466 SkBitmap::kRGB_565_Config, 1466 kRGB_565_SkColorType,
1467 true); 1467 true);
1468 EXPECT_EQ(result, true); 1468 EXPECT_EQ(result, true);
1469 } 1469 }
1470 1470
1471 TEST_F(GLHelperPixelTest, YUVReadbackOptTest) { 1471 TEST_F(GLHelperPixelTest, YUVReadbackOptTest) {
1472 // This test uses the cb_command tracing events to detect how many 1472 // This test uses the cb_command tracing events to detect how many
1473 // scaling passes are actually performed by the YUV readback pipeline. 1473 // scaling passes are actually performed by the YUV readback pipeline.
1474 StartTracing(TRACE_DISABLED_BY_DEFAULT("cb_command")); 1474 StartTracing(TRACE_DISABLED_BY_DEFAULT("cb_command"));
1475 1475
1476 TestYUVReadback(800, 1476 TestYUVReadback(800,
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1651 CommandLine::Init(argc, argv); 1651 CommandLine::Init(argc, argv);
1652 base::TestSuite* suite = new content::ContentTestSuite(argc, argv); 1652 base::TestSuite* suite = new content::ContentTestSuite(argc, argv);
1653 #if defined(OS_MACOSX) 1653 #if defined(OS_MACOSX)
1654 base::mac::ScopedNSAutoreleasePool pool; 1654 base::mac::ScopedNSAutoreleasePool pool;
1655 #endif 1655 #endif
1656 1656
1657 content::UnitTestTestSuite runner(suite); 1657 content::UnitTestTestSuite runner(suite);
1658 base::MessageLoop message_loop; 1658 base::MessageLoop message_loop;
1659 return runner.Run(); 1659 return runner.Run();
1660 } 1660 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698