Index: media/base/yuv_convert_perftest.cc |
diff --git a/media/base/yuv_convert_perftest.cc b/media/base/yuv_convert_perftest.cc |
index 7d3d64c956cf298ab45e0e3dc4996f2fd69d7fc5..6f3756bb49868358573859947302dc6d9ac900d6 100644 |
--- a/media/base/yuv_convert_perftest.cc |
+++ b/media/base/yuv_convert_perftest.cc |
@@ -12,6 +12,7 @@ |
#include "media/base/yuv_convert.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "testing/perf/perf_test.h" |
+#include "third_party/libyuv/include/libyuv/row.h" |
namespace media { |
#if !defined(ARCH_CPU_ARM_FAMILY) && !defined(ARCH_CPU_MIPS_FAMILY) |
@@ -64,6 +65,27 @@ class YUVConvertPerfTest : public testing::Test { |
DISALLOW_COPY_AND_ASSIGN(YUVConvertPerfTest); |
}; |
+TEST_F(YUVConvertPerfTest, I422ToARGBRow_SSSE3) { |
+ ASSERT_TRUE(base::CPU().has_ssse3()); |
fbarchard
2015/08/12 23:27:05
Is assert ok?
DaleCurtis
2015/08/13 00:46:40
If the bots pass, then yes. It'll be obvious if th
|
+ |
+ base::TimeTicks start = base::TimeTicks::Now(); |
+ for (int i = 0; i < kPerfTestIterations; ++i) { |
+ for (int row = 0; row < kSourceHeight; ++row) { |
+ int chroma_row = row / 2; |
+ libyuv::I422ToARGBRow_SSSE3( |
+ yuv_bytes_.get() + row * kSourceWidth, |
+ yuv_bytes_.get() + kSourceUOffset + (chroma_row * kSourceWidth / 2), |
+ yuv_bytes_.get() + kSourceVOffset + (chroma_row * kSourceWidth / 2), |
+ rgb_bytes_converted_.get(), |
+ kWidth); |
+ } |
+ } |
+ double total_time_seconds = (base::TimeTicks::Now() - start).InSecondsF(); |
+ perf_test::PrintResult( |
+ "yuv_convert_perftest", "", "I422ToARGBRow_SSSE3", |
+ kPerfTestIterations / total_time_seconds, "runs/s", true); |
+} |
+ |
TEST_F(YUVConvertPerfTest, ConvertYUVToRGB32Row_SSE) { |
ASSERT_TRUE(base::CPU().has_sse()); |
@@ -80,11 +102,35 @@ TEST_F(YUVConvertPerfTest, ConvertYUVToRGB32Row_SSE) { |
GetLookupTable(YV12)); |
} |
} |
+ media::EmptyRegisterState(); |
double total_time_seconds = (base::TimeTicks::Now() - start).InSecondsF(); |
perf_test::PrintResult( |
"yuv_convert_perftest", "", "ConvertYUVToRGB32Row_SSE", |
kPerfTestIterations / total_time_seconds, "runs/s", true); |
+} |
+ |
+TEST_F(YUVConvertPerfTest, ConvertYUVAToARGBRow_MMX) { |
+ ASSERT_TRUE(base::CPU().has_sse()); |
+ |
+ base::TimeTicks start = base::TimeTicks::Now(); |
+ for (int i = 0; i < kPerfTestIterations; ++i) { |
+ for (int row = 0; row < kSourceHeight; ++row) { |
+ int chroma_row = row / 2; |
+ ConvertYUVAToARGBRow_MMX( |
+ yuv_bytes_.get() + row * kSourceWidth, |
+ yuv_bytes_.get() + kSourceUOffset + (chroma_row * kSourceWidth / 2), |
+ yuv_bytes_.get() + kSourceVOffset + (chroma_row * kSourceWidth / 2), |
+ yuv_bytes_.get() + row * kSourceWidth, // hack: use luma for alpha |
+ rgb_bytes_converted_.get(), |
+ kWidth, |
+ GetLookupTable(YV12)); |
+ } |
+ } |
media::EmptyRegisterState(); |
fbarchard
2015/08/12 23:27:05
media::EmptyRegisterState() does emms, which allow
|
+ double total_time_seconds = (base::TimeTicks::Now() - start).InSecondsF(); |
+ perf_test::PrintResult( |
+ "yuv_convert_perftest", "", "ConvertYUVAToARGBRow_MMX", |
+ kPerfTestIterations / total_time_seconds, "runs/s", true); |
} |
// 64-bit release + component builds on Windows are too smart and optimizes |
@@ -109,11 +155,11 @@ TEST_F(YUVConvertPerfTest, ScaleYUVToRGB32Row_SSE) { |
GetLookupTable(YV12)); |
} |
} |
+ media::EmptyRegisterState(); |
double total_time_seconds = (base::TimeTicks::Now() - start).InSecondsF(); |
perf_test::PrintResult( |
"yuv_convert_perftest", "", "ScaleYUVToRGB32Row_SSE", |
kPerfTestIterations / total_time_seconds, "runs/s", true); |
- media::EmptyRegisterState(); |
} |
TEST_F(YUVConvertPerfTest, LinearScaleYUVToRGB32Row_SSE) { |
@@ -135,11 +181,11 @@ TEST_F(YUVConvertPerfTest, LinearScaleYUVToRGB32Row_SSE) { |
GetLookupTable(YV12)); |
} |
} |
+ media::EmptyRegisterState(); |
double total_time_seconds = (base::TimeTicks::Now() - start).InSecondsF(); |
perf_test::PrintResult( |
"yuv_convert_perftest", "", "LinearScaleYUVToRGB32Row_SSE", |
kPerfTestIterations / total_time_seconds, "runs/s", true); |
- media::EmptyRegisterState(); |
} |
#endif // defined(OS_WIN) && (ARCH_CPU_X86 || COMPONENT_BUILD) |