xref: /aosp_15_r20/system/media/audio_utils/benchmarks/channelmix_benchmark.cpp (revision b9df5ad1c9ac98a7fefaac271a55f7ae3db05414)
1*b9df5ad1SAndroid Build Coastguard Worker /*
2*b9df5ad1SAndroid Build Coastguard Worker  * Copyright 2021 The Android Open Source Project
3*b9df5ad1SAndroid Build Coastguard Worker  *
4*b9df5ad1SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*b9df5ad1SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*b9df5ad1SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*b9df5ad1SAndroid Build Coastguard Worker  *
8*b9df5ad1SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*b9df5ad1SAndroid Build Coastguard Worker  *
10*b9df5ad1SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*b9df5ad1SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*b9df5ad1SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b9df5ad1SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*b9df5ad1SAndroid Build Coastguard Worker  * limitations under the License.
15*b9df5ad1SAndroid Build Coastguard Worker  */
16*b9df5ad1SAndroid Build Coastguard Worker 
17*b9df5ad1SAndroid Build Coastguard Worker #include <audio_utils/ChannelMix.h>
18*b9df5ad1SAndroid Build Coastguard Worker 
19*b9df5ad1SAndroid Build Coastguard Worker #include <random>
20*b9df5ad1SAndroid Build Coastguard Worker #include <vector>
21*b9df5ad1SAndroid Build Coastguard Worker 
22*b9df5ad1SAndroid Build Coastguard Worker #include <benchmark/benchmark.h>
23*b9df5ad1SAndroid Build Coastguard Worker #include <log/log.h>
24*b9df5ad1SAndroid Build Coastguard Worker 
25*b9df5ad1SAndroid Build Coastguard Worker static constexpr audio_channel_mask_t kChannelPositionMasks[] = {
26*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_FRONT_LEFT,
27*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_FRONT_CENTER,
28*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_STEREO,
29*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_2POINT1,
30*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_2POINT0POINT2,
31*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_QUAD, // AUDIO_CHANNEL_OUT_QUAD_BACK
32*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_QUAD_SIDE,
33*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_SURROUND,
34*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_2POINT1POINT2,
35*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_3POINT0POINT2,
36*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_PENTA,
37*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_3POINT1POINT2,
38*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_5POINT1, // AUDIO_CHANNEL_OUT_5POINT1_BACK
39*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_5POINT1_SIDE,
40*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_6POINT1,
41*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_5POINT1POINT2,
42*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_7POINT1,
43*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_5POINT1POINT4,
44*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_7POINT1POINT2,
45*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_7POINT1POINT4,
46*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_9POINT1POINT6,
47*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_13POINT_360RA,
48*b9df5ad1SAndroid Build Coastguard Worker     AUDIO_CHANNEL_OUT_22POINT2,
49*b9df5ad1SAndroid Build Coastguard Worker };
50*b9df5ad1SAndroid Build Coastguard Worker 
51*b9df5ad1SAndroid Build Coastguard Worker /*
52*b9df5ad1SAndroid Build Coastguard Worker $ adb shell /data/benchmarktest64/channelmix_benchmark/channelmix_benchmark
53*b9df5ad1SAndroid Build Coastguard Worker Pixel 7 arm64 benchmark
54*b9df5ad1SAndroid Build Coastguard Worker 
55*b9df5ad1SAndroid Build Coastguard Worker ------------------------------------------------------------------------------------------------
56*b9df5ad1SAndroid Build Coastguard Worker Benchmark                                    Time                      CPU             Iteration
57*b9df5ad1SAndroid Build Coastguard Worker ------------------------------------------------------------------------------------------------
58*b9df5ad1SAndroid Build Coastguard Worker channelmix_benchmark:
59*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/0             1584.624127461959 ns    1577.8786910297354 ns       443677
60*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/1             1584.678016063811 ns    1577.5935446358542 ns       443724
61*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/2             257.8439968596911 ns    256.73377516518275 ns      2727131
62*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/3            2817.8586154104814 ns    2805.4497511201575 ns       249518
63*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/4             3454.621091622776 ns     3438.280971421562 ns       203825
64*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/5             814.5202073907247 ns     810.8345646578592 ns       863298
65*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/6             814.6591305879139 ns     810.8376574553886 ns       863181
66*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/7            3450.1116802072984 ns     3435.144113779975 ns       203832
67*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/8            4075.6687216808855 ns     4056.735656426362 ns       172586
68*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/9            4075.1493397336594 ns    4056.1154684474764 ns       172506
69*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/10            4050.552323304721 ns     4031.185599428678 ns       173632
70*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/11             4772.08328528545 ns    4749.7996554086585 ns       147421
71*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/12           1207.4669943988806 ns     1201.779749169794 ns       582386
72*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/13           1206.6310224396407 ns    1201.2170626850327 ns       582675
73*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/14             5333.77644088611 ns     5307.639342522252 ns       131898
74*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/15           1305.1935398263006 ns    1299.0954717541388 ns       538840
75*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/16           1305.1100692447556 ns    1299.4297640484895 ns       538670
76*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/17            1886.552455306027 ns     1878.964744321161 ns       372479
77*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/18           1833.9518923822216 ns      1825.28045911661 ns       383432
78*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/19           2123.2422014413596 ns     2113.312087275008 ns       331183
79*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/20            2566.000912328837 ns    2554.4080810439914 ns       274024
80*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/21            9674.346659891693 ns     9572.201779926385 ns        72812
81*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_Stereo/22            7064.819541015039 ns     7033.133485390462 ns        99524
82*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/0            3998.744585320616 ns     3979.878947907533 ns       175726
83*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/1           3996.7273735393856 ns    3979.5646336261952 ns       175845
84*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/2            571.1685188685985 ns     568.5066485512494 ns      1274789
85*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/3            6859.186952421266 ns     6827.083100769158 ns       102839
86*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/4            8247.552512539802 ns     8213.975847278873 ns        85332
87*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/5            647.7379762376627 ns     644.8995942251229 ns      1095435
88*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/6            653.6735856426786 ns     651.0027499009582 ns      1077857
89*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/7             8239.63233966818 ns     8201.233626783234 ns        85307
90*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/8            9876.205631112243 ns     9830.739673485414 ns        71176
91*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/9            9895.919856358605 ns     9852.652964371222 ns        71010
92*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/10           9926.404937439764 ns     9880.174425299469 ns        71211
93*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/11          11098.554419676255 ns    11046.770994052376 ns        63387
94*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/12           661.3799346937448 ns     658.2737776463655 ns      1075548
95*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/13           660.2247365241512 ns        657.1922621923 ns      1074387
96*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/14           12488.98408949619 ns    12429.793927017769 ns        56315
97*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/15           785.5108530564086 ns     781.8289591958687 ns       903340
98*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/16           786.4194859807196 ns     782.6872009662999 ns       894130
99*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/17           1220.481377951544 ns    1214.7925379524959 ns       574534
100*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/18          1033.1440404735665 ns    1025.1535907684895 ns       688251
101*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/19          1384.1550536582333 ns    1378.3095904839972 ns       508869
102*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/20          1859.6552118374757 ns    1851.2871329217771 ns       378734
103*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/21           21042.00829614576 ns    20954.427595914778 ns        33389
104*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_5Point1/22           4865.180198686846 ns     4843.440710104699 ns       145556
105*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/0            5086.403517096561 ns     5066.400356235592 ns       136988
106*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/1             5092.64935733066 ns     5069.928712196951 ns       138018
107*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/2            580.8386797597832 ns     578.1633211791726 ns      1211931
108*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/3            8912.321896958316 ns     8873.011453286297 ns        78842
109*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/4           10968.632097606318 ns     10917.41972469887 ns        63930
110*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/5            726.8751572135141 ns     723.3895340485537 ns       967633
111*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/6            10990.37087972071 ns    10939.177440982927 ns        64134
112*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/7           10973.048671598453 ns    10913.438153663725 ns        64062
113*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/8           12721.667251641265 ns    12664.338230238987 ns        55273
114*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/9           12707.525889264853 ns    12654.736756227583 ns        55158
115*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/10          12749.720973614516 ns    12689.723798830073 ns        55217
116*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/11          14491.778839392775 ns     14434.37490176607 ns        48354
117*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/12           737.7057427091167 ns     734.2313228110585 ns       963796
118*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/13          14496.991651784358 ns    14422.233023217163 ns        48154
119*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/14          16464.798606889286 ns     16389.21455284934 ns        42782
120*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/15            559.213653594105 ns     556.9817588821725 ns      1277334
121*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/16           566.1605467286886 ns     563.6613941659941 ns      1254370
122*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/17          1253.3420120265812 ns    1248.0777030705242 ns       560261
123*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/18           1108.042257269461 ns     1102.862052077511 ns       635015
124*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/19           1527.825791177674 ns     1520.704571637185 ns       457451
125*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/20          1824.6548966125815 ns    1816.7435915419753 ns       384960
126*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/21           27557.99023414285 ns     27431.89951759037 ns        25497
127*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1/22            5616.79751878036 ns     5587.643648062816 ns       125261
128*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/0      7014.499259038577 ns     6984.192739569345 ns       100545
129*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/1     7021.7462064411075 ns     6988.617095503731 ns       100038
130*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/2      913.1760532582629 ns      908.506633272119 ns       770585
131*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/3     12477.598480005978 ns     12422.15004616809 ns        56316
132*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/4     15322.980915864659 ns    15255.479652302869 ns        45902
133*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/5     1084.1117429089002 ns    1079.0443395615782 ns       648766
134*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/6     15314.545660556396 ns     15241.66275902662 ns        45893
135*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/7     15290.398910794553 ns    15229.703583487835 ns        45905
136*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/8      17802.86192606147 ns    17706.310160968394 ns        39573
137*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/9     17793.085298720172 ns    17701.706681480868 ns        39602
138*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/10    17785.029805845286 ns     17695.70093032652 ns        39556
139*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/11    20452.726370331704 ns    20362.743108316856 ns        34353
140*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/12     905.1501997610313 ns     900.8145382372188 ns       778430
141*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/13    20452.494213333222 ns    20357.311517942882 ns        34303
142*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/14     22961.73918437959 ns     22856.77036601665 ns        30627
143*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/15     822.5476244151616 ns     818.6498375120065 ns       864987
144*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/16     827.1217072917217 ns     823.2904757872059 ns       850212
145*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/17     991.5142018416226 ns     986.8850542623812 ns       709239
146*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/18    1115.3075057537858 ns     1109.803063780115 ns       630463
147*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/19      910.203049595069 ns     906.0727563637828 ns       772496
148*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/20    1842.6523184706023 ns     1833.970990950399 ns       381674
149*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/21     38800.57224890828 ns     38630.07895753978 ns        18111
150*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_7Point1Point4/22      6308.58632322223 ns     6279.855444602969 ns       111459
151*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/0      9649.865710953989 ns      9607.98667947049 ns        72895
152*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/1       9648.56897947997 ns     9607.041150229887 ns        72855
153*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/2     1467.4483873457445 ns    1460.8920743784784 ns       479117
154*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/3     16716.733956963417 ns     16632.37615443196 ns        42012
155*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/4     20287.965075704346 ns    20193.316337419117 ns        34675
156*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/5     1464.4069860190825 ns    1457.8618415983076 ns       480159
157*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/6      20273.38667475504 ns    20177.981372379003 ns        34626
158*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/7     20287.996971267657 ns    20201.494432906646 ns        34668
159*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/8      23717.49644218307 ns    23606.660708865922 ns        29653
160*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/9     23693.305799054524 ns     23594.91264329071 ns        29660
161*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/10       23732.312119779 ns    23620.915066919006 ns        29588
162*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/11     27105.94758950138 ns    26974.348105900408 ns        25949
163*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/12    1173.9943372248606 ns    1168.4729043473424 ns       598823
164*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/13     27091.76928708911 ns    26973.336840077038 ns        25950
165*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/14     30555.80730795895 ns    30412.954379561914 ns        23016
166*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/15    1445.3035322833473 ns    1438.1497866413106 ns       486739
167*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/16    1083.7163404776202 ns     1078.846160485561 ns       648806
168*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/17    1105.8799540773066 ns    1100.7227664149027 ns       636723
169*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/18     1104.793673683923 ns    1099.5597121488488 ns       636579
170*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/19    1104.4723973028551 ns     1099.621290052968 ns       636532
171*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/20    1110.8329695491907 ns     1105.448990324432 ns       644613
172*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/21    51622.972821619114 ns     51378.92600612255 ns        13393
173*b9df5ad1SAndroid Build Coastguard Worker   #BM_ChannelMix_9Point1Point6/22     6397.061115862641 ns    6370.5975651920635 ns       109906
174*b9df5ad1SAndroid Build Coastguard Worker 
175*b9df5ad1SAndroid Build Coastguard Worker */
176*b9df5ad1SAndroid Build Coastguard Worker 
177*b9df5ad1SAndroid Build Coastguard Worker template<audio_channel_mask_t OUTPUT_CHANNEL_MASK>
BenchmarkChannelMix(benchmark::State & state)178*b9df5ad1SAndroid Build Coastguard Worker static void BenchmarkChannelMix(benchmark::State& state) {
179*b9df5ad1SAndroid Build Coastguard Worker     const audio_channel_mask_t channelMask = kChannelPositionMasks[state.range(0)];
180*b9df5ad1SAndroid Build Coastguard Worker     using namespace ::android::audio_utils::channels;
181*b9df5ad1SAndroid Build Coastguard Worker     ChannelMix<OUTPUT_CHANNEL_MASK> channelMix(channelMask);
182*b9df5ad1SAndroid Build Coastguard Worker     const size_t outChannels = audio_channel_count_from_out_mask(OUTPUT_CHANNEL_MASK);
183*b9df5ad1SAndroid Build Coastguard Worker     constexpr size_t frameCount = 1024;
184*b9df5ad1SAndroid Build Coastguard Worker     size_t inChannels = audio_channel_count_from_out_mask(channelMask);
185*b9df5ad1SAndroid Build Coastguard Worker     std::vector<float> input(inChannels * frameCount);
186*b9df5ad1SAndroid Build Coastguard Worker     std::vector<float> output(outChannels * frameCount);
187*b9df5ad1SAndroid Build Coastguard Worker     constexpr float amplitude = 0.01f;
188*b9df5ad1SAndroid Build Coastguard Worker 
189*b9df5ad1SAndroid Build Coastguard Worker     std::minstd_rand gen(channelMask);
190*b9df5ad1SAndroid Build Coastguard Worker     std::uniform_real_distribution<> dis(-amplitude, amplitude);
191*b9df5ad1SAndroid Build Coastguard Worker     for (auto& in : input) {
192*b9df5ad1SAndroid Build Coastguard Worker         in = dis(gen);
193*b9df5ad1SAndroid Build Coastguard Worker     }
194*b9df5ad1SAndroid Build Coastguard Worker 
195*b9df5ad1SAndroid Build Coastguard Worker     assert(channelMix.getInputChannelMask() != AUDIO_CHANNEL_NONE);
196*b9df5ad1SAndroid Build Coastguard Worker     // Run the test
197*b9df5ad1SAndroid Build Coastguard Worker     for (auto _ : state) {
198*b9df5ad1SAndroid Build Coastguard Worker         benchmark::DoNotOptimize(input.data());
199*b9df5ad1SAndroid Build Coastguard Worker         benchmark::DoNotOptimize(output.data());
200*b9df5ad1SAndroid Build Coastguard Worker         channelMix.process(input.data(), output.data(), frameCount, false /* accumulate */);
201*b9df5ad1SAndroid Build Coastguard Worker         benchmark::ClobberMemory();
202*b9df5ad1SAndroid Build Coastguard Worker     }
203*b9df5ad1SAndroid Build Coastguard Worker 
204*b9df5ad1SAndroid Build Coastguard Worker     state.SetComplexityN(inChannels);
205*b9df5ad1SAndroid Build Coastguard Worker     state.SetLabel(audio_channel_out_mask_to_string(channelMask));
206*b9df5ad1SAndroid Build Coastguard Worker }
207*b9df5ad1SAndroid Build Coastguard Worker 
BM_ChannelMix_Stereo(benchmark::State & state)208*b9df5ad1SAndroid Build Coastguard Worker static void BM_ChannelMix_Stereo(benchmark::State& state) {
209*b9df5ad1SAndroid Build Coastguard Worker     BenchmarkChannelMix<AUDIO_CHANNEL_OUT_STEREO>(state);
210*b9df5ad1SAndroid Build Coastguard Worker }
211*b9df5ad1SAndroid Build Coastguard Worker 
BM_ChannelMix_5Point1(benchmark::State & state)212*b9df5ad1SAndroid Build Coastguard Worker static void BM_ChannelMix_5Point1(benchmark::State& state) {
213*b9df5ad1SAndroid Build Coastguard Worker     BenchmarkChannelMix<AUDIO_CHANNEL_OUT_5POINT1>(state);
214*b9df5ad1SAndroid Build Coastguard Worker }
215*b9df5ad1SAndroid Build Coastguard Worker 
BM_ChannelMix_7Point1(benchmark::State & state)216*b9df5ad1SAndroid Build Coastguard Worker static void BM_ChannelMix_7Point1(benchmark::State& state) {
217*b9df5ad1SAndroid Build Coastguard Worker     BenchmarkChannelMix<AUDIO_CHANNEL_OUT_7POINT1>(state);
218*b9df5ad1SAndroid Build Coastguard Worker }
219*b9df5ad1SAndroid Build Coastguard Worker 
BM_ChannelMix_7Point1Point4(benchmark::State & state)220*b9df5ad1SAndroid Build Coastguard Worker static void BM_ChannelMix_7Point1Point4(benchmark::State& state) {
221*b9df5ad1SAndroid Build Coastguard Worker     BenchmarkChannelMix<AUDIO_CHANNEL_OUT_7POINT1POINT4>(state);
222*b9df5ad1SAndroid Build Coastguard Worker }
223*b9df5ad1SAndroid Build Coastguard Worker 
BM_ChannelMix_9Point1Point6(benchmark::State & state)224*b9df5ad1SAndroid Build Coastguard Worker static void BM_ChannelMix_9Point1Point6(benchmark::State& state) {
225*b9df5ad1SAndroid Build Coastguard Worker     BenchmarkChannelMix<AUDIO_CHANNEL_OUT_9POINT1POINT6>(state);
226*b9df5ad1SAndroid Build Coastguard Worker }
227*b9df5ad1SAndroid Build Coastguard Worker 
ChannelMixArgs(benchmark::internal::Benchmark * b)228*b9df5ad1SAndroid Build Coastguard Worker static void ChannelMixArgs(benchmark::internal::Benchmark* b) {
229*b9df5ad1SAndroid Build Coastguard Worker     for (int i = 0; i < (int)std::size(kChannelPositionMasks); i++) {
230*b9df5ad1SAndroid Build Coastguard Worker         b->Args({i});
231*b9df5ad1SAndroid Build Coastguard Worker     }
232*b9df5ad1SAndroid Build Coastguard Worker }
233*b9df5ad1SAndroid Build Coastguard Worker 
234*b9df5ad1SAndroid Build Coastguard Worker BENCHMARK(BM_ChannelMix_Stereo)->Apply(ChannelMixArgs);
235*b9df5ad1SAndroid Build Coastguard Worker 
236*b9df5ad1SAndroid Build Coastguard Worker BENCHMARK(BM_ChannelMix_5Point1)->Apply(ChannelMixArgs);
237*b9df5ad1SAndroid Build Coastguard Worker 
238*b9df5ad1SAndroid Build Coastguard Worker BENCHMARK(BM_ChannelMix_7Point1)->Apply(ChannelMixArgs);
239*b9df5ad1SAndroid Build Coastguard Worker 
240*b9df5ad1SAndroid Build Coastguard Worker BENCHMARK(BM_ChannelMix_7Point1Point4)->Apply(ChannelMixArgs);
241*b9df5ad1SAndroid Build Coastguard Worker 
242*b9df5ad1SAndroid Build Coastguard Worker BENCHMARK(BM_ChannelMix_9Point1Point6)->Apply(ChannelMixArgs);
243*b9df5ad1SAndroid Build Coastguard Worker 
244*b9df5ad1SAndroid Build Coastguard Worker BENCHMARK_MAIN();
245