blob: 2dcca80f51facbb590580b2ed59b826fe0fcf9f2 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/base/test/skia_gold_matching_algorithm.h"
#include "base/command_line.h"
#include "base/notreached.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
namespace {
constexpr char kMaxDifferentPixels[] = "fuzzy_max_different_pixels";
constexpr char kPixelDeltaThreshold[] = "fuzzy_pixel_delta_threshold";
constexpr char kEdgeThreshold[] = "sobel_edge_threshold";
constexpr char kIgnoredBorderThickness[] = "fuzzy_ignored_border_thickness";
} // namespace
namespace ui {
namespace test {
SkiaGoldMatchingAlgorithm::SkiaGoldMatchingAlgorithm() = default;
SkiaGoldMatchingAlgorithm::~SkiaGoldMatchingAlgorithm() = default;
void SkiaGoldMatchingAlgorithm::AppendAlgorithmToCmdline(
base::CommandLine& cmd) const {
cmd.AppendSwitchASCII(
"add-test-optional-key",
base::JoinString({"image_matching_algorithm", GetCommandLineSwitchName()},
":"));
}
ExactSkiaGoldMatchingAlgorithm::ExactSkiaGoldMatchingAlgorithm() = default;
ExactSkiaGoldMatchingAlgorithm::~ExactSkiaGoldMatchingAlgorithm() = default;
std::string ExactSkiaGoldMatchingAlgorithm::GetCommandLineSwitchName() const {
return "exact";
}
void ExactSkiaGoldMatchingAlgorithm::AppendAlgorithmToCmdline(
base::CommandLine& cmd) const {
// Do not call base class AppendAlgorithmToCmdline.
// Nothing to append.
}
FuzzySkiaGoldMatchingAlgorithm::~FuzzySkiaGoldMatchingAlgorithm() = default;
std::string FuzzySkiaGoldMatchingAlgorithm::GetCommandLineSwitchName() const {
return "fuzzy";
}
FuzzySkiaGoldMatchingAlgorithm::FuzzySkiaGoldMatchingAlgorithm(
int max_different_pixels,
int pixel_delta_threshold,
int ignored_border_thickness)
: max_different_pixels_(max_different_pixels),
pixel_delta_threshold_(pixel_delta_threshold),
ignored_border_thickness_(ignored_border_thickness) {
DCHECK_GT(max_different_pixels, 0);
DCHECK_GT(pixel_delta_threshold, 0);
DCHECK_LE(pixel_delta_threshold, 255 * 4);
DCHECK_GE(ignored_border_thickness, 0);
}
void FuzzySkiaGoldMatchingAlgorithm::AppendAlgorithmToCmdline(
base::CommandLine& cmd) const {
SkiaGoldMatchingAlgorithm::AppendAlgorithmToCmdline(cmd);
cmd.AppendSwitchASCII(
"add-test-optional-key",
base::JoinString(
{kMaxDifferentPixels, base::NumberToString(max_different_pixels_)},
":"));
cmd.AppendSwitchASCII(
"add-test-optional-key",
base::JoinString(
{kPixelDeltaThreshold, base::NumberToString(pixel_delta_threshold_)},
":"));
if (ignored_border_thickness_)
cmd.AppendSwitchASCII(
"add-test-optional-key",
base::JoinString({kIgnoredBorderThickness,
base::NumberToString(ignored_border_thickness_)},
":"));
}
SobelSkiaGoldMatchingAlgorithm::~SobelSkiaGoldMatchingAlgorithm() = default;
std::string SobelSkiaGoldMatchingAlgorithm::GetCommandLineSwitchName() const {
return "sobel";
}
SobelSkiaGoldMatchingAlgorithm::SobelSkiaGoldMatchingAlgorithm(
int max_different_pixels,
int pixel_delta_threshold,
int edge_threshold,
int ignored_border_thickness)
: FuzzySkiaGoldMatchingAlgorithm(max_different_pixels,
pixel_delta_threshold,
ignored_border_thickness),
edge_threshold_(edge_threshold) {
DCHECK_GE(edge_threshold, 0);
DCHECK_LE(edge_threshold, 255);
}
void SobelSkiaGoldMatchingAlgorithm::AppendAlgorithmToCmdline(
base::CommandLine& cmd) const {
FuzzySkiaGoldMatchingAlgorithm::AppendAlgorithmToCmdline(cmd);
cmd.AppendSwitchASCII(
"add-test-optional-key",
base::JoinString({kEdgeThreshold, base::NumberToString(edge_threshold_)},
":"));
}
} // namespace test
} // namespace ui