Home | History | Annotate | Download | only in skpdiff
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef SkImageDiffer_DEFINED
      9 #define SkImageDiffer_DEFINED
     10 
     11 #include "SkBitmap.h"
     12 
     13 /**
     14  * Encapsulates an image difference metric algorithm that can be potentially run asynchronously.
     15  */
     16 class SkImageDiffer {
     17 public:
     18     SkImageDiffer();
     19     virtual ~SkImageDiffer();
     20 
     21     static const double RESULT_CORRECT;
     22     static const double RESULT_INCORRECT;
     23 
     24     struct Result {
     25         double result;
     26         int poiCount;
     27         SkBitmap poiAlphaMask; // optional
     28         double timeElapsed; // optional
     29     };
     30 
     31     /**
     32      * Gets a unique and descriptive name of this differ
     33      * @return A statically allocated null terminated string that is the name of this differ
     34      */
     35     virtual const char* getName() const = 0;
     36 
     37     /**
     38      * Gets if this differ needs to be initialized with and OpenCL device and context.
     39      */
     40     virtual bool requiresOpenCL() const { return false; }
     41 
     42     /**
     43      * diff on a pair of bitmaps.
     44      * @param  baseline    The correct bitmap
     45      * @param  test        The bitmap whose difference is being tested
     46      * @param  computeMask true if the differ is to attempt to create poiAlphaMask
     47      * @return             true on success, and false in the case of failure
     48      */
     49     virtual bool diff(SkBitmap* baseline, SkBitmap* test, bool computeMask,
     50                       Result* result) const = 0;
     51 };
     52 
     53 #endif
     54