tor-browser

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

speed_tier_test.cc (4695B)


      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/encode.h>
      7 #include <jxl/types.h>
      8 
      9 #include <cstddef>
     10 #include <cstdint>
     11 #include <ios>
     12 #include <ostream>
     13 #include <string>
     14 #include <vector>
     15 
     16 #include "lib/extras/dec/jxl.h"
     17 #include "lib/extras/enc/jxl.h"
     18 #include "lib/jxl/common.h"
     19 #include "lib/jxl/test_image.h"
     20 #include "lib/jxl/test_utils.h"
     21 #include "lib/jxl/testing.h"
     22 
     23 namespace jxl {
     24 namespace {
     25 
     26 struct SpeedTierTestParams {
     27  explicit SpeedTierTestParams(const SpeedTier speed_tier,
     28                               const bool shrink8 = false)
     29      : speed_tier(speed_tier), shrink8(shrink8) {}
     30  SpeedTier speed_tier;
     31  bool shrink8;
     32 };
     33 
     34 std::ostream& operator<<(std::ostream& os, SpeedTierTestParams params) {
     35  auto previous_flags = os.flags();
     36  os << std::boolalpha;
     37  os << "SpeedTierTestParams{" << static_cast<size_t>(params.speed_tier)
     38     << ", /*shrink8=*/" << params.shrink8 << "}";
     39  os.flags(previous_flags);
     40  return os;
     41 }
     42 
     43 class SpeedTierTest : public testing::TestWithParam<SpeedTierTestParams> {};
     44 
     45 JXL_GTEST_INSTANTIATE_TEST_SUITE_P(
     46    SpeedTierTestInstantiation, SpeedTierTest,
     47    testing::Values(SpeedTierTestParams{SpeedTier::kCheetah,
     48                                        /*shrink8=*/true},
     49                    SpeedTierTestParams{SpeedTier::kCheetah,
     50                                        /*shrink8=*/false},
     51                    SpeedTierTestParams{SpeedTier::kThunder,
     52                                        /*shrink8=*/true},
     53                    SpeedTierTestParams{SpeedTier::kThunder,
     54                                        /*shrink8=*/false},
     55                    SpeedTierTestParams{SpeedTier::kLightning,
     56                                        /*shrink8=*/true},
     57                    SpeedTierTestParams{SpeedTier::kLightning,
     58                                        /*shrink8=*/false},
     59                    SpeedTierTestParams{SpeedTier::kFalcon,
     60                                        /*shrink8=*/true},
     61                    SpeedTierTestParams{SpeedTier::kFalcon,
     62                                        /*shrink8=*/false},
     63                    SpeedTierTestParams{SpeedTier::kHare,
     64                                        /*shrink8=*/true},
     65                    SpeedTierTestParams{SpeedTier::kHare,
     66                                        /*shrink8=*/false},
     67                    SpeedTierTestParams{SpeedTier::kWombat,
     68                                        /*shrink8=*/true},
     69                    SpeedTierTestParams{SpeedTier::kWombat,
     70                                        /*shrink8=*/false},
     71                    SpeedTierTestParams{SpeedTier::kSquirrel,
     72                                        /*shrink8=*/true},
     73                    SpeedTierTestParams{SpeedTier::kSquirrel,
     74                                        /*shrink8=*/false},
     75                    SpeedTierTestParams{SpeedTier::kKitten,
     76                                        /*shrink8=*/false},
     77                    // Only downscaled image for Tortoise mode.
     78                    SpeedTierTestParams{SpeedTier::kTortoise,
     79                                        /*shrink8=*/true},
     80                    SpeedTierTestParams{SpeedTier::kGlacier,
     81                                        /*shrink8=*/true}));
     82 
     83 TEST_P(SpeedTierTest, Roundtrip) {
     84  const SpeedTierTestParams& params = GetParam();
     85  const std::vector<uint8_t> orig = jxl::test::ReadTestData(
     86      "external/wesaturate/500px/u76c0g_bliznaca_srgb8.png");
     87  test::TestImage t;
     88  ASSERT_TRUE(t.DecodeFromBytes(orig));
     89  t.ClearMetadata();
     90  if (params.speed_tier == SpeedTier::kGlacier) {
     91    // just a few pixels will already take enough time at this setting
     92    ASSERT_TRUE(t.SetDimensions(8, 8));
     93  } else if (params.shrink8) {
     94    ASSERT_TRUE(t.SetDimensions(t.ppf().xsize() / 8, t.ppf().ysize() / 8));
     95  }
     96 
     97  extras::JXLCompressParams cparams;
     98  cparams.distance = 1.0f;
     99  cparams.allow_expert_options = true;
    100  cparams.AddOption(JXL_ENC_FRAME_SETTING_EFFORT,
    101                    10 - static_cast<int>(params.speed_tier));
    102  extras::JXLDecompressParams dparams;
    103  dparams.accepted_formats = {{3, JXL_TYPE_UINT8, JXL_LITTLE_ENDIAN, 0}};
    104 
    105  {
    106    extras::PackedPixelFile ppf_out;
    107    test::Roundtrip(t.ppf(), cparams, dparams, nullptr, &ppf_out);
    108    EXPECT_LE(test::ButteraugliDistance(t.ppf(), ppf_out), 2.0);
    109  }
    110  if (params.shrink8) {
    111    cparams.distance = 0.0f;
    112    extras::PackedPixelFile ppf_out;
    113    test::Roundtrip(t.ppf(), cparams, dparams, nullptr, &ppf_out);
    114    EXPECT_EQ(0.0f, test::ComputeDistance2(t.ppf(), ppf_out));
    115  }
    116 }
    117 }  // namespace
    118 }  // namespace jxl