summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorfbarchard <fbarchard@google.com>2015-08-12 18:17:10 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-13 01:17:43 +0000
commit98e918a3abdfcc2eaae3df9cc3dd9f8225f39edc (patch)
tree62d68b87e1484b36780f0dd8583fe0255479dae9 /media
parentf61dcf839472db5b0a8a3dc0f241929f17ddb8ff (diff)
downloadchromium_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.cc50
-rw-r--r--media/media.gyp3
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',