enc_external_image_gbench.cc (1626B)
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/types.h> 7 8 #include <cstddef> 9 #include <cstdint> 10 #include <vector> 11 12 #include "benchmark/benchmark.h" 13 #include "lib/jxl/enc_external_image.h" 14 #include "lib/jxl/image_metadata.h" 15 #include "tools/no_memory_manager.h" 16 17 namespace jxl { 18 namespace { 19 20 #define BM_CHECK(C) \ 21 if (!(C)) { \ 22 state.SkipWithError(#C); \ 23 return; \ 24 } 25 26 // Encoder case, deinterleaves a buffer. 27 void BM_EncExternalImage_ConvertImageRGBA(benchmark::State& state) { 28 const size_t kNumIter = 5; 29 size_t xsize = state.range(); 30 size_t ysize = state.range(); 31 32 ImageMetadata im; 33 im.SetAlphaBits(8); 34 ImageBundle ib(jpegxl::tools::NoMemoryManager(), &im); 35 36 std::vector<uint8_t> interleaved(xsize * ysize * 4); 37 JxlPixelFormat format = {4, JXL_TYPE_UINT8, JXL_NATIVE_ENDIAN, 0}; 38 for (auto _ : state) { 39 (void)_; 40 for (size_t i = 0; i < kNumIter; ++i) { 41 BM_CHECK(ConvertFromExternal( 42 Bytes(interleaved.data(), interleaved.size()), xsize, ysize, 43 /*c_current=*/ColorEncoding::SRGB(), 44 /*bits_per_sample=*/8, format, 45 /*pool=*/nullptr, &ib)); 46 } 47 } 48 49 // Pixels per second. 50 state.SetItemsProcessed(kNumIter * state.iterations() * xsize * ysize); 51 state.SetBytesProcessed(kNumIter * state.iterations() * interleaved.size()); 52 } 53 54 BENCHMARK(BM_EncExternalImage_ConvertImageRGBA) 55 ->RangeMultiplier(2) 56 ->Range(256, 2048); 57 58 } // namespace 59 } // namespace jxl