tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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