Re-land r6843 with copied gyp file to (hopefully) fix Windows build
BUG=https://code.google.com/p/skia/issues/detail?id=1023 Review URL: https://codereview.appspot.com/6943073 git-svn-id: http://skia.googlecode.com/svn/trunk@6880 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
457d8a77be
commit
ee8a8e3931
@ -15,6 +15,7 @@
|
||||
|
||||
#include "gm.h"
|
||||
#include "system_preferences.h"
|
||||
#include "SkBitmapChecksummer.h"
|
||||
#include "SkColorPriv.h"
|
||||
#include "SkData.h"
|
||||
#include "SkDeferredCanvas.h"
|
||||
@ -32,6 +33,8 @@
|
||||
#include "SkTileGridPicture.h"
|
||||
#include "SamplePipeControllers.h"
|
||||
|
||||
#include "json/value.h"
|
||||
|
||||
#if SK_SUPPORT_GPU
|
||||
#include "GrContextFactory.h"
|
||||
#include "GrRenderTarget.h"
|
||||
@ -74,6 +77,16 @@ const static ErrorBitfield ERROR_DIMENSION_MISMATCH = 0x04;
|
||||
const static ErrorBitfield ERROR_READING_REFERENCE_IMAGE = 0x08;
|
||||
const static ErrorBitfield ERROR_WRITING_REFERENCE_IMAGE = 0x10;
|
||||
|
||||
const static char kJsonKey_ActualResults[] = "actual-results";
|
||||
const static char kJsonKey_ActualResults_Failed[] = "failed";
|
||||
const static char kJsonKey_ActualResults_FailureIgnored[]= "failure-ignored";
|
||||
const static char kJsonKey_ActualResults_Succeeded[] = "succeeded";
|
||||
const static char kJsonKey_ActualResults_AnyStatus_Checksum[] = "checksum";
|
||||
|
||||
const static char kJsonKey_ExpectedResults[] = "expected-results";
|
||||
const static char kJsonKey_ExpectedResults_Checksums[] = "checksums";
|
||||
const static char kJsonKey_ExpectedResults_IgnoreFailure[] = "ignore-failure";
|
||||
|
||||
using namespace skiagm;
|
||||
|
||||
/*
|
||||
@ -570,24 +583,57 @@ public:
|
||||
ErrorBitfield compare_to_reference_image_on_disk(
|
||||
const char readPath [], const SkString& name, SkBitmap &bitmap,
|
||||
const char diffPath [], const char renderModeDescriptor []) {
|
||||
ErrorBitfield retval;
|
||||
SkString path = make_filename(readPath, "", name, "png");
|
||||
SkBitmap referenceBitmap;
|
||||
if (SkImageDecoder::DecodeFile(path.c_str(), &referenceBitmap,
|
||||
Json::Value expectedChecksumsArray;
|
||||
|
||||
bool decodedReferenceBitmap =
|
||||
SkImageDecoder::DecodeFile(path.c_str(), &referenceBitmap,
|
||||
SkBitmap::kARGB_8888_Config,
|
||||
SkImageDecoder::kDecodePixels_Mode,
|
||||
NULL)) {
|
||||
return compare_to_reference_image_in_memory(name, bitmap,
|
||||
referenceBitmap,
|
||||
diffPath,
|
||||
renderModeDescriptor);
|
||||
NULL);
|
||||
if (decodedReferenceBitmap) {
|
||||
expectedChecksumsArray.append(Json::UInt64(
|
||||
SkBitmapChecksummer::Compute64(referenceBitmap)));
|
||||
retval = compare_to_reference_image_in_memory(name, bitmap,
|
||||
referenceBitmap,
|
||||
diffPath,
|
||||
renderModeDescriptor);
|
||||
} else {
|
||||
if (fNotifyMissingReadReference) {
|
||||
fprintf(stderr, "FAILED to read %s\n", path.c_str());
|
||||
}
|
||||
RecordError(ERROR_READING_REFERENCE_IMAGE, name,
|
||||
renderModeDescriptor);
|
||||
return ERROR_READING_REFERENCE_IMAGE;
|
||||
retval = ERROR_READING_REFERENCE_IMAGE;
|
||||
}
|
||||
|
||||
// Add this result to the appropriate JSON collection of actual results,
|
||||
// depending on status.
|
||||
Json::Value actualResults;
|
||||
actualResults[kJsonKey_ActualResults_AnyStatus_Checksum] = Json::UInt64(
|
||||
SkBitmapChecksummer::Compute64(bitmap));
|
||||
if (decodedReferenceBitmap) {
|
||||
if (ERROR_NONE == retval) {
|
||||
fJsonActualResults_Succeeded[name.c_str()] = actualResults;
|
||||
} else {
|
||||
fJsonActualResults_Failed[name.c_str()] = actualResults;
|
||||
}
|
||||
} else {
|
||||
fJsonActualResults_FailureIgnored[name.c_str()] = actualResults;
|
||||
}
|
||||
|
||||
// Add this test to the JSON collection of expected results.
|
||||
// For now, we assume that this collection starts out empty and we
|
||||
// just fill it in as we go; once gm accepts a JSON file as input,
|
||||
// we'll have to change that.
|
||||
Json::Value expectedResults;
|
||||
expectedResults[kJsonKey_ExpectedResults_Checksums] = expectedChecksumsArray;
|
||||
expectedResults[kJsonKey_ExpectedResults_IgnoreFailure] = !decodedReferenceBitmap;
|
||||
fJsonExpectedResults[name.c_str()] = expectedResults;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
// NOTE: As far as I can tell, this function is NEVER called with a
|
||||
@ -791,6 +837,11 @@ public:
|
||||
// information about all failed tests we have encountered so far
|
||||
SkTArray<FailRec> fFailedTests;
|
||||
|
||||
Json::Value fJsonExpectedResults;
|
||||
Json::Value fJsonActualResults_Failed;
|
||||
Json::Value fJsonActualResults_FailureIgnored;
|
||||
Json::Value fJsonActualResults_Succeeded;
|
||||
|
||||
}; // end of GMMain class definition
|
||||
|
||||
#if SK_SUPPORT_GPU
|
||||
@ -874,6 +925,7 @@ static void usage(const char * argv0) {
|
||||
" [--notexturecache]: disable the gpu texture cache\n"
|
||||
" [--tiledPipe]: Exercise tiled SkGPipe replay\n"
|
||||
" [--tileGrid]: use a tileGrid structure for SkPicture testing\n"
|
||||
" [--writeJsonSummary <path>]: write a JSON-formatted result summary to this file\n"
|
||||
" [--writePath|-w <path>]: write rendered images into this directory\n"
|
||||
" [--writePicturePath|-wp <path>]: write .skp files into this directory\n"
|
||||
);
|
||||
@ -957,6 +1009,7 @@ int tool_main(int argc, char** argv) {
|
||||
setSystemPreferences();
|
||||
GMMain gmmain;
|
||||
|
||||
const char* writeJsonSummaryPath = NULL;// if non-null, where we write the JSON summary
|
||||
const char* writePath = NULL; // if non-null, where we write the originals
|
||||
const char* writePicturePath = NULL; // if non-null, where we write serialized pictures
|
||||
const char* readPath = NULL; // if non-null, were we read from to compare
|
||||
@ -1080,6 +1133,11 @@ int tool_main(int argc, char** argv) {
|
||||
if (argv < stop && **argv) {
|
||||
writePath = *argv;
|
||||
}
|
||||
} else if (0 == strcmp(*argv, "--writeJsonSummary")) {
|
||||
argv++;
|
||||
if (argv < stop && **argv) {
|
||||
writeJsonSummaryPath = *argv;
|
||||
}
|
||||
} else if ((0 == strcmp(*argv, "--writePicturePath")) ||
|
||||
(0 == strcmp(*argv, "-wp"))) {
|
||||
argv++;
|
||||
@ -1351,6 +1409,22 @@ int tool_main(int argc, char** argv) {
|
||||
testsRun, testsPassed, testsFailed, testsMissingReferenceImages);
|
||||
gmmain.ListErrors();
|
||||
|
||||
if (NULL != writeJsonSummaryPath) {
|
||||
Json::Value actualResults;
|
||||
actualResults[kJsonKey_ActualResults_Failed] =
|
||||
gmmain.fJsonActualResults_Failed;
|
||||
actualResults[kJsonKey_ActualResults_FailureIgnored] =
|
||||
gmmain.fJsonActualResults_FailureIgnored;
|
||||
actualResults[kJsonKey_ActualResults_Succeeded] =
|
||||
gmmain.fJsonActualResults_Succeeded;
|
||||
Json::Value root;
|
||||
root[kJsonKey_ActualResults] = actualResults;
|
||||
root[kJsonKey_ExpectedResults] = gmmain.fJsonExpectedResults;
|
||||
std::string jsonStdString = root.toStyledString();
|
||||
SkFILEWStream stream(writeJsonSummaryPath);
|
||||
stream.write(jsonStdString.c_str(), jsonStdString.length());
|
||||
}
|
||||
|
||||
#if SK_SUPPORT_GPU
|
||||
|
||||
#if GR_CACHE_STATS
|
||||
|
1
gm/tests/inputs/empty-dir/README
Normal file
1
gm/tests/inputs/empty-dir/README
Normal file
@ -0,0 +1 @@
|
||||
This directory intentionally left empty. Except for this file.
|
@ -1 +1 @@
|
||||
out/Debug/gm --hierarchy --match dashing2 --config 8888 -r gm/tests/inputs/different-pixels -w gm/tests/outputs/compared-against-different-pixels/output-actual/images
|
||||
out/Debug/gm --hierarchy --match dashing2 --config 8888 -r gm/tests/inputs/different-pixels --writeJsonSummary gm/tests/outputs/compared-against-different-pixels/output-actual/json-summary.txt -w gm/tests/outputs/compared-against-different-pixels/output-actual/images
|
||||
|
@ -0,0 +1,17 @@
|
||||
{
|
||||
"actual-results" : {
|
||||
"failed" : {
|
||||
"8888/dashing2" : {
|
||||
"checksum" : 2675870163990933333
|
||||
}
|
||||
},
|
||||
"failure-ignored" : null,
|
||||
"succeeded" : null
|
||||
},
|
||||
"expected-results" : {
|
||||
"8888/dashing2" : {
|
||||
"checksums" : [ 15161495552186645995 ],
|
||||
"ignore-failure" : false
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
out/Debug/gm --hierarchy --match dashing2 --config 8888 -r gm/tests/inputs/empty-dir --writeJsonSummary gm/tests/outputs/compared-against-empty-dir/output-actual/json-summary.txt -w gm/tests/outputs/compared-against-empty-dir/output-actual/images
|
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
@ -0,0 +1,17 @@
|
||||
{
|
||||
"actual-results" : {
|
||||
"failed" : null,
|
||||
"failure-ignored" : {
|
||||
"8888/dashing2" : {
|
||||
"checksum" : 2675870163990933333
|
||||
}
|
||||
},
|
||||
"succeeded" : null
|
||||
},
|
||||
"expected-results" : {
|
||||
"8888/dashing2" : {
|
||||
"checksums" : null,
|
||||
"ignore-failure" : true
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
0
|
@ -0,0 +1,5 @@
|
||||
reading from gm/tests/inputs/empty-dir
|
||||
writing to gm/tests/outputs/compared-against-empty-dir/output-actual/images
|
||||
drawing... dashing2 [640 480]
|
||||
FAILED to read gm/tests/inputs/empty-dir/8888/dashing2.png
|
||||
Ran 1 tests: 0 passed, 0 failed, 1 missing reference images
|
@ -1 +1 @@
|
||||
out/Debug/gm --hierarchy --match dashing2 --config 8888 -r gm/tests/inputs/identical-bytes -w gm/tests/outputs/compared-against-identical-bytes/output-actual/images
|
||||
out/Debug/gm --hierarchy --match dashing2 --config 8888 -r gm/tests/inputs/identical-bytes --writeJsonSummary gm/tests/outputs/compared-against-identical-bytes/output-actual/json-summary.txt -w gm/tests/outputs/compared-against-identical-bytes/output-actual/images
|
||||
|
@ -0,0 +1,17 @@
|
||||
{
|
||||
"actual-results" : {
|
||||
"failed" : null,
|
||||
"failure-ignored" : null,
|
||||
"succeeded" : {
|
||||
"8888/dashing2" : {
|
||||
"checksum" : 2675870163990933333
|
||||
}
|
||||
}
|
||||
},
|
||||
"expected-results" : {
|
||||
"8888/dashing2" : {
|
||||
"checksums" : [ 2675870163990933333 ],
|
||||
"ignore-failure" : false
|
||||
}
|
||||
}
|
||||
}
|
@ -1 +1 @@
|
||||
out/Debug/gm --hierarchy --match dashing2 --config 8888 -r gm/tests/inputs/identical-pixels -w gm/tests/outputs/compared-against-identical-pixels/output-actual/images
|
||||
out/Debug/gm --hierarchy --match dashing2 --config 8888 -r gm/tests/inputs/identical-pixels --writeJsonSummary gm/tests/outputs/compared-against-identical-pixels/output-actual/json-summary.txt -w gm/tests/outputs/compared-against-identical-pixels/output-actual/images
|
||||
|
@ -0,0 +1,17 @@
|
||||
{
|
||||
"actual-results" : {
|
||||
"failed" : null,
|
||||
"failure-ignored" : null,
|
||||
"succeeded" : {
|
||||
"8888/dashing2" : {
|
||||
"checksum" : 2675870163990933333
|
||||
}
|
||||
}
|
||||
},
|
||||
"expected-results" : {
|
||||
"8888/dashing2" : {
|
||||
"checksums" : [ 2675870163990933333 ],
|
||||
"ignore-failure" : false
|
||||
}
|
||||
}
|
||||
}
|
@ -38,6 +38,7 @@ function compare_directories {
|
||||
# - with the arguments in $1
|
||||
# - writing resulting images into $2/output-actual/images
|
||||
# - writing stdout into $2/output-actual/stdout
|
||||
# - writing json summary into $2/output-actual/json-summary.txt
|
||||
# - writing return value into $2/output-actual/return_value
|
||||
# Then compare all of those against $2/output-expected .
|
||||
function gm_test {
|
||||
@ -51,7 +52,7 @@ function gm_test {
|
||||
|
||||
rm -rf $ACTUAL_OUTPUT_DIR
|
||||
mkdir -p $ACTUAL_OUTPUT_DIR
|
||||
COMMAND="$GM_BINARY $GM_ARGS -w $ACTUAL_OUTPUT_DIR/images"
|
||||
COMMAND="$GM_BINARY $GM_ARGS --writeJsonSummary $ACTUAL_OUTPUT_DIR/json-summary.txt -w $ACTUAL_OUTPUT_DIR/images"
|
||||
echo "$COMMAND" >$ACTUAL_OUTPUT_DIR/command_line
|
||||
$COMMAND &>$ACTUAL_OUTPUT_DIR/stdout
|
||||
echo $? >$ACTUAL_OUTPUT_DIR/return_value
|
||||
@ -72,4 +73,7 @@ gm_test "--hierarchy --match dashing2 --config 8888 -r $GM_INPUTS/identical-pixe
|
||||
# Compare generated image against an input image file with different pixels.
|
||||
gm_test "--hierarchy --match dashing2 --config 8888 -r $GM_INPUTS/different-pixels" "$GM_OUTPUTS/compared-against-different-pixels"
|
||||
|
||||
# Compare generated image against an empty "expected image" dir.
|
||||
gm_test "--hierarchy --match dashing2 --config 8888 -r $GM_INPUTS/empty-dir" "$GM_OUTPUTS/compared-against-empty-dir"
|
||||
|
||||
echo "All tests passed."
|
||||
|
@ -10,6 +10,7 @@
|
||||
'include_dirs' : [
|
||||
'../src/core',
|
||||
'../src/pipe/utils/',
|
||||
'../src/utils/',
|
||||
],
|
||||
'includes': [
|
||||
'gmslides.gypi',
|
||||
@ -25,7 +26,9 @@
|
||||
'skia_base_libs.gyp:skia_base_libs',
|
||||
'effects.gyp:effects',
|
||||
'images.gyp:images',
|
||||
'jsoncpp.gyp:jsoncpp',
|
||||
'pdf.gyp:pdf',
|
||||
'utils.gyp:utils',
|
||||
],
|
||||
'conditions': [
|
||||
['skia_os == "mac"', {
|
||||
|
56
gyp/jsoncpp.gyp
Normal file
56
gyp/jsoncpp.gyp
Normal file
@ -0,0 +1,56 @@
|
||||
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
# TODO: This file was copied from the external dependency
|
||||
# third_party/externals/jsoncpp/jsoncpp.gyp , at revision 125399,
|
||||
# with directory paths modified to work at this level.
|
||||
#
|
||||
# It would be better for us to depend on that gypfile within the external
|
||||
# dependency, but so far we have been unable to make that work reliably.
|
||||
# See https://code.google.com/p/skia/issues/detail?id=1023
|
||||
|
||||
{
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'jsoncpp',
|
||||
'type': 'static_library',
|
||||
'defines': [
|
||||
'JSON_USE_EXCEPTION=0',
|
||||
],
|
||||
'sources': [
|
||||
'../third_party/externals/jsoncpp/source/include/json/assertions.h',
|
||||
'../third_party/externals/jsoncpp/source/include/json/autolink.h',
|
||||
'../third_party/externals/jsoncpp/source/include/json/config.h',
|
||||
'../third_party/externals/jsoncpp/source/include/json/features.h',
|
||||
'../third_party/externals/jsoncpp/source/include/json/forwards.h',
|
||||
'../third_party/externals/jsoncpp/source/include/json/json.h',
|
||||
'../third_party/externals/jsoncpp/source/include/json/reader.h',
|
||||
'../third_party/externals/jsoncpp/overrides/include/json/value.h',
|
||||
'../third_party/externals/jsoncpp/source/include/json/writer.h',
|
||||
'../third_party/externals/jsoncpp/source/src/lib_json/json_batchallocator.h',
|
||||
'../third_party/externals/jsoncpp/source/src/lib_json/json_reader.cpp',
|
||||
'../third_party/externals/jsoncpp/source/src/lib_json/json_tool.h',
|
||||
'../third_party/externals/jsoncpp/overrides/src/lib_json/json_value.cpp',
|
||||
'../third_party/externals/jsoncpp/source/src/lib_json/json_writer.cpp',
|
||||
],
|
||||
'include_dirs': [
|
||||
'../third_party/externals/jsoncpp/overrides/include/',
|
||||
'../third_party/externals/jsoncpp/source/include/',
|
||||
'../third_party/externals/jsoncpp/source/src/lib_json/',
|
||||
],
|
||||
'direct_dependent_settings': {
|
||||
'include_dirs': [
|
||||
'../third_party/externals/jsoncpp/overrides/include/',
|
||||
'../third_party/externals/jsoncpp/source/include/',
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
# Local Variables:
|
||||
# tab-width:2
|
||||
# indent-tabs-mode:nil
|
||||
# End:
|
||||
# vim: set expandtab tabstop=2 shiftwidth=2:
|
Loading…
Reference in New Issue
Block a user