OLD | NEW |
---|---|
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 824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
835 PrintChannel(source, 1); | 835 PrintChannel(source, 1); |
836 LOG(ERROR) << "-------before yuv conversion: blue-------"; | 836 LOG(ERROR) << "-------before yuv conversion: blue-------"; |
837 PrintChannel(source, 2); | 837 PrintChannel(source, 2); |
838 } | 838 } |
839 return; | 839 return; |
840 } | 840 } |
841 } | 841 } |
842 } | 842 } |
843 } | 843 } |
844 | 844 |
845 void DrawGridToBitmap(int w, int h, | |
846 SkColor background_color, | |
847 SkColor grid_color, | |
848 int grid_pitch, | |
849 int grid_width, | |
850 SkBitmap& bmp) { | |
851 ASSERT_GT(grid_pitch, 0); | |
852 ASSERT_GT(grid_width, 0); | |
853 ASSERT_NE(background_color, grid_color); | |
854 | |
855 for (int y = 0; y < h; ++y) { | |
856 bool y_on_grid = ((y % grid_pitch) < grid_width); | |
857 | |
858 for (int x = 0; x < w; ++x) { | |
859 bool on_grid = (y_on_grid || ((x % grid_pitch) < grid_width)); | |
860 | |
861 if (bmp.getConfig() == SkBitmap::kARGB_8888_Config) { | |
862 *bmp.getAddr32(x, y) = (on_grid ? grid_color : background_color); | |
863 } else if (bmp.getConfig() == SkBitmap::kRGB_565_Config) { | |
864 *bmp.getAddr16(x, y) = (on_grid ? grid_color : background_color); | |
865 } | |
866 } | |
867 } | |
868 } | |
869 | |
870 void DrawCheckerToBitmap(int w, int h, | |
871 SkColor color1, SkColor color2, | |
872 int rect_w, int rect_h, | |
873 SkBitmap& bmp) { | |
874 ASSERT_GT(rect_w, 0); | |
875 ASSERT_GT(rect_h, 0); | |
876 ASSERT_NE(color1, color2); | |
877 | |
878 for (int y = 0; y < h; ++y) { | |
879 bool y_bit = (((y / rect_h) & 0x1) == 0); | |
880 | |
881 for (int x = 0; x < w; ++x) { | |
882 bool x_bit = (((x / rect_w) & 0x1) == 0); | |
883 | |
884 bool use_color2 = (x_bit != y_bit); // xor | |
885 if (bmp.getConfig() == SkBitmap::kARGB_8888_Config) { | |
886 *bmp.getAddr32(x, y) = (use_color2 ? color2 : color1); | |
887 } else if (bmp.getConfig() == SkBitmap::kRGB_565_Config) { | |
888 *bmp.getAddr16(x, y) = (use_color2 ? color2 : color1); | |
889 } | |
890 } | |
891 } | |
892 } | |
893 | |
845 bool ColorComponentsClose(SkColor component1, | 894 bool ColorComponentsClose(SkColor component1, |
846 SkColor component2, | 895 SkColor component2, |
847 SkBitmap::Config config) { | 896 SkBitmap::Config config) { |
848 int c1 = static_cast<int>(component1); | 897 int c1 = static_cast<int>(component1); |
849 int c2 = static_cast<int>(component2); | 898 int c2 = static_cast<int>(component2); |
850 bool result = false; | 899 bool result = false; |
851 switch (config) { | 900 switch (config) { |
852 case SkBitmap::kARGB_8888_Config: | 901 case SkBitmap::kARGB_8888_Config: |
853 result = (std::abs(c1 - c2) == 0); | 902 result = (std::abs(c1 - c2) == 0); |
854 break; | 903 break; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
897 for (int x = 0; x < bmp1.width(); ++x) { | 946 for (int x = 0; x < bmp1.width(); ++x) { |
898 if (!ColorsClose(bmp1.getColor(x,y), | 947 if (!ColorsClose(bmp1.getColor(x,y), |
899 bmp2.getColor(x,y), | 948 bmp2.getColor(x,y), |
900 bmp1.getConfig())) { | 949 bmp1.getConfig())) { |
901 LOG(ERROR) << "Bitmap color comparision failure"; | 950 LOG(ERROR) << "Bitmap color comparision failure"; |
902 return false; | 951 return false; |
903 } | 952 } |
904 } | 953 } |
905 } | 954 } |
906 return true; | 955 return true; |
907 } | 956 } |
piman
2014/02/13 20:34:03
nit: add empty line between functions
sivag
2014/02/14 05:48:47
Done.
| |
908 | 957 void BindAndAttachTextureWithPixels(GLuint src_texture, |
909 // Test basic format readback. | 958 SkBitmap::Config bitmap_config, |
910 bool TestTextureFormatReadback(const gfx::Size& src_size, | 959 const gfx::Size& src_size, |
911 SkBitmap::Config bitmap_config, | 960 const SkBitmap& input_pixels) { |
912 bool readback_async) { | |
913 DCHECK((bitmap_config == SkBitmap::kRGB_565_Config) || | |
914 (bitmap_config == SkBitmap::kARGB_8888_Config)); | |
915 bool rgb565_format = (bitmap_config == SkBitmap::kRGB_565_Config); | |
916 if (rgb565_format && !helper_->CanUseRgb565Readback()) { | |
917 LOG(INFO) << "RGB565 Format Not supported on this platform"; | |
918 LOG(INFO) << "Skipping RGB565ReadBackTest"; | |
919 return true; | |
920 } | |
921 WebGLId src_texture = context_->createTexture(); | |
922 SkBitmap input_pixels; | |
923 input_pixels.setConfig(bitmap_config, src_size.width(), | |
924 src_size.height()); | |
925 input_pixels.allocPixels(); | |
926 SkAutoLockPixels lock1(input_pixels); | |
927 // Erase the input bitmap with red color. | |
928 input_pixels.eraseColor(SK_ColorRED); | |
929 context_->bindTexture(GL_TEXTURE_2D, src_texture); | 961 context_->bindTexture(GL_TEXTURE_2D, src_texture); |
930 GLenum format = (bitmap_config == SkBitmap::kRGB_565_Config) ? | 962 GLenum format = (bitmap_config == SkBitmap::kRGB_565_Config) ? |
931 GL_RGB : GL_RGBA; | 963 GL_RGB : GL_RGBA; |
932 GLenum type = (bitmap_config == SkBitmap::kRGB_565_Config) ? | 964 GLenum type = (bitmap_config == SkBitmap::kRGB_565_Config) ? |
933 GL_UNSIGNED_SHORT_5_6_5 : GL_UNSIGNED_BYTE; | 965 GL_UNSIGNED_SHORT_5_6_5 : GL_UNSIGNED_BYTE; |
934 context_->texImage2D(GL_TEXTURE_2D, | 966 context_->texImage2D(GL_TEXTURE_2D, |
935 0, | 967 0, |
936 format, | 968 format, |
937 src_size.width(), | 969 src_size.width(), |
938 src_size.height(), | 970 src_size.height(), |
939 0, | 971 0, |
940 format, | 972 format, |
941 type, | 973 type, |
942 input_pixels.getPixels()); | 974 input_pixels.getPixels()); |
943 SkBitmap output_pixels; | 975 } |
piman
2014/02/13 20:34:03
nit: add empty line between functions
sivag
2014/02/14 05:48:47
Done.
| |
944 output_pixels.setConfig(bitmap_config, src_size.width(), | 976 void ReadBackTexture(GLuint src_texture, |
945 src_size.height()); | 977 const gfx::Size& src_size, |
946 output_pixels.allocPixels(); | 978 unsigned char* pixels, |
947 SkAutoLockPixels lock2(output_pixels); | 979 SkBitmap::Config bitmap_config, |
948 // Initialize the output bitmap with Green color. | 980 bool async) { |
949 // When the readback is over output bitmap should have the red color. | 981 if (async) { |
950 output_pixels.eraseColor(SK_ColorGREEN); | |
951 uint8* pixels = static_cast<uint8*>(output_pixels.getPixels()); | |
952 if (readback_async) { | |
953 base::RunLoop run_loop; | 982 base::RunLoop run_loop; |
954 helper_->ReadbackTextureAsync(src_texture, | 983 helper_->ReadbackTextureAsync(src_texture, |
955 src_size, | 984 src_size, |
956 pixels, | 985 pixels, |
957 bitmap_config, | 986 bitmap_config, |
958 base::Bind(&callcallback, | 987 base::Bind(&callcallback, |
959 run_loop.QuitClosure())); | 988 run_loop.QuitClosure())); |
960 run_loop.Run(); | 989 run_loop.Run(); |
961 } else { | 990 } else { |
962 helper_->ReadbackTextureSync(src_texture, | 991 helper_->ReadbackTextureSync(src_texture, |
963 gfx::Rect(src_size), | 992 gfx::Rect(src_size), |
964 pixels, | 993 pixels, |
965 bitmap_config); | 994 bitmap_config); |
966 } | 995 } |
996 } | |
piman
2014/02/13 20:34:03
nit: add empty line between functions
sivag
2014/02/14 05:48:47
Done.
| |
997 // Test basic format readback. | |
998 bool TestTextureFormatReadback(const gfx::Size& src_size, | |
999 SkBitmap::Config bitmap_config, | |
1000 bool async) { | |
1001 DCHECK((bitmap_config == SkBitmap::kRGB_565_Config) || | |
1002 (bitmap_config == SkBitmap::kARGB_8888_Config)); | |
1003 bool rgb565_format = (bitmap_config == SkBitmap::kRGB_565_Config); | |
1004 if (rgb565_format && !helper_->CanUseRgb565Readback()) { | |
1005 LOG(INFO) << "RGB565 Format Not supported on this platform"; | |
1006 LOG(INFO) << "Skipping RGB565ReadBackTest"; | |
1007 return true; | |
1008 } | |
1009 WebGLId src_texture = context_->createTexture(); | |
1010 SkBitmap input_pixels; | |
1011 input_pixels.setConfig(bitmap_config, src_size.width(), | |
1012 src_size.height()); | |
1013 input_pixels.allocPixels(); | |
1014 SkAutoLockPixels lock1(input_pixels); | |
1015 // Test Pattern-1, Fill with Plain color pattern. | |
1016 // Erase the input bitmap with red color. | |
1017 input_pixels.eraseColor(SK_ColorRED); | |
1018 BindAndAttachTextureWithPixels(src_texture, | |
1019 bitmap_config, | |
1020 src_size, | |
1021 input_pixels); | |
1022 SkBitmap output_pixels; | |
1023 output_pixels.setConfig(bitmap_config, src_size.width(), | |
1024 src_size.height()); | |
1025 output_pixels.allocPixels(); | |
1026 SkAutoLockPixels lock2(output_pixels); | |
1027 // Initialize the output bitmap with Green color. | |
1028 // When the readback is over output bitmap should have the red color. | |
1029 output_pixels.eraseColor(SK_ColorGREEN); | |
1030 uint8* pixels = static_cast<uint8*>(output_pixels.getPixels()); | |
1031 ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async); | |
967 bool result = IsEqual(input_pixels, output_pixels); | 1032 bool result = IsEqual(input_pixels, output_pixels); |
968 if (!result) { | 1033 if (!result) { |
969 LOG(ERROR) << "Bitmap comparision failure"; | 1034 LOG(ERROR) << "Bitmap comparision failure Pattern-1"; |
1035 return false; | |
1036 } | |
1037 const int rect_w = 10, rect_h = 4, src_grid_pitch = 10, src_grid_width = 4; | |
1038 const SkColor color1 = SK_ColorRED, color2 = SK_ColorBLUE; | |
1039 // Test Pattern-2, Fill with Grid Pattern. | |
1040 DrawGridToBitmap(src_size.width(), src_size.height(), | |
1041 color2, color1, | |
1042 src_grid_pitch, src_grid_width, | |
1043 input_pixels); | |
1044 BindAndAttachTextureWithPixels(src_texture, | |
1045 bitmap_config, | |
1046 src_size, | |
1047 input_pixels); | |
1048 ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async); | |
1049 result = IsEqual(input_pixels, output_pixels); | |
1050 if (!result) { | |
1051 LOG(ERROR) << "Bitmap comparision failure Pattern-2"; | |
1052 return false; | |
1053 } | |
1054 // Test Pattern-3, Fill with CheckerBoard Pattern. | |
1055 DrawCheckerToBitmap(src_size.width(), | |
1056 src_size.height(), | |
1057 color1, | |
1058 color2, rect_w, rect_h, input_pixels); | |
1059 BindAndAttachTextureWithPixels(src_texture, | |
1060 bitmap_config, | |
1061 src_size, | |
1062 input_pixels); | |
1063 ReadBackTexture(src_texture, src_size, pixels, bitmap_config, async); | |
1064 result = IsEqual(input_pixels, output_pixels); | |
1065 if (!result) { | |
1066 LOG(ERROR) << "Bitmap comparision failure Pattern-3"; | |
970 return false; | 1067 return false; |
971 } | 1068 } |
972 context_->deleteTexture(src_texture); | 1069 context_->deleteTexture(src_texture); |
973 if (HasFailure()) { | 1070 if (HasFailure()) { |
974 return false; | 1071 return false; |
975 } | 1072 } |
976 return true; | 1073 return true; |
977 } | 1074 } |
978 | 1075 |
979 // YUV readback test. Create a test pattern, convert to YUV | 1076 // YUV readback test. Create a test pattern, convert to YUV |
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1571 #if defined(TOOLKIT_GTK) | 1668 #if defined(TOOLKIT_GTK) |
1572 gfx::GtkInitFromCommandLine(*CommandLine::ForCurrentProcess()); | 1669 gfx::GtkInitFromCommandLine(*CommandLine::ForCurrentProcess()); |
1573 #endif | 1670 #endif |
1574 gfx::GLSurface::InitializeOneOff(); | 1671 gfx::GLSurface::InitializeOneOff(); |
1575 gpu::ApplyGpuDriverBugWorkarounds(CommandLine::ForCurrentProcess()); | 1672 gpu::ApplyGpuDriverBugWorkarounds(CommandLine::ForCurrentProcess()); |
1576 | 1673 |
1577 content::UnitTestTestSuite runner(suite); | 1674 content::UnitTestTestSuite runner(suite); |
1578 base::MessageLoop message_loop; | 1675 base::MessageLoop message_loop; |
1579 return runner.Run(); | 1676 return runner.Run(); |
1580 } | 1677 } |
OLD | NEW |