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 
14 namespace DM {
15 
16 /**
17  *  Class for collecting results from DM and writing to a json file.
18  *  All methods are thread-safe.
19  */
20 class JsonWriter {
21 public:
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     };
33 
34     /**
35      *  Add a result to the end of the list of results.
36      */
37     static void AddBitmapResult(const BitmapResult&);
38 
39     /**
40      *  Add a Failure from a Test.
41      */
42     static void AddTestFailure(const skiatest::Failure&);
43 
44     /**
45      *  Write all collected results to the file FLAGS_writePath[0]/dm.json.
46      */
47     static void DumpJson();
48 
49     /**
50      * Read JSON file at path written by DumpJson, calling callback for each
51      * BitmapResult recorded in the file.  Return success.
52      */
53     static bool ReadJson(const char* path, void(*callback)(BitmapResult));
54 };
55 
56 
57 } // namespace DM
58 #endif // DMJsonWriter_DEFINED
59