dec_external_image_gbench.cc (1778B)
1 // Copyright (c) the JPEG XL Project Authors. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 #include "benchmark/benchmark.h" 7 #include "lib/jxl/dec_external_image.h" 8 #include "lib/jxl/image.h" 9 #include "lib/jxl/image_ops.h" 10 11 namespace jxl { 12 namespace { 13 14 // Decoder case, interleaves an internal float image. 15 void BM_DecExternalImage_ConvertImageRGBA(benchmark::State& state) { 16 const size_t kNumIter = 5; 17 size_t xsize = state.range(); 18 size_t ysize = state.range(); 19 size_t num_channels = 4; 20 21 ImageMetadata im; 22 im.SetAlphaBits(8); 23 ImageBundle ib(&im); 24 JXL_ASSIGN_OR_DIE(Image3F color, Image3F::Create(xsize, ysize)); 25 ZeroFillImage(&color); 26 ib.SetFromImage(std::move(color), ColorEncoding::SRGB()); 27 JXL_ASSIGN_OR_DIE(ImageF alpha, ImageF::Create(xsize, ysize)); 28 ZeroFillImage(&alpha); 29 ib.SetAlpha(std::move(alpha)); 30 31 const size_t bytes_per_row = xsize * num_channels; 32 std::vector<uint8_t> interleaved(bytes_per_row * ysize); 33 34 for (auto _ : state) { 35 for (size_t i = 0; i < kNumIter; ++i) { 36 JXL_CHECK(ConvertToExternal( 37 ib, 38 /*bits_per_sample=*/8, 39 /*float_out=*/false, num_channels, JXL_NATIVE_ENDIAN, 40 /*stride*/ bytes_per_row, 41 /*thread_pool=*/nullptr, interleaved.data(), interleaved.size(), 42 /*out_callback=*/{}, 43 /*undo_orientation=*/jxl::Orientation::kIdentity)); 44 } 45 } 46 47 // Pixels per second. 48 state.SetItemsProcessed(kNumIter * state.iterations() * xsize * ysize); 49 state.SetBytesProcessed(kNumIter * state.iterations() * interleaved.size()); 50 } 51 52 BENCHMARK(BM_DecExternalImage_ConvertImageRGBA) 53 ->RangeMultiplier(2) 54 ->Range(256, 2048); 55 56 } // namespace 57 } // namespace jxl