OLD | NEW |
| (Empty) |
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. | |
4 | |
5 #ifndef CC_TEST_PIXEL_COMPARATOR_H_ | |
6 #define CC_TEST_PIXEL_COMPARATOR_H_ | |
7 | |
8 #include "base/compiler_specific.h" | |
9 #include "third_party/skia/include/core/SkBitmap.h" | |
10 | |
11 namespace cc { | |
12 | |
13 // Interface for pixel comparators. | |
14 class PixelComparator { | |
15 public: | |
16 virtual ~PixelComparator() {} | |
17 | |
18 virtual bool Compare(const SkBitmap& actual_bmp, | |
19 const SkBitmap& expected_bmp) const = 0; | |
20 }; | |
21 | |
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 ~ExactPixelComparator() override {} | |
27 | |
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 bool Compare(const SkBitmap& actual_bmp, | |
32 const SkBitmap& expected_bmp) const override; | |
33 | |
34 private: | |
35 // Exclude alpha channel from comparison? | |
36 bool discard_alpha_; | |
37 }; | |
38 | |
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 ~FuzzyPixelComparator() override {} | |
50 | |
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 bool Compare(const SkBitmap& actual_bmp, | |
55 const SkBitmap& expected_bmp) const override; | |
56 | |
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_; | |
70 }; | |
71 | |
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) {} | |
77 }; | |
78 | |
79 } // namespace cc | |
80 | |
81 #endif // CC_TEST_PIXEL_COMPARATOR_H_ | |
OLD | NEW |