1*9356374aSAndroid Build Coastguard Worker // Copyright 2018 The Abseil Authors.
2*9356374aSAndroid Build Coastguard Worker //
3*9356374aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*9356374aSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*9356374aSAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*9356374aSAndroid Build Coastguard Worker //
7*9356374aSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0
8*9356374aSAndroid Build Coastguard Worker //
9*9356374aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*9356374aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*9356374aSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9356374aSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*9356374aSAndroid Build Coastguard Worker // limitations under the License.
14*9356374aSAndroid Build Coastguard Worker //
15*9356374aSAndroid Build Coastguard Worker // Every benchmark should have the same performance as the corresponding
16*9356374aSAndroid Build Coastguard Worker // headroom benchmark.
17*9356374aSAndroid Build Coastguard Worker
18*9356374aSAndroid Build Coastguard Worker #include <cstddef>
19*9356374aSAndroid Build Coastguard Worker #include <cstdint>
20*9356374aSAndroid Build Coastguard Worker
21*9356374aSAndroid Build Coastguard Worker #include "absl/base/internal/raw_logging.h"
22*9356374aSAndroid Build Coastguard Worker #include "absl/container/internal/layout.h"
23*9356374aSAndroid Build Coastguard Worker #include "benchmark/benchmark.h"
24*9356374aSAndroid Build Coastguard Worker
25*9356374aSAndroid Build Coastguard Worker namespace absl {
26*9356374aSAndroid Build Coastguard Worker ABSL_NAMESPACE_BEGIN
27*9356374aSAndroid Build Coastguard Worker namespace container_internal {
28*9356374aSAndroid Build Coastguard Worker namespace {
29*9356374aSAndroid Build Coastguard Worker
30*9356374aSAndroid Build Coastguard Worker using ::benchmark::DoNotOptimize;
31*9356374aSAndroid Build Coastguard Worker
32*9356374aSAndroid Build Coastguard Worker using Int128 = int64_t[2];
33*9356374aSAndroid Build Coastguard Worker
MyAlign(size_t n,size_t m)34*9356374aSAndroid Build Coastguard Worker constexpr size_t MyAlign(size_t n, size_t m) { return (n + m - 1) & ~(m - 1); }
35*9356374aSAndroid Build Coastguard Worker
36*9356374aSAndroid Build Coastguard Worker // This benchmark provides the upper bound on performance for BM_OffsetConstant.
37*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetConstantHeadroom(benchmark::State & state)38*9356374aSAndroid Build Coastguard Worker void BM_OffsetConstantHeadroom(benchmark::State& state) {
39*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
40*9356374aSAndroid Build Coastguard Worker DoNotOptimize(Offset);
41*9356374aSAndroid Build Coastguard Worker }
42*9356374aSAndroid Build Coastguard Worker }
43*9356374aSAndroid Build Coastguard Worker
44*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetConstantStatic(benchmark::State & state)45*9356374aSAndroid Build Coastguard Worker void BM_OffsetConstantStatic(benchmark::State& state) {
46*9356374aSAndroid Build Coastguard Worker using L = typename Layout<Ts...>::template WithStaticSizes<3, 5, 7>;
47*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(L::Partial().template Offset<3>() == Offset, "Invalid offset");
48*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
49*9356374aSAndroid Build Coastguard Worker DoNotOptimize(L::Partial().template Offset<3>());
50*9356374aSAndroid Build Coastguard Worker }
51*9356374aSAndroid Build Coastguard Worker }
52*9356374aSAndroid Build Coastguard Worker
53*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetConstant(benchmark::State & state)54*9356374aSAndroid Build Coastguard Worker void BM_OffsetConstant(benchmark::State& state) {
55*9356374aSAndroid Build Coastguard Worker using L = Layout<Ts...>;
56*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(L::Partial(3, 5, 7).template Offset<3>() == Offset,
57*9356374aSAndroid Build Coastguard Worker "Invalid offset");
58*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
59*9356374aSAndroid Build Coastguard Worker DoNotOptimize(L::Partial(3, 5, 7).template Offset<3>());
60*9356374aSAndroid Build Coastguard Worker }
61*9356374aSAndroid Build Coastguard Worker }
62*9356374aSAndroid Build Coastguard Worker
63*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetConstantIndirect(benchmark::State & state)64*9356374aSAndroid Build Coastguard Worker void BM_OffsetConstantIndirect(benchmark::State& state) {
65*9356374aSAndroid Build Coastguard Worker using L = Layout<Ts...>;
66*9356374aSAndroid Build Coastguard Worker auto p = L::Partial(3, 5, 7);
67*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(p.template Offset<3>() == Offset, "Invalid offset");
68*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
69*9356374aSAndroid Build Coastguard Worker DoNotOptimize(p);
70*9356374aSAndroid Build Coastguard Worker DoNotOptimize(p.template Offset<3>());
71*9356374aSAndroid Build Coastguard Worker }
72*9356374aSAndroid Build Coastguard Worker }
73*9356374aSAndroid Build Coastguard Worker
74*9356374aSAndroid Build Coastguard Worker template <class... Ts>
75*9356374aSAndroid Build Coastguard Worker size_t PartialOffset(size_t k);
76*9356374aSAndroid Build Coastguard Worker
77*9356374aSAndroid Build Coastguard Worker template <>
PartialOffset(size_t k)78*9356374aSAndroid Build Coastguard Worker size_t PartialOffset<int8_t, int16_t, int32_t, Int128>(size_t k) {
79*9356374aSAndroid Build Coastguard Worker constexpr size_t o = MyAlign(MyAlign(3 * 1, 2) + 5 * 2, 4);
80*9356374aSAndroid Build Coastguard Worker return MyAlign(o + k * 4, 8);
81*9356374aSAndroid Build Coastguard Worker }
82*9356374aSAndroid Build Coastguard Worker
83*9356374aSAndroid Build Coastguard Worker template <>
PartialOffset(size_t k)84*9356374aSAndroid Build Coastguard Worker size_t PartialOffset<Int128, int32_t, int16_t, int8_t>(size_t k) {
85*9356374aSAndroid Build Coastguard Worker // No alignment is necessary.
86*9356374aSAndroid Build Coastguard Worker return 3 * 16 + 5 * 4 + k * 2;
87*9356374aSAndroid Build Coastguard Worker }
88*9356374aSAndroid Build Coastguard Worker
89*9356374aSAndroid Build Coastguard Worker // This benchmark provides the upper bound on performance for BM_OffsetVariable.
90*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetPartialHeadroom(benchmark::State & state)91*9356374aSAndroid Build Coastguard Worker void BM_OffsetPartialHeadroom(benchmark::State& state) {
92*9356374aSAndroid Build Coastguard Worker size_t k = 7;
93*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(PartialOffset<Ts...>(k) == Offset, "Invalid offset");
94*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
95*9356374aSAndroid Build Coastguard Worker DoNotOptimize(k);
96*9356374aSAndroid Build Coastguard Worker DoNotOptimize(PartialOffset<Ts...>(k));
97*9356374aSAndroid Build Coastguard Worker }
98*9356374aSAndroid Build Coastguard Worker }
99*9356374aSAndroid Build Coastguard Worker
100*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetPartialStatic(benchmark::State & state)101*9356374aSAndroid Build Coastguard Worker void BM_OffsetPartialStatic(benchmark::State& state) {
102*9356374aSAndroid Build Coastguard Worker using L = typename Layout<Ts...>::template WithStaticSizes<3, 5>;
103*9356374aSAndroid Build Coastguard Worker size_t k = 7;
104*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(L::Partial(k).template Offset<3>() == Offset,
105*9356374aSAndroid Build Coastguard Worker "Invalid offset");
106*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
107*9356374aSAndroid Build Coastguard Worker DoNotOptimize(k);
108*9356374aSAndroid Build Coastguard Worker DoNotOptimize(L::Partial(k).template Offset<3>());
109*9356374aSAndroid Build Coastguard Worker }
110*9356374aSAndroid Build Coastguard Worker }
111*9356374aSAndroid Build Coastguard Worker
112*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetPartial(benchmark::State & state)113*9356374aSAndroid Build Coastguard Worker void BM_OffsetPartial(benchmark::State& state) {
114*9356374aSAndroid Build Coastguard Worker using L = Layout<Ts...>;
115*9356374aSAndroid Build Coastguard Worker size_t k = 7;
116*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(L::Partial(3, 5, k).template Offset<3>() == Offset,
117*9356374aSAndroid Build Coastguard Worker "Invalid offset");
118*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
119*9356374aSAndroid Build Coastguard Worker DoNotOptimize(k);
120*9356374aSAndroid Build Coastguard Worker DoNotOptimize(L::Partial(3, 5, k).template Offset<3>());
121*9356374aSAndroid Build Coastguard Worker }
122*9356374aSAndroid Build Coastguard Worker }
123*9356374aSAndroid Build Coastguard Worker
124*9356374aSAndroid Build Coastguard Worker template <class... Ts>
125*9356374aSAndroid Build Coastguard Worker size_t VariableOffset(size_t n, size_t m, size_t k);
126*9356374aSAndroid Build Coastguard Worker
127*9356374aSAndroid Build Coastguard Worker template <>
VariableOffset(size_t n,size_t m,size_t k)128*9356374aSAndroid Build Coastguard Worker size_t VariableOffset<int8_t, int16_t, int32_t, Int128>(size_t n, size_t m,
129*9356374aSAndroid Build Coastguard Worker size_t k) {
130*9356374aSAndroid Build Coastguard Worker return MyAlign(MyAlign(MyAlign(n * 1, 2) + m * 2, 4) + k * 4, 8);
131*9356374aSAndroid Build Coastguard Worker }
132*9356374aSAndroid Build Coastguard Worker
133*9356374aSAndroid Build Coastguard Worker template <>
VariableOffset(size_t n,size_t m,size_t k)134*9356374aSAndroid Build Coastguard Worker size_t VariableOffset<Int128, int32_t, int16_t, int8_t>(size_t n, size_t m,
135*9356374aSAndroid Build Coastguard Worker size_t k) {
136*9356374aSAndroid Build Coastguard Worker // No alignment is necessary.
137*9356374aSAndroid Build Coastguard Worker return n * 16 + m * 4 + k * 2;
138*9356374aSAndroid Build Coastguard Worker }
139*9356374aSAndroid Build Coastguard Worker
140*9356374aSAndroid Build Coastguard Worker // This benchmark provides the upper bound on performance for BM_OffsetVariable.
141*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetVariableHeadroom(benchmark::State & state)142*9356374aSAndroid Build Coastguard Worker void BM_OffsetVariableHeadroom(benchmark::State& state) {
143*9356374aSAndroid Build Coastguard Worker size_t n = 3;
144*9356374aSAndroid Build Coastguard Worker size_t m = 5;
145*9356374aSAndroid Build Coastguard Worker size_t k = 7;
146*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(VariableOffset<Ts...>(n, m, k) == Offset, "Invalid offset");
147*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
148*9356374aSAndroid Build Coastguard Worker DoNotOptimize(n);
149*9356374aSAndroid Build Coastguard Worker DoNotOptimize(m);
150*9356374aSAndroid Build Coastguard Worker DoNotOptimize(k);
151*9356374aSAndroid Build Coastguard Worker DoNotOptimize(VariableOffset<Ts...>(n, m, k));
152*9356374aSAndroid Build Coastguard Worker }
153*9356374aSAndroid Build Coastguard Worker }
154*9356374aSAndroid Build Coastguard Worker
155*9356374aSAndroid Build Coastguard Worker template <size_t Offset, class... Ts>
BM_OffsetVariable(benchmark::State & state)156*9356374aSAndroid Build Coastguard Worker void BM_OffsetVariable(benchmark::State& state) {
157*9356374aSAndroid Build Coastguard Worker using L = Layout<Ts...>;
158*9356374aSAndroid Build Coastguard Worker size_t n = 3;
159*9356374aSAndroid Build Coastguard Worker size_t m = 5;
160*9356374aSAndroid Build Coastguard Worker size_t k = 7;
161*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(L::Partial(n, m, k).template Offset<3>() == Offset,
162*9356374aSAndroid Build Coastguard Worker "Invalid offset");
163*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
164*9356374aSAndroid Build Coastguard Worker DoNotOptimize(n);
165*9356374aSAndroid Build Coastguard Worker DoNotOptimize(m);
166*9356374aSAndroid Build Coastguard Worker DoNotOptimize(k);
167*9356374aSAndroid Build Coastguard Worker DoNotOptimize(L::Partial(n, m, k).template Offset<3>());
168*9356374aSAndroid Build Coastguard Worker }
169*9356374aSAndroid Build Coastguard Worker }
170*9356374aSAndroid Build Coastguard Worker
171*9356374aSAndroid Build Coastguard Worker template <class... Ts>
172*9356374aSAndroid Build Coastguard Worker size_t AllocSize(size_t x);
173*9356374aSAndroid Build Coastguard Worker
174*9356374aSAndroid Build Coastguard Worker template <>
AllocSize(size_t x)175*9356374aSAndroid Build Coastguard Worker size_t AllocSize<int8_t, int16_t, int32_t, Int128>(size_t x) {
176*9356374aSAndroid Build Coastguard Worker constexpr size_t o =
177*9356374aSAndroid Build Coastguard Worker Layout<int8_t, int16_t, int32_t, Int128>::Partial(3, 5, 7)
178*9356374aSAndroid Build Coastguard Worker .template Offset<Int128>();
179*9356374aSAndroid Build Coastguard Worker return o + sizeof(Int128) * x;
180*9356374aSAndroid Build Coastguard Worker }
181*9356374aSAndroid Build Coastguard Worker
182*9356374aSAndroid Build Coastguard Worker template <>
AllocSize(size_t x)183*9356374aSAndroid Build Coastguard Worker size_t AllocSize<Int128, int32_t, int16_t, int8_t>(size_t x) {
184*9356374aSAndroid Build Coastguard Worker constexpr size_t o =
185*9356374aSAndroid Build Coastguard Worker Layout<Int128, int32_t, int16_t, int8_t>::Partial(3, 5, 7)
186*9356374aSAndroid Build Coastguard Worker .template Offset<int8_t>();
187*9356374aSAndroid Build Coastguard Worker return o + sizeof(int8_t) * x;
188*9356374aSAndroid Build Coastguard Worker }
189*9356374aSAndroid Build Coastguard Worker
190*9356374aSAndroid Build Coastguard Worker // This benchmark provides the upper bound on performance for BM_AllocSize
191*9356374aSAndroid Build Coastguard Worker template <size_t Size, class... Ts>
BM_AllocSizeHeadroom(benchmark::State & state)192*9356374aSAndroid Build Coastguard Worker void BM_AllocSizeHeadroom(benchmark::State& state) {
193*9356374aSAndroid Build Coastguard Worker size_t x = 9;
194*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(AllocSize<Ts...>(x) == Size, "Invalid size");
195*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
196*9356374aSAndroid Build Coastguard Worker DoNotOptimize(x);
197*9356374aSAndroid Build Coastguard Worker DoNotOptimize(AllocSize<Ts...>(x));
198*9356374aSAndroid Build Coastguard Worker }
199*9356374aSAndroid Build Coastguard Worker }
200*9356374aSAndroid Build Coastguard Worker
201*9356374aSAndroid Build Coastguard Worker template <size_t Size, class... Ts>
BM_AllocSizeStatic(benchmark::State & state)202*9356374aSAndroid Build Coastguard Worker void BM_AllocSizeStatic(benchmark::State& state) {
203*9356374aSAndroid Build Coastguard Worker using L = typename Layout<Ts...>::template WithStaticSizes<3, 5, 7>;
204*9356374aSAndroid Build Coastguard Worker size_t x = 9;
205*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(L(x).AllocSize() == Size, "Invalid offset");
206*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
207*9356374aSAndroid Build Coastguard Worker DoNotOptimize(x);
208*9356374aSAndroid Build Coastguard Worker DoNotOptimize(L(x).AllocSize());
209*9356374aSAndroid Build Coastguard Worker }
210*9356374aSAndroid Build Coastguard Worker }
211*9356374aSAndroid Build Coastguard Worker
212*9356374aSAndroid Build Coastguard Worker template <size_t Size, class... Ts>
BM_AllocSize(benchmark::State & state)213*9356374aSAndroid Build Coastguard Worker void BM_AllocSize(benchmark::State& state) {
214*9356374aSAndroid Build Coastguard Worker using L = Layout<Ts...>;
215*9356374aSAndroid Build Coastguard Worker size_t n = 3;
216*9356374aSAndroid Build Coastguard Worker size_t m = 5;
217*9356374aSAndroid Build Coastguard Worker size_t k = 7;
218*9356374aSAndroid Build Coastguard Worker size_t x = 9;
219*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(L(n, m, k, x).AllocSize() == Size, "Invalid offset");
220*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
221*9356374aSAndroid Build Coastguard Worker DoNotOptimize(n);
222*9356374aSAndroid Build Coastguard Worker DoNotOptimize(m);
223*9356374aSAndroid Build Coastguard Worker DoNotOptimize(k);
224*9356374aSAndroid Build Coastguard Worker DoNotOptimize(x);
225*9356374aSAndroid Build Coastguard Worker DoNotOptimize(L(n, m, k, x).AllocSize());
226*9356374aSAndroid Build Coastguard Worker }
227*9356374aSAndroid Build Coastguard Worker }
228*9356374aSAndroid Build Coastguard Worker
229*9356374aSAndroid Build Coastguard Worker template <size_t Size, class... Ts>
BM_AllocSizeIndirect(benchmark::State & state)230*9356374aSAndroid Build Coastguard Worker void BM_AllocSizeIndirect(benchmark::State& state) {
231*9356374aSAndroid Build Coastguard Worker using L = Layout<Ts...>;
232*9356374aSAndroid Build Coastguard Worker auto l = L(3, 5, 7, 9);
233*9356374aSAndroid Build Coastguard Worker ABSL_RAW_CHECK(l.AllocSize() == Size, "Invalid offset");
234*9356374aSAndroid Build Coastguard Worker for (auto _ : state) {
235*9356374aSAndroid Build Coastguard Worker DoNotOptimize(l);
236*9356374aSAndroid Build Coastguard Worker DoNotOptimize(l.AllocSize());
237*9356374aSAndroid Build Coastguard Worker }
238*9356374aSAndroid Build Coastguard Worker }
239*9356374aSAndroid Build Coastguard Worker
240*9356374aSAndroid Build Coastguard Worker // Run all benchmarks in two modes:
241*9356374aSAndroid Build Coastguard Worker //
242*9356374aSAndroid Build Coastguard Worker // Layout with padding: int8_t[3], int16_t[5], int32_t[7], Int128[?].
243*9356374aSAndroid Build Coastguard Worker // Layout without padding: Int128[3], int32_t[5], int16_t[7], int8_t[?].
244*9356374aSAndroid Build Coastguard Worker
245*9356374aSAndroid Build Coastguard Worker #define OFFSET_BENCHMARK(NAME, OFFSET, T1, T2, T3, T4) \
246*9356374aSAndroid Build Coastguard Worker auto& NAME##_##OFFSET##_##T1##_##T2##_##T3##_##T4 = \
247*9356374aSAndroid Build Coastguard Worker NAME<OFFSET, T1, T2, T3, T4>; \
248*9356374aSAndroid Build Coastguard Worker BENCHMARK(NAME##_##OFFSET##_##T1##_##T2##_##T3##_##T4)
249*9356374aSAndroid Build Coastguard Worker
250*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetConstantHeadroom, 48, int8_t, int16_t, int32_t,
251*9356374aSAndroid Build Coastguard Worker Int128);
252*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetConstantStatic, 48, int8_t, int16_t, int32_t, Int128);
253*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetConstant, 48, int8_t, int16_t, int32_t, Int128);
254*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetConstantIndirect, 48, int8_t, int16_t, int32_t,
255*9356374aSAndroid Build Coastguard Worker Int128);
256*9356374aSAndroid Build Coastguard Worker
257*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetConstantHeadroom, 82, Int128, int32_t, int16_t,
258*9356374aSAndroid Build Coastguard Worker int8_t);
259*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetConstantStatic, 82, Int128, int32_t, int16_t, int8_t);
260*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetConstant, 82, Int128, int32_t, int16_t, int8_t);
261*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetConstantIndirect, 82, Int128, int32_t, int16_t,
262*9356374aSAndroid Build Coastguard Worker int8_t);
263*9356374aSAndroid Build Coastguard Worker
264*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetPartialHeadroom, 48, int8_t, int16_t, int32_t,
265*9356374aSAndroid Build Coastguard Worker Int128);
266*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetPartialStatic, 48, int8_t, int16_t, int32_t, Int128);
267*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetPartial, 48, int8_t, int16_t, int32_t, Int128);
268*9356374aSAndroid Build Coastguard Worker
269*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetPartialHeadroom, 82, Int128, int32_t, int16_t,
270*9356374aSAndroid Build Coastguard Worker int8_t);
271*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetPartialStatic, 82, Int128, int32_t, int16_t, int8_t);
272*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetPartial, 82, Int128, int32_t, int16_t, int8_t);
273*9356374aSAndroid Build Coastguard Worker
274*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetVariableHeadroom, 48, int8_t, int16_t, int32_t,
275*9356374aSAndroid Build Coastguard Worker Int128);
276*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetVariable, 48, int8_t, int16_t, int32_t, Int128);
277*9356374aSAndroid Build Coastguard Worker
278*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetVariableHeadroom, 82, Int128, int32_t, int16_t,
279*9356374aSAndroid Build Coastguard Worker int8_t);
280*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_OffsetVariable, 82, Int128, int32_t, int16_t, int8_t);
281*9356374aSAndroid Build Coastguard Worker
282*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_AllocSizeHeadroom, 192, int8_t, int16_t, int32_t, Int128);
283*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_AllocSizeStatic, 192, int8_t, int16_t, int32_t, Int128);
284*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_AllocSize, 192, int8_t, int16_t, int32_t, Int128);
285*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_AllocSizeIndirect, 192, int8_t, int16_t, int32_t, Int128);
286*9356374aSAndroid Build Coastguard Worker
287*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_AllocSizeHeadroom, 91, Int128, int32_t, int16_t, int8_t);
288*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_AllocSizeStatic, 91, Int128, int32_t, int16_t, int8_t);
289*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_AllocSize, 91, Int128, int32_t, int16_t, int8_t);
290*9356374aSAndroid Build Coastguard Worker OFFSET_BENCHMARK(BM_AllocSizeIndirect, 91, Int128, int32_t, int16_t, int8_t);
291*9356374aSAndroid Build Coastguard Worker
292*9356374aSAndroid Build Coastguard Worker } // namespace
293*9356374aSAndroid Build Coastguard Worker } // namespace container_internal
294*9356374aSAndroid Build Coastguard Worker ABSL_NAMESPACE_END
295*9356374aSAndroid Build Coastguard Worker } // namespace absl
296