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

Unified Diff: bench/nanobench.cpp

Issue 559153002: Measure picture recording speed in nanobench. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 3 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 | « bench/RecordingBench.cpp ('k') | gyp/bench.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bench/nanobench.cpp
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index 853492b3e05250b65aaca716dec5bf371c352ecd..67646c266770adccafd78800b98850dd8f19ff97 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -12,6 +12,7 @@
#include "GMBench.h"
#include "ProcStats.h"
#include "ResultsWriter.h"
+#include "RecordingBench.h"
#include "SKPBench.h"
#include "Stats.h"
#include "Timer.h"
@@ -407,6 +408,7 @@ class BenchmarkStream {
public:
BenchmarkStream() : fBenches(BenchRegistry::Head())
, fGMs(skiagm::GMRegistry::Head())
+ , fCurrentRecording(0)
, fCurrentScale(0)
, fCurrentSKP(0) {
for (int i = 0; i < FLAGS_skps.count(); i++) {
@@ -435,11 +437,33 @@ public:
}
}
+ static bool ReadPicture(const char* path, SkAutoTUnref<SkPicture>* pic) {
+ // Not strictly necessary, as it will be checked again later,
+ // but helps to avoid a lot of pointless work if we're going to skip it.
+ if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path)) {
+ return false;
+ }
+
+ SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
+ if (stream.get() == NULL) {
+ SkDebugf("Could not read %s.\n", path);
+ return false;
+ }
+
+ pic->reset(SkPicture::CreateFromStream(stream.get()));
+ if (pic->get() == NULL) {
+ SkDebugf("Could not read %s as an SkPicture.\n", path);
+ return false;
+ }
+ return true;
+ }
+
Benchmark* next() {
if (fBenches) {
Benchmark* bench = fBenches->factory()(NULL);
fBenches = fBenches->next();
fSourceType = "bench";
+ fBenchType = "micro";
return bench;
}
@@ -448,34 +472,32 @@ public:
fGMs = fGMs->next();
if (gm->getFlags() & skiagm::GM::kAsBench_Flag) {
fSourceType = "gm";
+ fBenchType = "micro";
return SkNEW_ARGS(GMBench, (gm.detach()));
}
}
+ // First add all .skps as RecordingBenches.
+ while (fCurrentRecording < fSKPs.count()) {
+ const SkString& path = fSKPs[fCurrentRecording++];
+ SkAutoTUnref<SkPicture> pic;
+ if (!ReadPicture(path.c_str(), &pic)) {
+ continue;
+ }
+ SkString name = SkOSPath::Basename(path.c_str());
+ fSourceType = "skp";
+ fBenchType = "recording";
+ return SkNEW_ARGS(RecordingBench, (name.c_str(), pic.get(), FLAGS_bbh));
+ }
+
+ // Then once each for each scale as SKPBenches (playback).
while (fCurrentScale < fScales.count()) {
while (fCurrentSKP < fSKPs.count()) {
const SkString& path = fSKPs[fCurrentSKP++];
-
- // Not strictly necessary, as it will be checked again later,
- // but helps to avoid a lot of pointless work if we're going to skip it.
- if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path.c_str())) {
+ SkAutoTUnref<SkPicture> pic;
+ if (!ReadPicture(path.c_str(), &pic)) {
continue;
}
-
- SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path.c_str()));
- if (stream.get() == NULL) {
- SkDebugf("Could not read %s.\n", path.c_str());
- exit(1);
- }
-
- SkAutoTUnref<SkPicture> pic(SkPicture::CreateFromStream(stream.get()));
- if (pic.get() == NULL) {
- SkDebugf("Could not read %s as an SkPicture.\n", path.c_str());
- exit(1);
- }
-
- SkString name = SkOSPath::Basename(path.c_str());
-
if (FLAGS_bbh) {
// The SKP we read off disk doesn't have a BBH. Re-record so it grows one.
// Here we use an SkTileGrid with parameters optimized for FLAGS_clip.
@@ -491,8 +513,9 @@ public:
&factory));
pic.reset(recorder.endRecording());
}
-
+ SkString name = SkOSPath::Basename(path.c_str());
fSourceType = "skp";
+ fBenchType = "playback";
return SkNEW_ARGS(SKPBench,
(name.c_str(), pic.get(), fClip, fScales[fCurrentScale]));
}
@@ -505,6 +528,7 @@ public:
void fillCurrentOptions(ResultsWriter* log) const {
log->configOption("source_type", fSourceType);
+ log->configOption("bench_type", fBenchType);
if (0 == strcmp(fSourceType, "skp")) {
log->configOption("clip",
SkStringPrintf("%d %d %d %d", fClip.fLeft, fClip.fTop,
@@ -520,7 +544,9 @@ private:
SkTArray<SkScalar> fScales;
SkTArray<SkString> fSKPs;
- const char* fSourceType;
+ const char* fSourceType; // What we're benching: bench, GM, SKP, ...
+ const char* fBenchType; // How we bench it: micro, recording, playback, ...
+ int fCurrentRecording;
int fCurrentScale;
int fCurrentSKP;
};
« no previous file with comments | « bench/RecordingBench.cpp ('k') | gyp/bench.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698