| 307 | } |
| 308 | |
| 309 | static void DecodeLevels(Encoding::type level_encoding, int16_t max_level, int num_levels, |
| 310 | int batch_size, int level_repeat_count, |
| 311 | ::benchmark::State& state) { |
| 312 | std::vector<uint8_t> bytes; |
| 313 | { |
| 314 | std::vector<int16_t> input_levels; |
| 315 | GenerateLevels(/*level_repeats=*/level_repeat_count, /*max_repeat_factor=*/max_level, |
| 316 | num_levels, &input_levels); |
| 317 | EncodeLevels(level_encoding, max_level, num_levels, input_levels.data(), &bytes); |
| 318 | } |
| 319 | |
| 320 | LevelDecoder decoder; |
| 321 | std::vector<int16_t> output_levels(batch_size); |
| 322 | for (auto _ : state) { |
| 323 | state.PauseTiming(); |
| 324 | decoder.SetData(level_encoding, max_level, num_levels, bytes.data(), |
| 325 | static_cast<int>(bytes.size())); |
| 326 | state.ResumeTiming(); |
| 327 | // Decode multiple times with batch_size |
| 328 | while (true) { |
| 329 | int levels_decoded = decoder.Decode(batch_size, output_levels.data()); |
| 330 | if (levels_decoded == 0) { |
| 331 | break; |
| 332 | } |
| 333 | } |
| 334 | } |
| 335 | state.SetBytesProcessed(state.iterations() * num_levels * sizeof(int16_t)); |
| 336 | state.SetItemsProcessed(state.iterations() * num_levels); |
| 337 | } |
| 338 | |
| 339 | static void ReadLevels_Rle(::benchmark::State& state) { |
| 340 | int16_t max_level = static_cast<int16_t>(state.range(0)); |
no test coverage detected