158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger/*
258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Copyright 2013 Google Inc.
358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger *
458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * found in the LICENSE file.
658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */
758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#ifndef SkDifferentPixelsMetric_DEFINED
958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#define SkDifferentPixelsMetric_DEFINED
1058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkTDArray.h"
1258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#if SK_SUPPORT_OPENCL
1458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkCLImageDiffer.h"
1558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#else
1658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkImageDiffer.h"
1758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif
1858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger/**
2058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * A differ that measures the percentage of different corresponding pixels. If the two images are
2158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * not the same size or have no pixels, the result will always be zero.
2258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */
2358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDifferentPixelsMetric :
2458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#if SK_SUPPORT_OPENCL
2558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    public SkCLImageDiffer {
2658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#else
2758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    public SkImageDiffer {
2858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif
2958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerpublic:
30910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger    virtual const char* getName() const SK_OVERRIDE;
31910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger    virtual bool diff(SkBitmap* baseline, SkBitmap* test, bool computeMask,
32910f694aefb0b671dd8522a9afe9b6be645701c1Derek Sollenberger                      Result* result) const SK_OVERRIDE;
3358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
3458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprotected:
3558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#if SK_SUPPORT_OPENCL
3658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool onInit() SK_OVERRIDE;
3758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif
3858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
3958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate:
4058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#if SK_SUPPORT_OPENCL
4158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    cl_kernel fKernel;
4258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
4358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    typedef SkCLImageDiffer INHERITED;
4458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#else
4558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    typedef SkImageDiffer INHERITED;
4658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif
4758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger};
4858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
4958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif
50