3f04517721
When set, it will only write out images that don't match expectations. BUG=skia:1942 R=rmistry@google.com Author: epoger@google.com Review URL: https://codereview.chromium.org/283123002 git-svn-id: http://skia.googlecode.com/svn/trunk@14748 2bbb7eff-a529-9590-31e7-b0007b416f81
133 lines
4.2 KiB
C++
133 lines
4.2 KiB
C++
/*
|
|
* Copyright 2014 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef image_expectations_DEFINED
|
|
#define image_expectations_DEFINED
|
|
|
|
#include "SkBitmap.h"
|
|
#include "SkJSONCPP.h"
|
|
#include "SkRefCnt.h"
|
|
|
|
namespace sk_tools {
|
|
|
|
/**
|
|
* The digest of an image (either an image we have generated locally, or an image expectation).
|
|
*
|
|
* Currently, this is always a uint64_t hash digest of an SkBitmap.
|
|
*/
|
|
class ImageDigest : public SkRefCnt {
|
|
public:
|
|
/**
|
|
* Create an ImageDigest of a bitmap.
|
|
*
|
|
* Note that this is an expensive operation, because it has to examine all pixels in
|
|
* the bitmap. You may wish to consider using the BitmapAndDigest class, which will
|
|
* compute the ImageDigest lazily.
|
|
*
|
|
* @param bitmap image to get the digest of
|
|
*/
|
|
explicit ImageDigest(const SkBitmap &bitmap);
|
|
|
|
/**
|
|
* Create an ImageDigest using a hashType/hashValue pair.
|
|
*
|
|
* @param hashType the algorithm used to generate the hash; for now, only
|
|
* kJsonValue_Image_ChecksumAlgorithm_Bitmap64bitMD5 is allowed.
|
|
* @param hashValue the value generated by the hash algorithm for a particular image.
|
|
*/
|
|
explicit ImageDigest(const SkString &hashType, uint64_t hashValue);
|
|
|
|
/**
|
|
* Returns the hash digest type as an SkString.
|
|
*
|
|
* For now, this always returns kJsonValue_Image_ChecksumAlgorithm_Bitmap64bitMD5 .
|
|
*/
|
|
SkString getHashType() const;
|
|
|
|
/**
|
|
* Returns the hash digest value as a uint64_t.
|
|
*/
|
|
uint64_t getHashValue() const;
|
|
|
|
private:
|
|
uint64_t fHashValue;
|
|
};
|
|
|
|
/**
|
|
* Container that holds a reference to an SkBitmap and computes its ImageDigest lazily.
|
|
*
|
|
* Computing the ImageDigest can be expensive, so this can help you postpone (or maybe even
|
|
* avoid) that work.
|
|
*/
|
|
class BitmapAndDigest {
|
|
public:
|
|
explicit BitmapAndDigest(const SkBitmap &bitmap);
|
|
|
|
const ImageDigest *getImageDigestPtr();
|
|
const SkBitmap *getBitmapPtr() const;
|
|
private:
|
|
const SkBitmap fBitmap;
|
|
SkAutoTUnref<ImageDigest> fImageDigestRef;
|
|
};
|
|
|
|
/**
|
|
* Collects ImageDigests of actually rendered images, perhaps comparing to expectations.
|
|
*/
|
|
class ImageResultsAndExpectations {
|
|
public:
|
|
/**
|
|
* Adds expectations from a JSON file, returning true if successful.
|
|
*/
|
|
bool readExpectationsFile(const char *jsonPath);
|
|
|
|
/**
|
|
* Adds this image to the summary of results.
|
|
*
|
|
* @param sourceName name of the source file that generated this result
|
|
* @param fileName relative path to the image output file on local disk
|
|
* @param digest description of the image's contents
|
|
* @param tileNumber if not NULL, pointer to tile number
|
|
*/
|
|
void add(const char *sourceName, const char *fileName, const ImageDigest &digest,
|
|
const int *tileNumber=NULL);
|
|
|
|
/**
|
|
* Returns true if this test result matches its expectations.
|
|
* If there are no expectations for this test result, this will return false.
|
|
*
|
|
* @param sourceName name of the source file that generated this result
|
|
* @param digest description of the image's contents
|
|
* @param tileNumber if not NULL, pointer to tile number
|
|
*/
|
|
bool matchesExpectation(const char *sourceName, const ImageDigest &digest,
|
|
const int *tileNumber=NULL);
|
|
|
|
/**
|
|
* Writes the summary (as constructed so far) to a file.
|
|
*
|
|
* @param filename path to write the summary to
|
|
*/
|
|
void writeToFile(const char *filename) const;
|
|
|
|
private:
|
|
|
|
/**
|
|
* Read the file contents from jsonPath and parse them into jsonRoot.
|
|
*
|
|
* Returns true if successful.
|
|
*/
|
|
static bool Parse(const char *jsonPath, Json::Value *jsonRoot);
|
|
|
|
Json::Value fActualResults;
|
|
Json::Value fExpectedJsonRoot;
|
|
Json::Value fExpectedResults;
|
|
};
|
|
|
|
} // namespace sk_tools
|
|
|
|
#endif // image_expectations_DEFINED
|