| Index: cc/test/pixel_comparator.cc
|
| diff --git a/cc/test/pixel_comparator.cc b/cc/test/pixel_comparator.cc
|
| deleted file mode 100644
|
| index 4067787cef569c2b472608f2081e762a2c1e4753..0000000000000000000000000000000000000000
|
| --- a/cc/test/pixel_comparator.cc
|
| +++ /dev/null
|
| @@ -1,210 +0,0 @@
|
| -// Copyright (c) 2013 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 "cc/test/pixel_comparator.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/logging.h"
|
| -#include "ui/gfx/geometry/rect.h"
|
| -
|
| -namespace cc {
|
| -
|
| -ExactPixelComparator::ExactPixelComparator(const bool discard_alpha)
|
| - : discard_alpha_(discard_alpha) {
|
| -}
|
| -
|
| -bool ExactPixelComparator::Compare(const SkBitmap& actual_bmp,
|
| - const SkBitmap& expected_bmp) const {
|
| - // Number of pixels with an error
|
| - int error_pixels_count = 0;
|
| -
|
| - gfx::Rect error_bounding_rect = gfx::Rect();
|
| -
|
| - // Check that bitmaps have identical dimensions.
|
| - DCHECK(actual_bmp.width() == expected_bmp.width() &&
|
| - actual_bmp.height() == expected_bmp.height());
|
| -
|
| - SkAutoLockPixels lock_actual_bmp(actual_bmp);
|
| - SkAutoLockPixels lock_expected_bmp(expected_bmp);
|
| -
|
| - for (int x = 0; x < actual_bmp.width(); ++x) {
|
| - for (int y = 0; y < actual_bmp.height(); ++y) {
|
| - SkColor actual_color = actual_bmp.getColor(x, y);
|
| - SkColor expected_color = expected_bmp.getColor(x, y);
|
| - if (discard_alpha_) {
|
| - actual_color = SkColorSetA(actual_color, 0);
|
| - expected_color = SkColorSetA(expected_color, 0);
|
| - }
|
| - if (actual_color != expected_color) {
|
| - ++error_pixels_count;
|
| - error_bounding_rect.Union(gfx::Rect(x, y, 1, 1));
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (error_pixels_count != 0) {
|
| - LOG(ERROR) << "Number of pixel with an error: " << error_pixels_count;
|
| - LOG(ERROR) << "Error Bounding Box : " << error_bounding_rect.ToString();
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -FuzzyPixelComparator::FuzzyPixelComparator(
|
| - const bool discard_alpha,
|
| - const float error_pixels_percentage_limit,
|
| - const float small_error_pixels_percentage_limit,
|
| - const float avg_abs_error_limit,
|
| - const int max_abs_error_limit,
|
| - const int small_error_threshold)
|
| - : discard_alpha_(discard_alpha),
|
| - error_pixels_percentage_limit_(error_pixels_percentage_limit),
|
| - small_error_pixels_percentage_limit_(small_error_pixels_percentage_limit),
|
| - avg_abs_error_limit_(avg_abs_error_limit),
|
| - max_abs_error_limit_(max_abs_error_limit),
|
| - small_error_threshold_(small_error_threshold) {
|
| -}
|
| -
|
| -bool FuzzyPixelComparator::Compare(const SkBitmap& actual_bmp,
|
| - const SkBitmap& expected_bmp) const {
|
| - // Number of pixels with an error
|
| - int error_pixels_count = 0;
|
| - // Number of pixels with a small error
|
| - int small_error_pixels_count = 0;
|
| - // The per channel sums of absolute errors over all pixels.
|
| - int64 sum_abs_error_r = 0;
|
| - int64 sum_abs_error_g = 0;
|
| - int64 sum_abs_error_b = 0;
|
| - int64 sum_abs_error_a = 0;
|
| - // The per channel maximum absolute errors over all pixels.
|
| - int max_abs_error_r = 0;
|
| - int max_abs_error_g = 0;
|
| - int max_abs_error_b = 0;
|
| - int max_abs_error_a = 0;
|
| -
|
| - gfx::Rect error_bounding_rect = gfx::Rect();
|
| -
|
| - // Check that bitmaps have identical dimensions.
|
| - DCHECK(actual_bmp.width() == expected_bmp.width() &&
|
| - actual_bmp.height() == expected_bmp.height());
|
| -
|
| - // Check that bitmaps are not empty.
|
| - DCHECK(actual_bmp.width() > 0 && actual_bmp.height() > 0);
|
| -
|
| - SkAutoLockPixels lock_actual_bmp(actual_bmp);
|
| - SkAutoLockPixels lock_expected_bmp(expected_bmp);
|
| -
|
| - for (int x = 0; x < actual_bmp.width(); ++x) {
|
| - for (int y = 0; y < actual_bmp.height(); ++y) {
|
| - SkColor actual_color = actual_bmp.getColor(x, y);
|
| - SkColor expected_color = expected_bmp.getColor(x, y);
|
| - if (discard_alpha_) {
|
| - actual_color = SkColorSetA(actual_color, 0);
|
| - expected_color = SkColorSetA(expected_color, 0);
|
| - }
|
| -
|
| - if (actual_color != expected_color) {
|
| - ++error_pixels_count;
|
| -
|
| - // Compute per channel errors
|
| - int error_r = SkColorGetR(actual_color) - SkColorGetR(expected_color);
|
| - int error_g = SkColorGetG(actual_color) - SkColorGetG(expected_color);
|
| - int error_b = SkColorGetB(actual_color) - SkColorGetB(expected_color);
|
| - int error_a = SkColorGetA(actual_color) - SkColorGetA(expected_color);
|
| - int abs_error_r = std::abs(error_r);
|
| - int abs_error_g = std::abs(error_g);
|
| - int abs_error_b = std::abs(error_b);
|
| - int abs_error_a = std::abs(error_a);
|
| -
|
| - // Increment small error counter if error is below threshold
|
| - if (abs_error_r <= small_error_threshold_ &&
|
| - abs_error_g <= small_error_threshold_ &&
|
| - abs_error_b <= small_error_threshold_ &&
|
| - abs_error_a <= small_error_threshold_)
|
| - ++small_error_pixels_count;
|
| -
|
| - // Update per channel maximum absolute errors
|
| - max_abs_error_r = std::max(max_abs_error_r, abs_error_r);
|
| - max_abs_error_g = std::max(max_abs_error_g, abs_error_g);
|
| - max_abs_error_b = std::max(max_abs_error_b, abs_error_b);
|
| - max_abs_error_a = std::max(max_abs_error_a, abs_error_a);
|
| -
|
| - // Update per channel absolute error sums
|
| - sum_abs_error_r += abs_error_r;
|
| - sum_abs_error_g += abs_error_g;
|
| - sum_abs_error_b += abs_error_b;
|
| - sum_abs_error_a += abs_error_a;
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Compute error metrics from collected data
|
| - int pixels_count = actual_bmp.width() * actual_bmp.height();
|
| - float error_pixels_percentage = 0.0f;
|
| - float small_error_pixels_percentage = 0.0f;
|
| - if (pixels_count > 0) {
|
| - error_pixels_percentage = static_cast<float>(error_pixels_count) /
|
| - pixels_count * 100.0f;
|
| - small_error_pixels_percentage =
|
| - static_cast<float>(small_error_pixels_count) / pixels_count * 100.0f;
|
| - }
|
| - float avg_abs_error_r = 0.0f;
|
| - float avg_abs_error_g = 0.0f;
|
| - float avg_abs_error_b = 0.0f;
|
| - float avg_abs_error_a = 0.0f;
|
| - if (error_pixels_count > 0) {
|
| - avg_abs_error_r = static_cast<float>(sum_abs_error_r) / error_pixels_count;
|
| - avg_abs_error_g = static_cast<float>(sum_abs_error_g) / error_pixels_count;
|
| - avg_abs_error_b = static_cast<float>(sum_abs_error_b) / error_pixels_count;
|
| - avg_abs_error_a = static_cast<float>(sum_abs_error_a) / error_pixels_count;
|
| - }
|
| -
|
| - if (error_pixels_percentage > error_pixels_percentage_limit_ ||
|
| - small_error_pixels_percentage > small_error_pixels_percentage_limit_ ||
|
| - avg_abs_error_r > avg_abs_error_limit_ ||
|
| - avg_abs_error_g > avg_abs_error_limit_ ||
|
| - avg_abs_error_b > avg_abs_error_limit_ ||
|
| - avg_abs_error_a > avg_abs_error_limit_ ||
|
| - max_abs_error_r > max_abs_error_limit_ ||
|
| - max_abs_error_g > max_abs_error_limit_ ||
|
| - max_abs_error_b > max_abs_error_limit_ ||
|
| - max_abs_error_a > max_abs_error_limit_) {
|
| - LOG(ERROR) << "Percentage of pixels with an error: "
|
| - << error_pixels_percentage;
|
| - LOG(ERROR) << "Percentage of pixels with errors not greater than "
|
| - << small_error_threshold_ << ": "
|
| - << small_error_pixels_percentage;
|
| - LOG(ERROR) << "Average absolute error (excluding identical pixels): "
|
| - << "R=" << avg_abs_error_r << " "
|
| - << "G=" << avg_abs_error_g << " "
|
| - << "B=" << avg_abs_error_b << " "
|
| - << "A=" << avg_abs_error_a;
|
| - LOG(ERROR) << "Largest absolute error: "
|
| - << "R=" << max_abs_error_r << " "
|
| - << "G=" << max_abs_error_g << " "
|
| - << "B=" << max_abs_error_b << " "
|
| - << "A=" << max_abs_error_a;
|
| -
|
| - for (int x = 0; x < actual_bmp.width(); ++x) {
|
| - for (int y = 0; y < actual_bmp.height(); ++y) {
|
| - SkColor actual_color = actual_bmp.getColor(x, y);
|
| - SkColor expected_color = expected_bmp.getColor(x, y);
|
| - if (discard_alpha_) {
|
| - actual_color = SkColorSetA(actual_color, 0);
|
| - expected_color = SkColorSetA(expected_color, 0);
|
| - }
|
| - if (actual_color != expected_color)
|
| - error_bounding_rect.Union(gfx::Rect(x, y, 1, 1));
|
| - }
|
| - }
|
| - LOG(ERROR) << "Error Bounding Box : " << error_bounding_rect.ToString();
|
| - return false;
|
| - } else {
|
| - return true;
|
| - }
|
| -}
|
| -
|
| -} // namespace cc
|
|
|