Chromium Code Reviews| Index: bench/ResultsWriter.h |
| diff --git a/bench/ResultsWriter.h b/bench/ResultsWriter.h |
| index 12c968a5075d42b4c2890b0c540b8b6f3a2f83d7..330da157c556cc132b83fdccf976a1a11e8c9efc 100644 |
| --- a/bench/ResultsWriter.h |
| +++ b/bench/ResultsWriter.h |
| @@ -99,6 +99,22 @@ private: |
| * ... |
| */ |
| class JSONResultsWriter : public ResultsWriter { |
| +private: |
| + Json::Value* find_named_node(Json::Value* root, const char name[]) { |
| + Json::Value* search_results = NULL; |
| + for(Json::Value::iterator iter = root->begin(); |
| + iter!= root->end(); ++iter) { |
| + if(SkString(name).equals((*iter)["name"].asCString())) { |
| + search_results = &(*iter); |
|
jcgregorio
2014/05/19 17:05:12
break; ?
kelvinly
2014/05/19 17:10:46
Ah, my bad.
Would
return &(*iter);
be better/worse
|
| + } |
| + } |
| + |
| + if(search_results != NULL) { |
| + return search_results; |
| + } else { |
| + return &(root->append(Json::Value())); |
| + } |
| + } |
| public: |
| explicit JSONResultsWriter(const char filename[]) |
| : fFilename(filename) |
| @@ -111,11 +127,15 @@ public: |
| fRoot["options"][name] = value; |
| } |
| virtual void bench(const char name[], int32_t x, int32_t y) { |
| - fBench = &fResults[SkStringPrintf( "%s_%d_%d", name, x, y).c_str()]; |
| + const char* full_name = SkStringPrintf( "%s_%d_%d", name, x, y).c_str(); |
| + Json::Value* bench_node = find_named_node(&fResults, full_name); |
| + (*bench_node)["name"] = full_name; |
| + fBench = &(*bench_node)["results"]; |
| } |
| virtual void config(const char name[]) { |
| SkASSERT(NULL != fBench); |
| - fConfig = &(*fBench)[name]; |
| + fConfig = find_named_node(fBench, name); |
| + (*fConfig)["name"] = name; |
| } |
| virtual void timer(const char name[], double ms) { |
| SkASSERT(NULL != fConfig); |