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#ifndef DMJsonWriter_DEFINED
9#define DMJsonWriter_DEFINED
10
11#include "SkString.h"
12#include "Test.h"
13
14namespace DM {
15
16/**
17 *  Class for collecting results from DM and writing to a json file.
18 *  All methods are thread-safe.
19 */
20class JsonWriter {
21public:
22    /**
23     *  Info describing a single run.
24     */
25    struct BitmapResult {
26        SkString name;            // E.g. "ninepatch-stretch", "desk_gws.skp"
27        SkString config;          //      "gpu", "8888", "serialize", "pipe"
28        SkString sourceType;      //      "gm", "skp", "image"
29        SkString sourceOptions;   //      "image", "codec", "subset", "scanline"
30        SkString md5;             // In ASCII, so 32 bytes long.
31        SkString ext;             // Extension of file we wrote: "png", "pdf", ...
32        bool gammaCorrect;        // Old configs are not gamma correct, some new ones are.
33    };
34
35    /**
36     *  Add a result to the end of the list of results.
37     */
38    static void AddBitmapResult(const BitmapResult&);
39
40    /**
41     *  Add a Failure from a Test.
42     */
43    static void AddTestFailure(const skiatest::Failure&);
44
45    /**
46     *  Write all collected results to the file FLAGS_writePath[0]/dm.json.
47     */
48    static void DumpJson();
49
50    /**
51     * Read JSON file at path written by DumpJson, calling callback for each
52     * BitmapResult recorded in the file.  Return success.
53     */
54    static bool ReadJson(const char* path, void(*callback)(BitmapResult));
55};
56
57
58} // namespace DM
59#endif // DMJsonWriter_DEFINED
60