Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(386)

Unified Diff: bench/ResultsWriter.h

Issue 488213002: Add --properties for things like gitHash that describe the current nanobench run. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: styled, comments Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | bench/ResultsWriter.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bench/ResultsWriter.h
diff --git a/bench/ResultsWriter.h b/bench/ResultsWriter.h
index dc45f192f5eecfba97ee21d7ca50d044f249313a..56283732ec020f23f39a73d46a2f81d388d96d95 100644
--- a/bench/ResultsWriter.h
+++ b/bench/ResultsWriter.h
@@ -20,148 +20,31 @@
/**
* Base class for writing out the bench results.
*
- * TODO(jcgregorio) Add info if tests fail to converge?
+ * Default implementation does nothing.
*/
class ResultsWriter : SkNoncopyable {
public:
- virtual ~ResultsWriter() {};
+ virtual ~ResultsWriter() {}
- // Records one key value pair that makes up a unique identifier for this run.
- // All keys must be set before calling bench().
- virtual void key(const char name[], const char value[]) = 0;
+ // Record one key value pair that makes up a unique key for this type of run, e.g.
+ // builder name, machine type, Debug/Release, etc.
+ virtual void key(const char name[], const char value[]) {}
- // Records one option set for this run. All options must be set before
- // calling bench().
- virtual void option(const char name[], const char value[]) = 0;
+ // Record one key value pair that describes the run instance, e.g. git hash, build number.
+ virtual void property(const char name[], const char value[]) {}
- // Denotes the start of a specific benchmark. Once bench is called,
+ // Denote the start of a specific benchmark. Once bench is called,
// then config and timer can be called multiple times to record runs.
- virtual void bench(const char name[], int32_t x, int32_t y) = 0;
+ virtual void bench(const char name[], int32_t x, int32_t y) {}
- // Records the specific configuration a bench is run under, such as "8888".
- virtual void config(const char name[]) = 0;
+ // Record the specific configuration a bench is run under, such as "8888".
+ virtual void config(const char name[]) {}
- // Records the options for a configuration, such as "GL_RENDERER".
- virtual void configOption(const char name[], const char* value) = 0;
+ // Record the options for a configuration, such as "GL_RENDERER".
+ virtual void configOption(const char name[], const char* value) {}
- // Records a single test metric.
- virtual void timer(const char name[], double ms) = 0;
-
- // Call when all results are finished.
- virtual void end() = 0;
-};
-
-/**
- * This ResultsWriter handles writing out the human readable format of the
- * bench results.
- */
-class LoggerResultsWriter : public ResultsWriter {
-public:
- explicit LoggerResultsWriter(BenchLogger& logger, const char* timeFormat)
- : fLogger(logger)
- , fTimeFormat(timeFormat) {
- fLogger.logProgress("skia bench:");
- }
- virtual void key(const char name[], const char value[]) {
- // Don't log keys to keep microbench output unchanged.
- }
- virtual void option(const char name[], const char value[]) {
- fLogger.logProgress(SkStringPrintf(" %s=%s", name, value));
- }
- virtual void bench(const char name[], int32_t x, int32_t y) {
- fLogger.logProgress(SkStringPrintf(
- "\nrunning bench [%3d %3d] %40s", x, y, name));
- }
- virtual void config(const char name[]) {
- fLogger.logProgress(SkStringPrintf(" %s:", name));
- }
- virtual void configOption(const char name[], const char* value) {
- // Don't log configOptions to keep microbench output unchanged.
- }
- virtual void timer(const char name[], double ms) {
- fLogger.logProgress(SkStringPrintf(" %s = ", name));
- fLogger.logProgress(SkStringPrintf(fTimeFormat, ms));
- }
- virtual void end() {
- fLogger.logProgress("\n");
- }
-private:
- BenchLogger& fLogger;
- const char* fTimeFormat;
-};
-
-/**
- * This ResultsWriter handles writing out the results in JSON.
- *
- * The output looks like (except compressed to a single line):
- *
- * {
- * "options" : {
- * "alpha" : "0xFF",
- * "scale" : "0",
- * ...
- * "system" : "UNIX"
- * },
- * "results" : [
- * {
- * "name" : "Xfermode_Luminosity_640_480",
- * "results" : [
- * {
- * "name": "565",
- * "cmsecs" : 143.188128906250,
- * "msecs" : 143.835957031250
- * },
- * ...
- */
-
-Json::Value* SkFindNamedNode(Json::Value* root, const char name[]);
-Json::Value SkMakeBuilderJSON(const SkString &buildername);
-
-class JSONResultsWriter : public ResultsWriter {
-public:
- explicit JSONResultsWriter(const char filename[])
- : fFilename(filename)
- , fRoot()
- , fResults(fRoot["results"])
- , fBench(NULL)
- , fConfig(NULL) {
- }
- virtual void key(const char name[], const char value[]) {
- }
- virtual void option(const char name[], const char value[]) {
- fRoot["options"][name] = value;
- }
- virtual void bench(const char name[], int32_t x, int32_t y) {
- SkString sk_name(name);
- sk_name.append("_");
- sk_name.appendS32(x);
- sk_name.append("_");
- sk_name.appendS32(y);
- Json::Value* bench_node = SkFindNamedNode(&fResults, sk_name.c_str());
- fBench = &(*bench_node)["results"];
- }
- virtual void config(const char name[]) {
- SkASSERT(NULL != fBench);
- fConfig = SkFindNamedNode(fBench, name);
- }
- virtual void configOption(const char name[], const char* value) {
- }
- virtual void timer(const char name[], double ms) {
- SkASSERT(NULL != fConfig);
- (*fConfig)[name] = ms;
- }
- virtual void end() {
- SkFILEWStream stream(fFilename.c_str());
- stream.writeText(Json::FastWriter().write(fRoot).c_str());
- stream.flush();
- }
-private:
-
- SkString fFilename;
- Json::Value fRoot;
- Json::Value& fResults;
- Json::Value* fBench;
- Json::Value* fConfig;
+ // Record a single test metric.
+ virtual void timer(const char name[], double ms) {}
};
/**
@@ -175,11 +58,8 @@ private:
"os": "Android",
"model": "GalaxyNexus",
}
- "options": {
- "GL_Version": "3.1",
- ...
- },
"gitHash": "d1830323662ae8ae06908b97f15180fd25808894",
+ "build_number": "1234",
"results" : {
"Xfermode_Luminosity_640_480" : {
"8888" : {
@@ -191,19 +71,26 @@ private:
*/
class NanoJSONResultsWriter : public ResultsWriter {
public:
- explicit NanoJSONResultsWriter(const char filename[], const char gitHash[])
+ explicit NanoJSONResultsWriter(const char filename[])
: fFilename(filename)
, fRoot()
, fResults(fRoot["results"])
, fBench(NULL)
- , fConfig(NULL) {
- fRoot["gitHash"] = gitHash;
+ , fConfig(NULL) {}
+
+ ~NanoJSONResultsWriter() {
+ SkFILEWStream stream(fFilename.c_str());
+ stream.writeText(Json::StyledWriter().write(fRoot).c_str());
+ stream.flush();
}
+
+ // Added under "key".
virtual void key(const char name[], const char value[]) {
fRoot["key"][name] = value;
}
- virtual void option(const char name[], const char value[]) {
- fRoot["options"][name] = value;
+ // Inserted directly into the root.
+ virtual void property(const char name[], const char value[]) {
+ fRoot[name] = value;
}
virtual void bench(const char name[], int32_t x, int32_t y) {
SkString id = SkStringPrintf( "%s_%d_%d", name, x, y);
@@ -225,13 +112,8 @@ public:
SkASSERT(NULL != fConfig);
(*fConfig)[name] = ms;
}
- virtual void end() {
- SkFILEWStream stream(fFilename.c_str());
- stream.writeText(Json::FastWriter().write(fRoot).c_str());
- stream.flush();
- }
-private:
+private:
SkString fFilename;
Json::Value fRoot;
Json::Value& fResults;
@@ -240,64 +122,4 @@ private:
};
-/**
- * This ResultsWriter writes out to multiple ResultsWriters.
- */
-class MultiResultsWriter : public ResultsWriter {
-public:
- MultiResultsWriter() : writers() {
- };
- void add(ResultsWriter* writer) {
- writers.push_back(writer);
- }
- virtual void key(const char name[], const char value[]) {
- for (int i = 0; i < writers.count(); ++i) {
- writers[i]->key(name, value);
- }
- }
- virtual void option(const char name[], const char value[]) {
- for (int i = 0; i < writers.count(); ++i) {
- writers[i]->option(name, value);
- }
- }
- virtual void bench(const char name[], int32_t x, int32_t y) {
- for (int i = 0; i < writers.count(); ++i) {
- writers[i]->bench(name, x, y);
- }
- }
- virtual void config(const char name[]) {
- for (int i = 0; i < writers.count(); ++i) {
- writers[i]->config(name);
- }
- }
- virtual void configOption(const char name[], const char* value) {
- for (int i = 0; i < writers.count(); ++i) {
- writers[i]->configOption(name, value);
- }
- }
- virtual void timer(const char name[], double ms) {
- for (int i = 0; i < writers.count(); ++i) {
- writers[i]->timer(name, ms);
- }
- }
- virtual void end() {
- for (int i = 0; i < writers.count(); ++i) {
- writers[i]->end();
- }
- }
-private:
- SkTArray<ResultsWriter *> writers;
-};
-
-/**
- * Calls the end() method of T on destruction.
- */
-template <typename T> class CallEnd : SkNoncopyable {
-public:
- CallEnd(T& obj) : fObj(obj) {}
- ~CallEnd() { fObj.end(); }
-private:
- T& fObj;
-};
-
#endif
« no previous file with comments | « no previous file | bench/ResultsWriter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698