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

Side by Side Diff: media/base/vector_math_unittest.cc

Issue 13726011: Add vector_math::FMUL. Replace audio_util::AdjustVolume. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix volume == 1 case. Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/base/vector_math_testing.h ('k') | media/media.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // MSVC++ requires this to be set before any other includes to get M_PI. 5 // MSVC++ requires this to be set before any other includes to get M_PI.
6 #define _USE_MATH_DEFINES 6 #define _USE_MATH_DEFINES
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/cpu.h" 10 #include "base/cpu.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 ASSERT_TRUE(base::CPU().has_sse()); 96 ASSERT_TRUE(base::CPU().has_sse());
97 SCOPED_TRACE("FMAC_SSE"); 97 SCOPED_TRACE("FMAC_SSE");
98 FillTestVectors(kInputFillValue, kOutputFillValue); 98 FillTestVectors(kInputFillValue, kOutputFillValue);
99 vector_math::FMAC_SSE( 99 vector_math::FMAC_SSE(
100 input_vector.get(), kScale, kVectorSize, output_vector.get()); 100 input_vector.get(), kScale, kVectorSize, output_vector.get());
101 VerifyOutput(kResult); 101 VerifyOutput(kResult);
102 } 102 }
103 #endif 103 #endif
104 } 104 }
105 105
106 // Ensure each optimized vector_math::FMUL() method returns the same value.
107 TEST_F(VectorMathTest, FMUL) {
108 static const float kResult = kInputFillValue * kScale;
109
110 {
111 SCOPED_TRACE("FMUL");
112 FillTestVectors(kInputFillValue, kOutputFillValue);
113 vector_math::FMUL(
114 input_vector.get(), kScale, kVectorSize, output_vector.get());
115 VerifyOutput(kResult);
116 }
117
118 {
119 SCOPED_TRACE("FMUL_C");
120 FillTestVectors(kInputFillValue, kOutputFillValue);
121 vector_math::FMUL_C(
122 input_vector.get(), kScale, kVectorSize, output_vector.get());
123 VerifyOutput(kResult);
124 }
125
126 #if defined(ARCH_CPU_X86_FAMILY)
127 {
128 ASSERT_TRUE(base::CPU().has_sse());
129 SCOPED_TRACE("FMUL_SSE");
130 FillTestVectors(kInputFillValue, kOutputFillValue);
131 vector_math::FMUL_SSE(
132 input_vector.get(), kScale, kVectorSize, output_vector.get());
133 VerifyOutput(kResult);
134 }
135 #endif
136 }
137
106 // Benchmark for each optimized vector_math::FMAC() method. Original benchmarks 138 // Benchmark for each optimized vector_math::FMAC() method. Original benchmarks
107 // were run with --vector-fmac-iterations=200000. 139 // were run with --vector-fmac-iterations=200000.
108 TEST_F(VectorMathTest, FMACBenchmark) { 140 TEST_F(VectorMathTest, FMACBenchmark) {
109 static const int kBenchmarkIterations = BenchmarkIterations(); 141 static const int kBenchmarkIterations = BenchmarkIterations();
110 142
111 printf("Benchmarking %d iterations:\n", kBenchmarkIterations); 143 printf("Benchmarking %d iterations:\n", kBenchmarkIterations);
112 144
113 // Benchmark FMAC_C(). 145 // Benchmark FMAC_C().
114 FillTestVectors(kInputFillValue, kOutputFillValue); 146 FillTestVectors(kInputFillValue, kOutputFillValue);
115 TimeTicks start = TimeTicks::HighResNow(); 147 TimeTicks start = TimeTicks::HighResNow();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 } 181 }
150 double total_time_sse_aligned_ms = 182 double total_time_sse_aligned_ms =
151 (TimeTicks::HighResNow() - start).InMillisecondsF(); 183 (TimeTicks::HighResNow() - start).InMillisecondsF();
152 printf("FMAC_SSE (aligned size) took %.2fms; which is %.2fx faster than" 184 printf("FMAC_SSE (aligned size) took %.2fms; which is %.2fx faster than"
153 " FMAC_C and %.2fx faster than FMAC_SSE (unaligned size).\n", 185 " FMAC_C and %.2fx faster than FMAC_SSE (unaligned size).\n",
154 total_time_sse_aligned_ms, total_time_c_ms / total_time_sse_aligned_ms, 186 total_time_sse_aligned_ms, total_time_c_ms / total_time_sse_aligned_ms,
155 total_time_sse_unaligned_ms / total_time_sse_aligned_ms); 187 total_time_sse_unaligned_ms / total_time_sse_aligned_ms);
156 #endif 188 #endif
157 } 189 }
158 190
191
192 // Benchmark for each optimized vector_math::FMUL() method. Original benchmarks
193 // were run with --vector-math-iterations=200000.
194 TEST_F(VectorMathTest, FMULBenchmark) {
195 static const int kBenchmarkIterations = BenchmarkIterations();
196
197 printf("Benchmarking %d iterations:\n", kBenchmarkIterations);
198
199 // Benchmark FMUL_C().
200 FillTestVectors(kInputFillValue, kOutputFillValue);
201 TimeTicks start = TimeTicks::HighResNow();
202 for (int i = 0; i < kBenchmarkIterations; ++i) {
203 vector_math::FMUL_C(
204 input_vector.get(), kScale, kVectorSize, output_vector.get());
205 }
206 double total_time_c_ms = (TimeTicks::HighResNow() - start).InMillisecondsF();
207 printf("FMUL_C took %.2fms.\n", total_time_c_ms);
208
209 #if defined(ARCH_CPU_X86_FAMILY)
210 ASSERT_TRUE(base::CPU().has_sse());
211
212 // Benchmark FMUL_SSE() with unaligned size.
213 ASSERT_NE((kVectorSize - 1) % (vector_math::kRequiredAlignment /
214 sizeof(float)), 0U);
215 FillTestVectors(kInputFillValue, kOutputFillValue);
216 start = TimeTicks::HighResNow();
217 for (int j = 0; j < kBenchmarkIterations; ++j) {
218 vector_math::FMUL_SSE(
219 input_vector.get(), kScale, kVectorSize - 1, output_vector.get());
220 }
221 double total_time_sse_unaligned_ms =
222 (TimeTicks::HighResNow() - start).InMillisecondsF();
223 printf("FMUL_SSE (unaligned size) took %.2fms; which is %.2fx faster than"
224 " FMUL_C.\n", total_time_sse_unaligned_ms,
225 total_time_c_ms / total_time_sse_unaligned_ms);
226
227 // Benchmark FMUL_SSE() with aligned size.
228 ASSERT_EQ(kVectorSize % (vector_math::kRequiredAlignment / sizeof(float)),
229 0U);
230 FillTestVectors(kInputFillValue, kOutputFillValue);
231 start = TimeTicks::HighResNow();
232 for (int j = 0; j < kBenchmarkIterations; ++j) {
233 vector_math::FMUL_SSE(
234 input_vector.get(), kScale, kVectorSize, output_vector.get());
235 }
236 double total_time_sse_aligned_ms =
237 (TimeTicks::HighResNow() - start).InMillisecondsF();
238 printf("FMUL_SSE (aligned size) took %.2fms; which is %.2fx faster than"
239 " FMUL_C and %.2fx faster than FMUL_SSE (unaligned size).\n",
240 total_time_sse_aligned_ms, total_time_c_ms / total_time_sse_aligned_ms,
241 total_time_sse_unaligned_ms / total_time_sse_aligned_ms);
242 #endif
243 }
244
159 } // namespace media 245 } // namespace media
OLDNEW
« no previous file with comments | « media/base/vector_math_testing.h ('k') | media/media.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698