dec_external_image_gbench.cc (2272B)
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 <jxl/memory_manager.h> 7 8 #include "benchmark/benchmark.h" 9 #include "lib/jxl/dec_external_image.h" 10 #include "lib/jxl/image.h" 11 #include "lib/jxl/image_ops.h" 12 #include "tools/no_memory_manager.h" 13 14 namespace jxl { 15 namespace { 16 17 #define QUIT(M) \ 18 state.SkipWithError(M); \ 19 return; 20 21 #define BM_CHECK(C) \ 22 if (!(C)) { \ 23 QUIT(#C) \ 24 } 25 26 // Decoder case, interleaves an internal float image. 27 void BM_DecExternalImage_ConvertImageRGBA(benchmark::State& state) { 28 JxlMemoryManager* memory_manager = jpegxl::tools::NoMemoryManager(); 29 const size_t kNumIter = 5; 30 size_t xsize = state.range(); 31 size_t ysize = state.range(); 32 size_t num_channels = 4; 33 34 ImageMetadata im; 35 im.SetAlphaBits(8); 36 ImageBundle ib(memory_manager, &im); 37 JXL_ASSIGN_OR_QUIT(Image3F color, 38 Image3F::Create(memory_manager, xsize, ysize), 39 "Failed to allocate color plane."); 40 ZeroFillImage(&color); 41 BM_CHECK(ib.SetFromImage(std::move(color), ColorEncoding::SRGB())); 42 JXL_ASSIGN_OR_QUIT(ImageF alpha, ImageF::Create(memory_manager, xsize, ysize), 43 "Failed to allocate alpha plane."); 44 ZeroFillImage(&alpha); 45 BM_CHECK(ib.SetAlpha(std::move(alpha))); 46 47 const size_t bytes_per_row = xsize * num_channels; 48 std::vector<uint8_t> interleaved(bytes_per_row * ysize); 49 50 for (auto _ : state) { 51 (void)_; 52 for (size_t i = 0; i < kNumIter; ++i) { 53 BM_CHECK(ConvertToExternal( 54 ib, 55 /*bits_per_sample=*/8, 56 /*float_out=*/false, num_channels, JXL_NATIVE_ENDIAN, 57 /*stride*/ bytes_per_row, 58 /*thread_pool=*/nullptr, interleaved.data(), interleaved.size(), 59 /*out_callback=*/{}, 60 /*undo_orientation=*/jxl::Orientation::kIdentity)); 61 } 62 } 63 64 // Pixels per second. 65 state.SetItemsProcessed(kNumIter * state.iterations() * xsize * ysize); 66 state.SetBytesProcessed(kNumIter * state.iterations() * interleaved.size()); 67 } 68 69 BENCHMARK(BM_DecExternalImage_ConvertImageRGBA) 70 ->RangeMultiplier(2) 71 ->Range(256, 2048); 72 73 } // namespace 74 } // namespace jxl