1*77c1e3ccSAndroid Build Coastguard Worker /*
2*77c1e3ccSAndroid Build Coastguard Worker * Copyright (c) 2020, Alliance for Open Media. All rights reserved.
3*77c1e3ccSAndroid Build Coastguard Worker *
4*77c1e3ccSAndroid Build Coastguard Worker * This source code is subject to the terms of the BSD 2 Clause License and
5*77c1e3ccSAndroid Build Coastguard Worker * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6*77c1e3ccSAndroid Build Coastguard Worker * was not distributed with this source code in the LICENSE file, you can
7*77c1e3ccSAndroid Build Coastguard Worker * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8*77c1e3ccSAndroid Build Coastguard Worker * Media Patent License 1.0 was not distributed with this source code in the
9*77c1e3ccSAndroid Build Coastguard Worker * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*77c1e3ccSAndroid Build Coastguard Worker */
11*77c1e3ccSAndroid Build Coastguard Worker
12*77c1e3ccSAndroid Build Coastguard Worker #include <cstdlib>
13*77c1e3ccSAndroid Build Coastguard Worker #include <new>
14*77c1e3ccSAndroid Build Coastguard Worker #include <tuple>
15*77c1e3ccSAndroid Build Coastguard Worker
16*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_config.h"
17*77c1e3ccSAndroid Build Coastguard Worker #include "config/av1_rtcd.h"
18*77c1e3ccSAndroid Build Coastguard Worker
19*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_codec.h"
20*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_integer.h"
21*77c1e3ccSAndroid Build Coastguard Worker #include "aom_mem/aom_mem.h"
22*77c1e3ccSAndroid Build Coastguard Worker #include "aom_ports/aom_timer.h"
23*77c1e3ccSAndroid Build Coastguard Worker #include "aom_ports/mem.h"
24*77c1e3ccSAndroid Build Coastguard Worker #include "av1/encoder/palette.h"
25*77c1e3ccSAndroid Build Coastguard Worker #include "gtest/gtest.h"
26*77c1e3ccSAndroid Build Coastguard Worker #include "test/acm_random.h"
27*77c1e3ccSAndroid Build Coastguard Worker #include "test/register_state_check.h"
28*77c1e3ccSAndroid Build Coastguard Worker #include "test/util.h"
29*77c1e3ccSAndroid Build Coastguard Worker
30*77c1e3ccSAndroid Build Coastguard Worker namespace AV1Kmeans {
31*77c1e3ccSAndroid Build Coastguard Worker typedef void (*av1_calc_indices_dim1_func)(const int16_t *data,
32*77c1e3ccSAndroid Build Coastguard Worker const int16_t *centroids,
33*77c1e3ccSAndroid Build Coastguard Worker uint8_t *indices,
34*77c1e3ccSAndroid Build Coastguard Worker int64_t *total_dist, int n, int k);
35*77c1e3ccSAndroid Build Coastguard Worker typedef void (*av1_calc_indices_dim2_func)(const int16_t *data,
36*77c1e3ccSAndroid Build Coastguard Worker const int16_t *centroids,
37*77c1e3ccSAndroid Build Coastguard Worker uint8_t *indices,
38*77c1e3ccSAndroid Build Coastguard Worker int64_t *total_dist, int n, int k);
39*77c1e3ccSAndroid Build Coastguard Worker
40*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<av1_calc_indices_dim1_func, BLOCK_SIZE>
41*77c1e3ccSAndroid Build Coastguard Worker av1_calc_indices_dim1Param;
42*77c1e3ccSAndroid Build Coastguard Worker
43*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<av1_calc_indices_dim2_func, BLOCK_SIZE>
44*77c1e3ccSAndroid Build Coastguard Worker av1_calc_indices_dim2Param;
45*77c1e3ccSAndroid Build Coastguard Worker
46*77c1e3ccSAndroid Build Coastguard Worker class AV1KmeansTest1
47*77c1e3ccSAndroid Build Coastguard Worker : public ::testing::TestWithParam<av1_calc_indices_dim1Param> {
48*77c1e3ccSAndroid Build Coastguard Worker public:
49*77c1e3ccSAndroid Build Coastguard Worker ~AV1KmeansTest1() override;
50*77c1e3ccSAndroid Build Coastguard Worker void SetUp() override;
51*77c1e3ccSAndroid Build Coastguard Worker
52*77c1e3ccSAndroid Build Coastguard Worker protected:
53*77c1e3ccSAndroid Build Coastguard Worker void RunCheckOutput(av1_calc_indices_dim1_func test_impl, BLOCK_SIZE bsize,
54*77c1e3ccSAndroid Build Coastguard Worker int centroids);
55*77c1e3ccSAndroid Build Coastguard Worker void RunSpeedTest(av1_calc_indices_dim1_func test_impl, BLOCK_SIZE bsize,
56*77c1e3ccSAndroid Build Coastguard Worker int centroids);
CheckResult(int n)57*77c1e3ccSAndroid Build Coastguard Worker bool CheckResult(int n) {
58*77c1e3ccSAndroid Build Coastguard Worker for (int idx = 0; idx < n; ++idx) {
59*77c1e3ccSAndroid Build Coastguard Worker if (indices1_[idx] != indices2_[idx]) {
60*77c1e3ccSAndroid Build Coastguard Worker printf("%d ", idx);
61*77c1e3ccSAndroid Build Coastguard Worker printf("%d != %d ", indices1_[idx], indices2_[idx]);
62*77c1e3ccSAndroid Build Coastguard Worker return false;
63*77c1e3ccSAndroid Build Coastguard Worker }
64*77c1e3ccSAndroid Build Coastguard Worker }
65*77c1e3ccSAndroid Build Coastguard Worker return true;
66*77c1e3ccSAndroid Build Coastguard Worker }
67*77c1e3ccSAndroid Build Coastguard Worker
68*77c1e3ccSAndroid Build Coastguard Worker libaom_test::ACMRandom rnd_;
69*77c1e3ccSAndroid Build Coastguard Worker int16_t data_[4096];
70*77c1e3ccSAndroid Build Coastguard Worker int16_t centroids_[8];
71*77c1e3ccSAndroid Build Coastguard Worker uint8_t indices1_[4096];
72*77c1e3ccSAndroid Build Coastguard Worker uint8_t indices2_[4096];
73*77c1e3ccSAndroid Build Coastguard Worker };
74*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AV1KmeansTest1);
75*77c1e3ccSAndroid Build Coastguard Worker
76*77c1e3ccSAndroid Build Coastguard Worker AV1KmeansTest1::~AV1KmeansTest1() = default;
77*77c1e3ccSAndroid Build Coastguard Worker
SetUp()78*77c1e3ccSAndroid Build Coastguard Worker void AV1KmeansTest1::SetUp() {
79*77c1e3ccSAndroid Build Coastguard Worker rnd_.Reset(libaom_test::ACMRandom::DeterministicSeed());
80*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < 4096; ++i) {
81*77c1e3ccSAndroid Build Coastguard Worker data_[i] = (int)rnd_.Rand8() << 4;
82*77c1e3ccSAndroid Build Coastguard Worker }
83*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < 8; i++) {
84*77c1e3ccSAndroid Build Coastguard Worker centroids_[i] = (int)rnd_.Rand8() << 4;
85*77c1e3ccSAndroid Build Coastguard Worker }
86*77c1e3ccSAndroid Build Coastguard Worker }
87*77c1e3ccSAndroid Build Coastguard Worker
RunCheckOutput(av1_calc_indices_dim1_func test_impl,BLOCK_SIZE bsize,int k)88*77c1e3ccSAndroid Build Coastguard Worker void AV1KmeansTest1::RunCheckOutput(av1_calc_indices_dim1_func test_impl,
89*77c1e3ccSAndroid Build Coastguard Worker BLOCK_SIZE bsize, int k) {
90*77c1e3ccSAndroid Build Coastguard Worker const int w = block_size_wide[bsize];
91*77c1e3ccSAndroid Build Coastguard Worker const int h = block_size_high[bsize];
92*77c1e3ccSAndroid Build Coastguard Worker const int n = w * h;
93*77c1e3ccSAndroid Build Coastguard Worker int64_t total_dist_dim1, total_dist_impl;
94*77c1e3ccSAndroid Build Coastguard Worker av1_calc_indices_dim1_c(data_, centroids_, indices1_, &total_dist_dim1, n, k);
95*77c1e3ccSAndroid Build Coastguard Worker test_impl(data_, centroids_, indices2_, &total_dist_impl, n, k);
96*77c1e3ccSAndroid Build Coastguard Worker
97*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(total_dist_dim1, total_dist_impl);
98*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(CheckResult(n), true)
99*77c1e3ccSAndroid Build Coastguard Worker << " block " << bsize << " index " << n << " Centroids " << k;
100*77c1e3ccSAndroid Build Coastguard Worker }
101*77c1e3ccSAndroid Build Coastguard Worker
RunSpeedTest(av1_calc_indices_dim1_func test_impl,BLOCK_SIZE bsize,int k)102*77c1e3ccSAndroid Build Coastguard Worker void AV1KmeansTest1::RunSpeedTest(av1_calc_indices_dim1_func test_impl,
103*77c1e3ccSAndroid Build Coastguard Worker BLOCK_SIZE bsize, int k) {
104*77c1e3ccSAndroid Build Coastguard Worker const int w = block_size_wide[bsize];
105*77c1e3ccSAndroid Build Coastguard Worker const int h = block_size_high[bsize];
106*77c1e3ccSAndroid Build Coastguard Worker const int n = w * h;
107*77c1e3ccSAndroid Build Coastguard Worker const int num_loops = 1000000000 / n;
108*77c1e3ccSAndroid Build Coastguard Worker
109*77c1e3ccSAndroid Build Coastguard Worker av1_calc_indices_dim1_func funcs[2] = { av1_calc_indices_dim1_c, test_impl };
110*77c1e3ccSAndroid Build Coastguard Worker double elapsed_time[2] = { 0 };
111*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < 2; ++i) {
112*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer timer;
113*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer_start(&timer);
114*77c1e3ccSAndroid Build Coastguard Worker av1_calc_indices_dim1_func func = funcs[i];
115*77c1e3ccSAndroid Build Coastguard Worker for (int j = 0; j < num_loops; ++j) {
116*77c1e3ccSAndroid Build Coastguard Worker func(data_, centroids_, indices1_, /*total_dist=*/nullptr, n, k);
117*77c1e3ccSAndroid Build Coastguard Worker }
118*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer_mark(&timer);
119*77c1e3ccSAndroid Build Coastguard Worker double time = static_cast<double>(aom_usec_timer_elapsed(&timer));
120*77c1e3ccSAndroid Build Coastguard Worker elapsed_time[i] = 1000.0 * time / num_loops;
121*77c1e3ccSAndroid Build Coastguard Worker }
122*77c1e3ccSAndroid Build Coastguard Worker printf("av1_calc_indices_dim1 indices= %d centroids=%d: %7.2f/%7.2fns", n, k,
123*77c1e3ccSAndroid Build Coastguard Worker elapsed_time[0], elapsed_time[1]);
124*77c1e3ccSAndroid Build Coastguard Worker printf("(%3.2f)\n", elapsed_time[0] / elapsed_time[1]);
125*77c1e3ccSAndroid Build Coastguard Worker }
126*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(AV1KmeansTest1,CheckOutput)127*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AV1KmeansTest1, CheckOutput) {
128*77c1e3ccSAndroid Build Coastguard Worker // centroids = 2..8
129*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 2);
130*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 3);
131*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 4);
132*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 5);
133*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 6);
134*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 7);
135*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 8);
136*77c1e3ccSAndroid Build Coastguard Worker }
137*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(AV1KmeansTest1,DISABLED_Speed)138*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AV1KmeansTest1, DISABLED_Speed) {
139*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 2);
140*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 3);
141*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 4);
142*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 5);
143*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 6);
144*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 7);
145*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 8);
146*77c1e3ccSAndroid Build Coastguard Worker }
147*77c1e3ccSAndroid Build Coastguard Worker
148*77c1e3ccSAndroid Build Coastguard Worker class AV1KmeansTest2
149*77c1e3ccSAndroid Build Coastguard Worker : public ::testing::TestWithParam<av1_calc_indices_dim2Param> {
150*77c1e3ccSAndroid Build Coastguard Worker public:
151*77c1e3ccSAndroid Build Coastguard Worker ~AV1KmeansTest2() override;
152*77c1e3ccSAndroid Build Coastguard Worker void SetUp() override;
153*77c1e3ccSAndroid Build Coastguard Worker
154*77c1e3ccSAndroid Build Coastguard Worker protected:
155*77c1e3ccSAndroid Build Coastguard Worker void RunCheckOutput(av1_calc_indices_dim2_func test_impl, BLOCK_SIZE bsize,
156*77c1e3ccSAndroid Build Coastguard Worker int centroids);
157*77c1e3ccSAndroid Build Coastguard Worker void RunSpeedTest(av1_calc_indices_dim2_func test_impl, BLOCK_SIZE bsize,
158*77c1e3ccSAndroid Build Coastguard Worker int centroids);
CheckResult(int n)159*77c1e3ccSAndroid Build Coastguard Worker bool CheckResult(int n) {
160*77c1e3ccSAndroid Build Coastguard Worker bool flag = true;
161*77c1e3ccSAndroid Build Coastguard Worker for (int idx = 0; idx < n; ++idx) {
162*77c1e3ccSAndroid Build Coastguard Worker if (indices1_[idx] != indices2_[idx]) {
163*77c1e3ccSAndroid Build Coastguard Worker printf("%d ", idx);
164*77c1e3ccSAndroid Build Coastguard Worker printf("%d != %d ", indices1_[idx], indices2_[idx]);
165*77c1e3ccSAndroid Build Coastguard Worker flag = false;
166*77c1e3ccSAndroid Build Coastguard Worker }
167*77c1e3ccSAndroid Build Coastguard Worker }
168*77c1e3ccSAndroid Build Coastguard Worker if (flag == false) {
169*77c1e3ccSAndroid Build Coastguard Worker return false;
170*77c1e3ccSAndroid Build Coastguard Worker }
171*77c1e3ccSAndroid Build Coastguard Worker return true;
172*77c1e3ccSAndroid Build Coastguard Worker }
173*77c1e3ccSAndroid Build Coastguard Worker
174*77c1e3ccSAndroid Build Coastguard Worker libaom_test::ACMRandom rnd_;
175*77c1e3ccSAndroid Build Coastguard Worker int16_t data_[4096 * 2];
176*77c1e3ccSAndroid Build Coastguard Worker int16_t centroids_[8 * 2];
177*77c1e3ccSAndroid Build Coastguard Worker uint8_t indices1_[4096];
178*77c1e3ccSAndroid Build Coastguard Worker uint8_t indices2_[4096];
179*77c1e3ccSAndroid Build Coastguard Worker };
180*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AV1KmeansTest2);
181*77c1e3ccSAndroid Build Coastguard Worker
182*77c1e3ccSAndroid Build Coastguard Worker AV1KmeansTest2::~AV1KmeansTest2() = default;
183*77c1e3ccSAndroid Build Coastguard Worker
SetUp()184*77c1e3ccSAndroid Build Coastguard Worker void AV1KmeansTest2::SetUp() {
185*77c1e3ccSAndroid Build Coastguard Worker rnd_.Reset(libaom_test::ACMRandom::DeterministicSeed());
186*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < 4096 * 2; ++i) {
187*77c1e3ccSAndroid Build Coastguard Worker data_[i] = (int)rnd_.Rand8();
188*77c1e3ccSAndroid Build Coastguard Worker }
189*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < 8 * 2; i++) {
190*77c1e3ccSAndroid Build Coastguard Worker centroids_[i] = (int)rnd_.Rand8();
191*77c1e3ccSAndroid Build Coastguard Worker }
192*77c1e3ccSAndroid Build Coastguard Worker }
193*77c1e3ccSAndroid Build Coastguard Worker
RunCheckOutput(av1_calc_indices_dim2_func test_impl,BLOCK_SIZE bsize,int k)194*77c1e3ccSAndroid Build Coastguard Worker void AV1KmeansTest2::RunCheckOutput(av1_calc_indices_dim2_func test_impl,
195*77c1e3ccSAndroid Build Coastguard Worker BLOCK_SIZE bsize, int k) {
196*77c1e3ccSAndroid Build Coastguard Worker const int w = block_size_wide[bsize];
197*77c1e3ccSAndroid Build Coastguard Worker const int h = block_size_high[bsize];
198*77c1e3ccSAndroid Build Coastguard Worker const int n = w * h;
199*77c1e3ccSAndroid Build Coastguard Worker int64_t total_dist_dim2, total_dist_impl;
200*77c1e3ccSAndroid Build Coastguard Worker av1_calc_indices_dim2_c(data_, centroids_, indices1_, &total_dist_dim2, n, k);
201*77c1e3ccSAndroid Build Coastguard Worker test_impl(data_, centroids_, indices2_, &total_dist_impl, n, k);
202*77c1e3ccSAndroid Build Coastguard Worker
203*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(total_dist_dim2, total_dist_impl);
204*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(CheckResult(n), true)
205*77c1e3ccSAndroid Build Coastguard Worker << " block " << bsize << " index " << n << " Centroids " << k;
206*77c1e3ccSAndroid Build Coastguard Worker }
207*77c1e3ccSAndroid Build Coastguard Worker
RunSpeedTest(av1_calc_indices_dim2_func test_impl,BLOCK_SIZE bsize,int k)208*77c1e3ccSAndroid Build Coastguard Worker void AV1KmeansTest2::RunSpeedTest(av1_calc_indices_dim2_func test_impl,
209*77c1e3ccSAndroid Build Coastguard Worker BLOCK_SIZE bsize, int k) {
210*77c1e3ccSAndroid Build Coastguard Worker const int w = block_size_wide[bsize];
211*77c1e3ccSAndroid Build Coastguard Worker const int h = block_size_high[bsize];
212*77c1e3ccSAndroid Build Coastguard Worker const int n = w * h;
213*77c1e3ccSAndroid Build Coastguard Worker const int num_loops = 1000000000 / n;
214*77c1e3ccSAndroid Build Coastguard Worker
215*77c1e3ccSAndroid Build Coastguard Worker av1_calc_indices_dim2_func funcs[2] = { av1_calc_indices_dim2_c, test_impl };
216*77c1e3ccSAndroid Build Coastguard Worker double elapsed_time[2] = { 0 };
217*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < 2; ++i) {
218*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer timer;
219*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer_start(&timer);
220*77c1e3ccSAndroid Build Coastguard Worker av1_calc_indices_dim2_func func = funcs[i];
221*77c1e3ccSAndroid Build Coastguard Worker for (int j = 0; j < num_loops; ++j) {
222*77c1e3ccSAndroid Build Coastguard Worker func(data_, centroids_, indices1_, /*total_dist=*/nullptr, n, k);
223*77c1e3ccSAndroid Build Coastguard Worker }
224*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer_mark(&timer);
225*77c1e3ccSAndroid Build Coastguard Worker double time = static_cast<double>(aom_usec_timer_elapsed(&timer));
226*77c1e3ccSAndroid Build Coastguard Worker elapsed_time[i] = 1000.0 * time / num_loops;
227*77c1e3ccSAndroid Build Coastguard Worker }
228*77c1e3ccSAndroid Build Coastguard Worker printf("av1_calc_indices_dim2 indices= %d centroids=%d: %7.2f/%7.2fns", n, k,
229*77c1e3ccSAndroid Build Coastguard Worker elapsed_time[0], elapsed_time[1]);
230*77c1e3ccSAndroid Build Coastguard Worker printf("(%3.2f)\n", elapsed_time[0] / elapsed_time[1]);
231*77c1e3ccSAndroid Build Coastguard Worker }
232*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(AV1KmeansTest2,CheckOutput)233*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AV1KmeansTest2, CheckOutput) {
234*77c1e3ccSAndroid Build Coastguard Worker // centroids = 2..8
235*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 2);
236*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 3);
237*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 4);
238*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 5);
239*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 6);
240*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 7);
241*77c1e3ccSAndroid Build Coastguard Worker RunCheckOutput(GET_PARAM(0), GET_PARAM(1), 8);
242*77c1e3ccSAndroid Build Coastguard Worker }
243*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(AV1KmeansTest2,DISABLED_Speed)244*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AV1KmeansTest2, DISABLED_Speed) {
245*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 2);
246*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 3);
247*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 4);
248*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 5);
249*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 6);
250*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 7);
251*77c1e3ccSAndroid Build Coastguard Worker RunSpeedTest(GET_PARAM(0), GET_PARAM(1), 8);
252*77c1e3ccSAndroid Build Coastguard Worker }
253*77c1e3ccSAndroid Build Coastguard Worker
254*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE2 || HAVE_AVX2 || HAVE_NEON
255*77c1e3ccSAndroid Build Coastguard Worker const BLOCK_SIZE kValidBlockSize[] = { BLOCK_8X8, BLOCK_8X16, BLOCK_8X32,
256*77c1e3ccSAndroid Build Coastguard Worker BLOCK_16X8, BLOCK_16X16, BLOCK_16X32,
257*77c1e3ccSAndroid Build Coastguard Worker BLOCK_32X8, BLOCK_32X16, BLOCK_32X32,
258*77c1e3ccSAndroid Build Coastguard Worker BLOCK_32X64, BLOCK_64X32, BLOCK_64X64,
259*77c1e3ccSAndroid Build Coastguard Worker BLOCK_16X64, BLOCK_64X16 };
260*77c1e3ccSAndroid Build Coastguard Worker #endif
261*77c1e3ccSAndroid Build Coastguard Worker
262*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE2
263*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
264*77c1e3ccSAndroid Build Coastguard Worker SSE2, AV1KmeansTest1,
265*77c1e3ccSAndroid Build Coastguard Worker ::testing::Combine(::testing::Values(&av1_calc_indices_dim1_sse2),
266*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(kValidBlockSize)));
267*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
268*77c1e3ccSAndroid Build Coastguard Worker SSE2, AV1KmeansTest2,
269*77c1e3ccSAndroid Build Coastguard Worker ::testing::Combine(::testing::Values(&av1_calc_indices_dim2_sse2),
270*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(kValidBlockSize)));
271*77c1e3ccSAndroid Build Coastguard Worker #endif
272*77c1e3ccSAndroid Build Coastguard Worker
273*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_AVX2
274*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
275*77c1e3ccSAndroid Build Coastguard Worker AVX2, AV1KmeansTest1,
276*77c1e3ccSAndroid Build Coastguard Worker ::testing::Combine(::testing::Values(&av1_calc_indices_dim1_avx2),
277*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(kValidBlockSize)));
278*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
279*77c1e3ccSAndroid Build Coastguard Worker AVX2, AV1KmeansTest2,
280*77c1e3ccSAndroid Build Coastguard Worker ::testing::Combine(::testing::Values(&av1_calc_indices_dim2_avx2),
281*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(kValidBlockSize)));
282*77c1e3ccSAndroid Build Coastguard Worker #endif
283*77c1e3ccSAndroid Build Coastguard Worker
284*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON
285*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
286*77c1e3ccSAndroid Build Coastguard Worker NEON, AV1KmeansTest1,
287*77c1e3ccSAndroid Build Coastguard Worker ::testing::Combine(::testing::Values(&av1_calc_indices_dim1_neon),
288*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(kValidBlockSize)));
289*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
290*77c1e3ccSAndroid Build Coastguard Worker NEON, AV1KmeansTest2,
291*77c1e3ccSAndroid Build Coastguard Worker ::testing::Combine(::testing::Values(&av1_calc_indices_dim2_neon),
292*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(kValidBlockSize)));
293*77c1e3ccSAndroid Build Coastguard Worker #endif
294*77c1e3ccSAndroid Build Coastguard Worker
295*77c1e3ccSAndroid Build Coastguard Worker } // namespace AV1Kmeans
296