1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2014 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#ifndef DMJsonWriter_DEFINED
9cb93a386Sopenharmony_ci#define DMJsonWriter_DEFINED
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci#include "include/core/SkString.h"
12cb93a386Sopenharmony_ci#include "tools/flags/CommandLineFlags.h"
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_cinamespace DM {
15cb93a386Sopenharmony_ci
16cb93a386Sopenharmony_ci/**
17cb93a386Sopenharmony_ci *  Class for collecting results from DM and writing to a json file.
18cb93a386Sopenharmony_ci *  All methods are thread-safe.
19cb93a386Sopenharmony_ci */
20cb93a386Sopenharmony_ciclass JsonWriter {
21cb93a386Sopenharmony_cipublic:
22cb93a386Sopenharmony_ci    /**
23cb93a386Sopenharmony_ci     *  Info describing a single run.
24cb93a386Sopenharmony_ci     */
25cb93a386Sopenharmony_ci    struct BitmapResult {
26cb93a386Sopenharmony_ci        SkString name;            // E.g. "ninepatch-stretch", "desk_gws.skp"
27cb93a386Sopenharmony_ci        SkString config;          //      "gpu", "8888", "serialize", "pipe"
28cb93a386Sopenharmony_ci        SkString sourceType;      //      "gm", "skp", "image"
29cb93a386Sopenharmony_ci        SkString sourceOptions;   //      "image", "codec", "subset", "scanline"
30cb93a386Sopenharmony_ci        SkString md5;             // In ASCII, so 32 bytes long.
31cb93a386Sopenharmony_ci        SkString ext;             // Extension of file we wrote: "png", "pdf", ...
32cb93a386Sopenharmony_ci        SkString gamut;
33cb93a386Sopenharmony_ci        SkString transferFn;
34cb93a386Sopenharmony_ci        SkString colorType;
35cb93a386Sopenharmony_ci        SkString alphaType;
36cb93a386Sopenharmony_ci        SkString colorDepth;
37cb93a386Sopenharmony_ci    };
38cb93a386Sopenharmony_ci
39cb93a386Sopenharmony_ci    /**
40cb93a386Sopenharmony_ci     *  Add a result to the end of the list of results.
41cb93a386Sopenharmony_ci     */
42cb93a386Sopenharmony_ci    static void AddBitmapResult(const BitmapResult&);
43cb93a386Sopenharmony_ci
44cb93a386Sopenharmony_ci    /**
45cb93a386Sopenharmony_ci     *  Write all collected results to the file dir/dm.json.
46cb93a386Sopenharmony_ci     */
47cb93a386Sopenharmony_ci    static void DumpJson(const char* dir,
48cb93a386Sopenharmony_ci                         CommandLineFlags::StringArray key,
49cb93a386Sopenharmony_ci                         CommandLineFlags::StringArray properties);
50cb93a386Sopenharmony_ci
51cb93a386Sopenharmony_ci    /**
52cb93a386Sopenharmony_ci     * Read JSON file at path written by DumpJson, calling callback for each
53cb93a386Sopenharmony_ci     * BitmapResult recorded in the file.  Return success.
54cb93a386Sopenharmony_ci     */
55cb93a386Sopenharmony_ci    static bool ReadJson(const char* path, void(*callback)(BitmapResult));
56cb93a386Sopenharmony_ci};
57cb93a386Sopenharmony_ci
58cb93a386Sopenharmony_ci
59cb93a386Sopenharmony_ci} // namespace DM
60cb93a386Sopenharmony_ci#endif // DMJsonWriter_DEFINED
61