Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/base_paths.h" | 5 #include "base/base_paths.h" |
| 6 #include "base/cpu.h" | 6 #include "base/cpu.h" |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "media/base/djb2.h" | 10 #include "media/base/djb2.h" |
| (...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 768 memset(dst.get(), 0, 16); | 768 memset(dst.get(), 0, 16); |
| 769 | 769 |
| 770 media::FilterYUVRows_C(dst.get(), src.get(), src.get(), 1, 255); | 770 media::FilterYUVRows_C(dst.get(), src.get(), src.get(), 1, 255); |
| 771 | 771 |
| 772 EXPECT_EQ(255u, dst[0]); | 772 EXPECT_EQ(255u, dst[0]); |
| 773 for (int i = 1; i < 16; ++i) { | 773 for (int i = 1; i < 16; ++i) { |
| 774 EXPECT_EQ(0u, dst[i]) << " not equal at " << i; | 774 EXPECT_EQ(0u, dst[i]) << " not equal at " << i; |
| 775 } | 775 } |
| 776 } | 776 } |
| 777 | 777 |
| 778 TEST(YUVConvertTest, FilterYUVRows_MMX_OutOfBounds) { | 778 TEST(YUVConvertTest, FilterYUVRows_MMX_OutOfBounds) { |
|
scherkus (not reviewing)
2013/02/06 08:09:01
gtest supports disabling tests by prepending the t
wolenetz
2013/02/06 19:03:10
Sorry about being pedantic here. Please help me u
| |
| 779 #if defined(MEDIA_MMX_INTRINSICS_AVAILABLE) | |
| 779 base::CPU cpu; | 780 base::CPU cpu; |
| 780 if (!cpu.has_mmx()) { | 781 if (!cpu.has_mmx()) { |
| 781 LOG(WARNING) << "System not supported. Test skipped."; | 782 LOG(WARNING) << "System not supported. Test skipped."; |
| 782 return; | 783 return; |
| 783 } | 784 } |
| 784 | 785 |
| 785 scoped_array<uint8> src(new uint8[16]); | 786 scoped_array<uint8> src(new uint8[16]); |
| 786 scoped_array<uint8> dst(new uint8[16]); | 787 scoped_array<uint8> dst(new uint8[16]); |
| 787 | 788 |
| 788 memset(src.get(), 0xff, 16); | 789 memset(src.get(), 0xff, 16); |
| 789 memset(dst.get(), 0, 16); | 790 memset(dst.get(), 0, 16); |
| 790 | 791 |
| 791 media::FilterYUVRows_MMX(dst.get(), src.get(), src.get(), 1, 255); | 792 media::FilterYUVRows_MMX(dst.get(), src.get(), src.get(), 1, 255); |
| 792 media::EmptyRegisterState(); | 793 media::EmptyRegisterState(); |
| 793 | 794 |
| 794 EXPECT_EQ(255u, dst[0]); | 795 EXPECT_EQ(255u, dst[0]); |
| 795 for (int i = 1; i < 16; ++i) { | 796 for (int i = 1; i < 16; ++i) { |
| 796 EXPECT_EQ(0u, dst[i]); | 797 EXPECT_EQ(0u, dst[i]); |
| 797 } | 798 } |
| 799 #else | |
| 800 LOG(WARNING) << "System not supported. Test skipped."; | |
| 801 return; | |
| 802 #endif // defined(MEDIA_MMX_INTRINSICS_AVAILABLE) | |
| 798 } | 803 } |
| 799 | 804 |
| 800 TEST(YUVConvertTest, FilterYUVRows_SSE2_OutOfBounds) { | 805 TEST(YUVConvertTest, FilterYUVRows_SSE2_OutOfBounds) { |
| 801 base::CPU cpu; | 806 base::CPU cpu; |
| 802 if (!cpu.has_sse2()) { | 807 if (!cpu.has_sse2()) { |
| 803 LOG(WARNING) << "System not supported. Test skipped."; | 808 LOG(WARNING) << "System not supported. Test skipped."; |
| 804 return; | 809 return; |
| 805 } | 810 } |
| 806 | 811 |
| 807 scoped_array<uint8> src(new uint8[16]); | 812 scoped_array<uint8> src(new uint8[16]); |
| 808 scoped_array<uint8> dst(new uint8[16]); | 813 scoped_array<uint8> dst(new uint8[16]); |
| 809 | 814 |
| 810 memset(src.get(), 0xff, 16); | 815 memset(src.get(), 0xff, 16); |
| 811 memset(dst.get(), 0, 16); | 816 memset(dst.get(), 0, 16); |
| 812 | 817 |
| 813 media::FilterYUVRows_SSE2(dst.get(), src.get(), src.get(), 1, 255); | 818 media::FilterYUVRows_SSE2(dst.get(), src.get(), src.get(), 1, 255); |
| 814 | 819 |
| 815 EXPECT_EQ(255u, dst[0]); | 820 EXPECT_EQ(255u, dst[0]); |
| 816 for (int i = 1; i < 16; ++i) { | 821 for (int i = 1; i < 16; ++i) { |
| 817 EXPECT_EQ(0u, dst[i]); | 822 EXPECT_EQ(0u, dst[i]); |
| 818 } | 823 } |
| 819 } | 824 } |
| 820 | 825 |
| 821 TEST(YUVConvertTest, FilterYUVRows_MMX_UnalignedDestination) { | 826 TEST(YUVConvertTest, FilterYUVRows_MMX_UnalignedDestination) { |
| 827 #if defined(MEDIA_MMX_INTRINSICS_AVAILABLE) | |
|
scherkus (not reviewing)
2013/02/06 08:09:01
ditto
wolenetz
2013/02/06 19:03:10
See reply for similar comment, above.
| |
| 822 base::CPU cpu; | 828 base::CPU cpu; |
| 823 if (!cpu.has_mmx()) { | 829 if (!cpu.has_mmx()) { |
| 824 LOG(WARNING) << "System not supported. Test skipped."; | 830 LOG(WARNING) << "System not supported. Test skipped."; |
| 825 return; | 831 return; |
| 826 } | 832 } |
| 827 | 833 |
| 828 const int kSize = 32; | 834 const int kSize = 32; |
| 829 scoped_array<uint8> src(new uint8[kSize]); | 835 scoped_array<uint8> src(new uint8[kSize]); |
| 830 scoped_array<uint8> dst_sample(new uint8[kSize]); | 836 scoped_array<uint8> dst_sample(new uint8[kSize]); |
| 831 scoped_array<uint8> dst(new uint8[kSize]); | 837 scoped_array<uint8> dst(new uint8[kSize]); |
| 832 | 838 |
| 833 memset(dst_sample.get(), 0, kSize); | 839 memset(dst_sample.get(), 0, kSize); |
| 834 memset(dst.get(), 0, kSize); | 840 memset(dst.get(), 0, kSize); |
| 835 for (int i = 0; i < kSize; ++i) | 841 for (int i = 0; i < kSize; ++i) |
| 836 src[i] = 100 + i; | 842 src[i] = 100 + i; |
| 837 | 843 |
| 838 media::FilterYUVRows_C(dst_sample.get(), | 844 media::FilterYUVRows_C(dst_sample.get(), |
| 839 src.get(), src.get(), 17, 128); | 845 src.get(), src.get(), 17, 128); |
| 840 | 846 |
| 841 // Generate an unaligned output address. | 847 // Generate an unaligned output address. |
| 842 uint8* dst_ptr = | 848 uint8* dst_ptr = |
| 843 reinterpret_cast<uint8*>( | 849 reinterpret_cast<uint8*>( |
| 844 (reinterpret_cast<uintptr_t>(dst.get() + 8) & ~7) + 1); | 850 (reinterpret_cast<uintptr_t>(dst.get() + 8) & ~7) + 1); |
| 845 media::FilterYUVRows_MMX(dst_ptr, src.get(), src.get(), 17, 128); | 851 media::FilterYUVRows_MMX(dst_ptr, src.get(), src.get(), 17, 128); |
| 846 media::EmptyRegisterState(); | 852 media::EmptyRegisterState(); |
| 847 | 853 |
| 848 EXPECT_EQ(0, memcmp(dst_sample.get(), dst_ptr, 17)); | 854 EXPECT_EQ(0, memcmp(dst_sample.get(), dst_ptr, 17)); |
| 855 #else | |
| 856 LOG(WARNING) << "System not supported. Test skipped."; | |
| 857 return; | |
| 858 #endif // defined(MEDIA_MMX_INTRINSICS_AVAILABLE) | |
| 849 } | 859 } |
| 850 | 860 |
| 851 TEST(YUVConvertTest, FilterYUVRows_SSE2_UnalignedDestination) { | 861 TEST(YUVConvertTest, FilterYUVRows_SSE2_UnalignedDestination) { |
| 852 base::CPU cpu; | 862 base::CPU cpu; |
| 853 if (!cpu.has_sse2()) { | 863 if (!cpu.has_sse2()) { |
| 854 LOG(WARNING) << "System not supported. Test skipped."; | 864 LOG(WARNING) << "System not supported. Test skipped."; |
| 855 return; | 865 return; |
| 856 } | 866 } |
| 857 | 867 |
| 858 const int kSize = 64; | 868 const int kSize = 64; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 928 kSourceDx); | 938 kSourceDx); |
| 929 media::EmptyRegisterState(); | 939 media::EmptyRegisterState(); |
| 930 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), | 940 EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(), |
| 931 rgb_bytes_converted.get(), | 941 rgb_bytes_converted.get(), |
| 932 kWidth * kBpp)); | 942 kWidth * kBpp)); |
| 933 } | 943 } |
| 934 | 944 |
| 935 #endif // defined(ARCH_CPU_X86_64) | 945 #endif // defined(ARCH_CPU_X86_64) |
| 936 | 946 |
| 937 #endif // defined(ARCH_CPU_X86_FAMILY) | 947 #endif // defined(ARCH_CPU_X86_FAMILY) |
| OLD | NEW |