|  | /* | 
|  | * Copyright 2014 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #include "DMJsonWriter.h" | 
|  |  | 
|  | #include "SkCommonFlags.h" | 
|  | #include "SkJSONCPP.h" | 
|  | #include "SkOSFile.h" | 
|  | #include "SkStream.h" | 
|  | #include "SkTArray.h" | 
|  | #include "SkThread.h" | 
|  |  | 
|  | namespace DM { | 
|  |  | 
|  | SkTArray<JsonWriter::BitmapResult> gBitmapResults; | 
|  | SK_DECLARE_STATIC_MUTEX(gBitmapResultLock); | 
|  |  | 
|  | void JsonWriter::AddBitmapResult(const BitmapResult& result) { | 
|  | SkAutoMutexAcquire lock(&gBitmapResultLock); | 
|  | gBitmapResults.push_back(result); | 
|  | } | 
|  |  | 
|  | SkTArray<skiatest::Failure> gFailures; | 
|  | SK_DECLARE_STATIC_MUTEX(gFailureLock); | 
|  |  | 
|  | void JsonWriter::AddTestFailure(const skiatest::Failure& failure) { | 
|  | SkAutoMutexAcquire lock(gFailureLock); | 
|  | gFailures.push_back(failure); | 
|  | } | 
|  |  | 
|  | void JsonWriter::DumpJson() { | 
|  | if (FLAGS_writePath.isEmpty()) { | 
|  | return; | 
|  | } | 
|  |  | 
|  | Json::Value root; | 
|  |  | 
|  | for (int i = 1; i < FLAGS_properties.count(); i += 2) { | 
|  | root[FLAGS_properties[i-1]] = FLAGS_properties[i]; | 
|  | } | 
|  | for (int i = 1; i < FLAGS_key.count(); i += 2) { | 
|  | root["key"][FLAGS_key[i-1]] = FLAGS_key[i]; | 
|  | } | 
|  |  | 
|  | { | 
|  | SkAutoMutexAcquire lock(&gBitmapResultLock); | 
|  | for (int i = 0; i < gBitmapResults.count(); i++) { | 
|  | Json::Value result; | 
|  | result["key"]["name"]        = gBitmapResults[i].name.c_str(); | 
|  | result["key"]["config"]      = gBitmapResults[i].config.c_str(); | 
|  | result["key"]["mode"]        = gBitmapResults[i].mode.c_str(); | 
|  | result["key"]["source_type"] = gBitmapResults[i].sourceType.c_str(); | 
|  | result["md5"]                = gBitmapResults[i].md5.c_str(); | 
|  |  | 
|  | root["results"].append(result); | 
|  | } | 
|  | } | 
|  |  | 
|  | { | 
|  | SkAutoMutexAcquire lock(gFailureLock); | 
|  | for (int i = 0; i < gFailures.count(); i++) { | 
|  | Json::Value result; | 
|  | result["file_name"]     = gFailures[i].fileName; | 
|  | result["line_no"]       = gFailures[i].lineNo; | 
|  | result["condition"]     = gFailures[i].condition; | 
|  | result["message"]       = gFailures[i].message.c_str(); | 
|  |  | 
|  | root["test_results"]["failures"].append(result); | 
|  | } | 
|  | } | 
|  |  | 
|  | SkString path = SkOSPath::Join(FLAGS_writePath[0], "dm.json"); | 
|  | SkFILEWStream stream(path.c_str()); | 
|  | stream.writeText(Json::StyledWriter().write(root).c_str()); | 
|  | stream.flush(); | 
|  | } | 
|  |  | 
|  | } // namespace DM |