| // 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 |