Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(780)

Unified Diff: media/base/yuv_convert_perftest.cc

Issue 1286913002: add ConvertYUVAToARGBRow_MMX to media_perftests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: full path for includes Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | media/media.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « no previous file | media/media.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698