From 7a10fb6bead0f63623307a7ff71b1dd323534a7f Mon Sep 17 00:00:00 2001 From: scroggo Date: Tue, 4 Nov 2014 07:21:10 -0800 Subject: Separate JSON functions from DMWriteTask. Add JsonWriter, which handles Json output from DM, in preparation for adding json output for tests. This change should not affect behavior. BUG=skia:2454 Review URL: https://codereview.chromium.org/702513003 --- dm/DMJsonWriter.cpp | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 dm/DMJsonWriter.cpp (limited to 'dm/DMJsonWriter.cpp') diff --git a/dm/DMJsonWriter.cpp b/dm/DMJsonWriter.cpp new file mode 100644 index 0000000000..f86264715b --- /dev/null +++ b/dm/DMJsonWriter.cpp @@ -0,0 +1,61 @@ +/* + * 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 gBitmapResults; +SK_DECLARE_STATIC_MUTEX(gBitmapResultLock); + +void JsonWriter::AddBitmapResult(const BitmapResult& result) { + SkAutoMutexAcquire lock(&gBitmapResultLock); + gBitmapResults.push_back(result); +} + +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["options"]["source_type"] = gBitmapResults[i].sourceType.c_str(); + result["md5"] = gBitmapResults[i].md5.c_str(); + + root["results"].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 -- cgit v1.2.3