diff options
author | 2013-07-22 13:14:04 +0000 | |
---|---|---|
committer | 2013-07-22 13:14:04 +0000 | |
commit | a54aaf7fba0dae99305715b8f9d46a875eb6b5a6 (patch) | |
tree | 8779477d2cbc76f0fa6001ced0cff00b6cf2c783 /tools/skpdiff/SkDiffContext.h | |
parent | 14cec91fe1dbe4986bfacdff8e2eb8928d60fb77 (diff) |
migrate skpdiff to tools
R=djsollen@google.com
Review URL: https://codereview.chromium.org/19671002
git-svn-id: http://skia.googlecode.com/svn/trunk@10225 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tools/skpdiff/SkDiffContext.h')
-rw-r--r-- | tools/skpdiff/SkDiffContext.h | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/tools/skpdiff/SkDiffContext.h b/tools/skpdiff/SkDiffContext.h new file mode 100644 index 0000000000..141da09a4d --- /dev/null +++ b/tools/skpdiff/SkDiffContext.h @@ -0,0 +1,116 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkDiffContext_DEFINED +#define SkDiffContext_DEFINED + +#include "SkString.h" +#include "SkTArray.h" +#include "SkTDArray.h" + +class SkWStream; +class SkImageDiffer; + +/** + * Collects records of diffs and outputs them as JSON. + */ +class SkDiffContext { +public: + SkDiffContext(); + ~SkDiffContext(); + + /** + * Sets the differs to be used in each diff. Already started diffs will not retroactively use + * these. + * @param differs An array of differs to use. The array is copied, but not the differs + * themselves. + */ + void setDiffers(const SkTDArray<SkImageDiffer*>& differs); + + /** + * Compares two directories of images with the given differ + * @param baselinePath The baseline directory's path + * @param testPath The test directory's path + */ + void diffDirectories(const char baselinePath[], const char testPath[]); + + /** + * Compares two sets of images identified by glob style patterns with the given differ + * @param baselinePattern A pattern for baseline files + * @param testPattern A pattern for test files that matches each file of the baseline file + */ + void diffPatterns(const char baselinePattern[], const char testPattern[]); + + /** + * Compares the images at the given paths + * @param baselinePath The baseline file path + * @param testPath The matching test file path + */ + void addDiff(const char* baselinePath, const char* testPath); + + /** + * Output the records of each diff in JSON. + * + * The format of the JSON document is one top level array named "records". + * Each record in the array is an object with both a "baselinePath" and "testPath" string field. + * They also have an array named "diffs" with each element being one diff record for the two + * images indicated in the above field. + * A diff record includes: + * "differName" : string name of the diff metric used + * "result" : numerical result of the diff + * "pointsOfInterest" : an array of coordinates (stored as a 2-array of ints) of interesting + * points + * + * Here is an example: + * + * { + * "records": [ + * { + * "baselinePath": "queue.png", + * "testPath": "queue.png", + * "diffs": [ + * { + * "differName": "different_pixels", + * "result": 1, + * "pointsOfInterest": [ + * [285,279], + * ] + * } + * ] + * } + * ] + * } + * + * @param stream The stream to output the diff to + * @param useJSONP True to adding padding to the JSON output to make it cross-site requestable. + */ + void outputRecords(SkWStream& stream, bool useJSONP); + +private: + struct DiffData { + const char* fDiffName; + double fResult; + SkTDArray<SkIPoint> fPointsOfInterest; + }; + + struct DiffRecord { + SkString fBaselinePath; + SkString fTestPath; + SkTArray<DiffData> fDiffs; + DiffRecord* fNext; + }; + + // We use linked list for the records so that their pointers remain stable. A resizable array + // might change its pointers, which would make it harder for async diffs to record their + // results. + DiffRecord * fRecords; + + SkImageDiffer** fDiffers; + int fDifferCount; +}; + +#endif |