libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

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