Index: unit_test/planar_test.cc |
diff --git a/unit_test/planar_test.cc b/unit_test/planar_test.cc |
index 1416408f460ce0f9f04302ca33c59b66a14094fe..b3df2590daa65fa50c1e5d28254bdf14c49e1a81 100644 |
--- a/unit_test/planar_test.cc |
+++ b/unit_test/planar_test.cc |
@@ -1163,6 +1163,67 @@ TEST_F(LibYUVPlanarTest, ARGBBlend_Opt) { |
EXPECT_LE(max_diff, 1); |
} |
+#ifdef HAS_BLENDPLANEROW_SSSE3 |
+ |
+static int TestBlendPlane(int width, int height, int benchmark_iterations, |
+ int invert, int off) { |
+ int has_ssse3 = TestCpuFlag(kCpuHasSSSE3); |
+ if (width < 1) { |
+ width = 1; |
+ } |
+ const int kBpp = 1; |
+ const int kStride = width * kBpp; |
+ align_buffer_64(src_argb_a, kStride * height + off); |
+ align_buffer_64(src_argb_b, kStride * height + off); |
+ align_buffer_64(src_argb_alpha, kStride * height + off); |
+ align_buffer_64(dst_argb_c, kStride * height); |
+ align_buffer_64(dst_argb_opt, kStride * height); |
+ for (int i = 0; i < kStride * height; ++i) { |
+ src_argb_a[i + off] = (fastrand() & 0xff); |
+ src_argb_b[i + off] = (fastrand() & 0xff); |
+ src_argb_alpha[i + off] = (fastrand() & 0xff); |
+ } |
+ memset(dst_argb_c, 255, kStride * height); |
+ memset(dst_argb_opt, 255, kStride * height); |
+ |
+ BlendPlaneRow_C(src_argb_a + off, |
+ src_argb_b + off, |
+ src_argb_alpha + off, |
+ dst_argb_c, |
+ width * height); |
+ for (int i = 0; i < benchmark_iterations; ++i) { |
+ if (has_ssse3) { |
+ BlendPlaneRow_SSSE3(src_argb_a + off, |
+ src_argb_b + off, |
+ src_argb_alpha + off, |
+ dst_argb_opt, |
+ width * height); |
+ } else { |
+ BlendPlaneRow_C(src_argb_a + off, |
+ src_argb_b + off, |
+ src_argb_alpha + off, |
+ dst_argb_opt, |
+ width * height); |
+ } |
+ } |
+ int max_diff = 0; |
+ for (int i = 0; i < kStride * height; ++i) { |
+ EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]); |
+ } |
+ free_aligned_buffer_64(src_argb_a); |
+ free_aligned_buffer_64(src_argb_b); |
+ free_aligned_buffer_64(dst_argb_c); |
+ free_aligned_buffer_64(dst_argb_opt); |
+ return max_diff; |
+} |
+ |
+TEST_F(LibYUVPlanarTest, BlendPlane_Opt) { |
+ int max_diff = TestBlendPlane(benchmark_width_, benchmark_height_, |
+ benchmark_iterations_, |
+ +1, 0); |
+} |
+#endif |
+ |
TEST_F(LibYUVPlanarTest, TestAffine) { |
SIMD_ALIGNED(uint8 orig_pixels_0[1280][4]); |
SIMD_ALIGNED(uint8 interpolate_pixels_C[1280][4]); |