DMJsonWriter.cpp revision 748ca3bf2d170708f263693e8579e6722389d0ef
1/* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "DMJsonWriter.h" 9 10#include "SkCommonFlags.h" 11#include "SkJSONCPP.h" 12#include "SkOSFile.h" 13#include "SkStream.h" 14#include "SkTArray.h" 15#include "SkThread.h" 16 17namespace DM { 18 19SkTArray<JsonWriter::BitmapResult> gBitmapResults; 20SK_DECLARE_STATIC_MUTEX(gBitmapResultLock); 21 22void JsonWriter::AddBitmapResult(const BitmapResult& result) { 23 SkAutoMutexAcquire lock(&gBitmapResultLock); 24 gBitmapResults.push_back(result); 25} 26 27SkTArray<skiatest::Failure> gFailures; 28SK_DECLARE_STATIC_MUTEX(gFailureLock); 29 30void JsonWriter::AddTestFailure(const skiatest::Failure& failure) { 31 SkAutoMutexAcquire lock(gFailureLock); 32 gFailures.push_back(failure); 33} 34 35void JsonWriter::DumpJson() { 36 if (FLAGS_writePath.isEmpty()) { 37 return; 38 } 39 40 Json::Value root; 41 42 for (int i = 1; i < FLAGS_properties.count(); i += 2) { 43 root[FLAGS_properties[i-1]] = FLAGS_properties[i]; 44 } 45 for (int i = 1; i < FLAGS_key.count(); i += 2) { 46 root["key"][FLAGS_key[i-1]] = FLAGS_key[i]; 47 } 48 49 { 50 SkAutoMutexAcquire lock(&gBitmapResultLock); 51 for (int i = 0; i < gBitmapResults.count(); i++) { 52 Json::Value result; 53 result["key"]["name"] = gBitmapResults[i].name.c_str(); 54 result["key"]["config"] = gBitmapResults[i].config.c_str(); 55 result["key"]["source_type"] = gBitmapResults[i].sourceType.c_str(); 56 result["ext"] = gBitmapResults[i].ext.c_str(); 57 result["md5"] = gBitmapResults[i].md5.c_str(); 58 59 root["results"].append(result); 60 } 61 } 62 63 { 64 SkAutoMutexAcquire lock(gFailureLock); 65 for (int i = 0; i < gFailures.count(); i++) { 66 Json::Value result; 67 result["file_name"] = gFailures[i].fileName; 68 result["line_no"] = gFailures[i].lineNo; 69 result["condition"] = gFailures[i].condition; 70 result["message"] = gFailures[i].message.c_str(); 71 72 root["test_results"]["failures"].append(result); 73 } 74 } 75 76 SkString path = SkOSPath::Join(FLAGS_writePath[0], "dm.json"); 77 SkFILEWStream stream(path.c_str()); 78 stream.writeText(Json::StyledWriter().write(root).c_str()); 79 stream.flush(); 80} 81 82} // namespace DM 83