skia2/gm/gm_error.h
commit-bot@chromium.org 5e00989a28 Add SkPDFDeviceFlatenner which extends SkPDFDevice to add support to flatten the path and the text when we have perspective.
prepare to deprecate SkPDFDevice constructor, and route gm and render_pdfs to use SkDocument::Create pdf interface instead. - controlled by a flag
add comments where we are supposed to flatten other features (paint, shaders, ... )

R=reed@google.com, bungeman@google.com, scroggo@google.com, vandebo@chromium.org, bsalomon@google.com

Author: edisonn@google.com

Review URL: https://codereview.chromium.org/24811002

git-svn-id: http://skia.googlecode.com/svn/trunk@11751 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-10-14 13:42:12 +00:00

164 lines
5.0 KiB
C++

/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/*
* Error codes used by gmmain.cpp.
*/
#ifndef gm_error_DEFINED
#define gm_error_DEFINED
#include "gm.h"
namespace skiagm {
/**
* The complete list of error types we might encounter in GM.
*/
enum ErrorType {
// Even though kNoGpuContext_ErrorType only occurs when SK_SUPPORT_GPU
// is turned on, we always include this type in our enum so that
// reports will be consistent whether SK_SUPPORT_GPU is turned on
// or off (as long as the number of these errors is 0).
kNoGpuContext_ErrorType,
kIntentionallySkipped_ErrorType,
kRenderModeMismatch_ErrorType,
kGeneratePdfFailed_ErrorType,
kExpectationsMismatch_ErrorType,
kMissingExpectations_ErrorType,
kWritingReferenceImage_ErrorType,
kLast_ErrorType = kWritingReferenceImage_ErrorType
};
/**
* Returns the name of the given ErrorType.
*/
static const char *getErrorTypeName(ErrorType type) {
switch(type) {
case kNoGpuContext_ErrorType:
return "NoGpuContext";
case kIntentionallySkipped_ErrorType:
return "IntentionallySkipped";
case kRenderModeMismatch_ErrorType:
return "RenderModeMismatch";
case kGeneratePdfFailed_ErrorType:
return "GeneratePdfFailed";
case kExpectationsMismatch_ErrorType:
return "ExpectationsMismatch";
case kMissingExpectations_ErrorType:
return "MissingExpectations";
case kWritingReferenceImage_ErrorType:
return "WritingReferenceImage";
}
// control should never reach here
SkDEBUGFAIL("getErrorTypeName() called with unknown type");
return "Unknown";
}
/**
* Fills in "type" with the ErrorType associated with name "name".
* Returns true if we found one, false if it is an unknown type name.
*/
static bool getErrorTypeByName(const char name[], ErrorType *type) {
for (int typeInt = 0; typeInt <= kLast_ErrorType; typeInt++) {
ErrorType thisType = static_cast<ErrorType>(typeInt);
const char *thisTypeName = getErrorTypeName(thisType);
if (0 == strcmp(thisTypeName, name)) {
*type = thisType;
return true;
}
}
return false;
}
/**
* A combination of 0 or more ErrorTypes.
*/
class ErrorCombination {
public:
ErrorCombination() : fBitfield(0) {}
ErrorCombination(const ErrorType type) : fBitfield(1 << type) {}
/**
* Returns true iff there are NO errors.
*/
bool isEmpty() const {
return (0 == this->fBitfield);
}
/**
* Adds this ErrorType to this ErrorCombination.
*/
void add(const ErrorType type) {
this->fBitfield |= (1 << type);
}
/**
* Adds all ErrorTypes in "other" to this ErrorCombination.
*/
void add(const ErrorCombination other) {
this->fBitfield |= other.fBitfield;
}
/**
* Returns true iff this ErrorCombination includes this ErrorType.
*/
bool includes(const ErrorType type) const {
return !(0 == (this->fBitfield & (1 << type)));
}
/**
* Returns a string representation of all ErrorTypes in this
* ErrorCombination.
*
* @param separator text with which to separate ErrorType names
*/
SkString asString(const char separator[]) const {
SkString s;
for (int typeInt = 0; typeInt <= kLast_ErrorType; typeInt++) {
ErrorType type = static_cast<ErrorType>(typeInt);
if (this->includes(type)) {
if (!s.isEmpty()) {
s.append(separator);
}
s.append(getErrorTypeName(type));
}
}
return s;
}
/**
* Returns a new ErrorCombination, which includes the union of all
* ErrorTypes in two ErrorCombination objects (this and other).
*/
ErrorCombination plus(const ErrorCombination& other) const {
ErrorCombination retval;
retval.fBitfield = this->fBitfield | other.fBitfield;
return retval;
}
/**
* Returns a new ErrorCombination, which is a copy of "this"
* but with all ErrorTypes in "other" removed.
*/
ErrorCombination minus(const ErrorCombination& other) const {
ErrorCombination retval;
retval.fBitfield = this->fBitfield & ~(other.fBitfield);
return retval;
}
private:
int fBitfield;
};
// No errors at all.
const static ErrorCombination kEmpty_ErrorCombination;
}
#endif // ifndef gm_error_DEFINED