diff options
author | fbarchard <fbarchard@google.com> | 2015-08-12 18:17:10 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-13 01:17:43 +0000 |
commit | 98e918a3abdfcc2eaae3df9cc3dd9f8225f39edc (patch) | |
tree | 62d68b87e1484b36780f0dd8583fe0255479dae9 /media | |
parent | f61dcf839472db5b0a8a3dc0f241929f17ddb8ff (diff) | |
download | chromium_src-98e918a3abdfcc2eaae3df9cc3dd9f8225f39edc.zip chromium_src-98e918a3abdfcc2eaae3df9cc3dd9f8225f39edc.tar.gz chromium_src-98e918a3abdfcc2eaae3df9cc3dd9f8225f39edc.tar.bz2 |
Add YUVConvertPerfTest.ConvertYUVAToARGBRow_MMX and YUVConvertPerfTest.I422ToARGBRow_SSSE3 to media_perftests.
Fix math error when printing results by clearing the MMX state before doing float math.
BUG=libyuv:473
Review URL: https://codereview.chromium.org/1286913002
Cr-Commit-Position: refs/heads/master@{#343140}
Diffstat (limited to 'media')
-rw-r--r-- | media/base/yuv_convert_perftest.cc | 50 | ||||
-rw-r--r-- | media/media.gyp | 3 |
2 files changed, 50 insertions, 3 deletions
diff --git a/media/base/yuv_convert_perftest.cc b/media/base/yuv_convert_perftest.cc index 7d3d64c..6f3756b 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()); + + 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(); + 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) diff --git a/media/media.gyp b/media/media.gyp index 121cd80..3f834db 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -1415,9 +1415,10 @@ '../testing/gmock.gyp:gmock', '../testing/gtest.gyp:gtest', '../testing/perf/perf_test.gyp:perf_test', + '../third_party/libyuv/libyuv.gyp:libyuv', '../ui/gfx/gfx.gyp:gfx', - '../ui/gfx/gfx.gyp:gfx_test_support', '../ui/gfx/gfx.gyp:gfx_geometry', + '../ui/gfx/gfx.gyp:gfx_test_support', 'media', 'media_test_support', 'shared_memory_support', |