Ensure that on Windows 7, relaunching the browser via chrome://restart or changing...
[chromium-blink-merge.git] / cc / test / pixel_comparator.h
blob0f24da0043f84914476ef99ed488fbc65a39490f
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_TEST_PIXEL_COMPARATOR_H_
6 #define CC_TEST_PIXEL_COMPARATOR_H_
8 #include "base/compiler_specific.h"
9 #include "third_party/skia/include/core/SkBitmap.h"
11 namespace cc {
13 // Interface for pixel comparators.
14 class PixelComparator {
15 public:
16 virtual ~PixelComparator() {}
18 virtual bool Compare(const SkBitmap& actual_bmp,
19 const SkBitmap& expected_bmp) const = 0;
22 // Exact pixel comparator. Counts the number of pixel with an error.
23 class ExactPixelComparator : public PixelComparator {
24 public:
25 explicit ExactPixelComparator(const bool discard_alpha);
26 virtual ~ExactPixelComparator() {}
28 // Returns true if the two bitmaps are identical. Otherwise, returns false
29 // and report the number of pixels with an error on LOG(ERROR). Differences
30 // in the alpha channel are ignored.
31 virtual bool Compare(const SkBitmap& actual_bmp,
32 const SkBitmap& expected_bmp) const OVERRIDE;
34 private:
35 // Exclude alpha channel from comparison?
36 bool discard_alpha_;
39 // Fuzzy pixel comparator. Counts small and arbitrary errors separately and
40 // computes average and maximum absolute errors per color channel.
41 class FuzzyPixelComparator : public PixelComparator {
42 public:
43 FuzzyPixelComparator(const bool discard_alpha,
44 const float error_pixels_percentage_limit,
45 const float small_error_pixels_percentage_limit,
46 const float avg_abs_error_limit,
47 const int max_abs_error_limit,
48 const int small_error_threshold);
49 virtual ~FuzzyPixelComparator() {}
51 // Computes error metrics and returns true if the errors don't exceed the
52 // specified limits. Otherwise, returns false and reports the error metrics on
53 // LOG(ERROR). Differences in the alpha channel are ignored.
54 virtual bool Compare(const SkBitmap& actual_bmp,
55 const SkBitmap& expected_bmp) const OVERRIDE;
57 private:
58 // Exclude alpha channel from comparison?
59 bool discard_alpha_;
60 // Limit for percentage of pixels with an error.
61 float error_pixels_percentage_limit_;
62 // Limit for percentage of pixels with a small error.
63 float small_error_pixels_percentage_limit_;
64 // Limit for average absolute error (excluding identical pixels).
65 float avg_abs_error_limit_;
66 // Limit for largest absolute error.
67 int max_abs_error_limit_;
68 // Threshold for small errors.
69 int small_error_threshold_;
72 // All pixels can be off by one, but any more than that is an error.
73 class FuzzyPixelOffByOneComparator : public FuzzyPixelComparator {
74 public:
75 explicit FuzzyPixelOffByOneComparator(bool discard_alpha)
76 : FuzzyPixelComparator(discard_alpha, 100.f, 0.f, 1.f, 1, 0) {}
79 } // namespace cc
81 #endif // CC_TEST_PIXEL_COMPARATOR_H_