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