OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 * | 6 * |
7 */ | 7 */ |
8 | 8 |
9 #include <VisualBench/VisualBenchmarkStream.h> | 9 #include <VisualBench/VisualBenchmarkStream.h> |
10 #include "CpuWrappedBenchmark.h" | 10 #include "CpuWrappedBenchmark.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 if (SkStrEndsWith(FLAGS_skps[i], ".skp")) { | 67 if (SkStrEndsWith(FLAGS_skps[i], ".skp")) { |
68 fSKPs.push_back() = FLAGS_skps[i]; | 68 fSKPs.push_back() = FLAGS_skps[i]; |
69 } else { | 69 } else { |
70 SkOSFile::Iter it(FLAGS_skps[i], ".skp"); | 70 SkOSFile::Iter it(FLAGS_skps[i], ".skp"); |
71 SkString path; | 71 SkString path; |
72 while (it.next(&path)) { | 72 while (it.next(&path)) { |
73 fSKPs.push_back() = SkOSPath::Join(FLAGS_skps[0], path.c_str()); | 73 fSKPs.push_back() = SkOSPath::Join(FLAGS_skps[0], path.c_str()); |
74 } | 74 } |
75 } | 75 } |
76 } | 76 } |
77 | |
78 // seed with an initial benchmark | |
79 this->next(); | |
80 } | 77 } |
81 | 78 |
82 bool VisualBenchmarkStream::ReadPicture(const char* path, SkAutoTUnref<SkPicture
>* pic) { | 79 bool VisualBenchmarkStream::ReadPicture(const char* path, SkAutoTUnref<SkPicture
>* pic) { |
83 // Not strictly necessary, as it will be checked again later, | 80 // Not strictly necessary, as it will be checked again later, |
84 // but helps to avoid a lot of pointless work if we're going to skip it. | 81 // but helps to avoid a lot of pointless work if we're going to skip it. |
85 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path)) { | 82 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, path)) { |
86 return false; | 83 return false; |
87 } | 84 } |
88 | 85 |
89 SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(path)); | 86 SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(path)); |
90 if (stream.get() == nullptr) { | 87 if (stream.get() == nullptr) { |
91 SkDebugf("Could not read %s.\n", path); | 88 SkDebugf("Could not read %s.\n", path); |
92 return false; | 89 return false; |
93 } | 90 } |
94 | 91 |
95 pic->reset(SkPicture::CreateFromStream(stream.get())); | 92 pic->reset(SkPicture::CreateFromStream(stream.get())); |
96 if (pic->get() == nullptr) { | 93 if (pic->get() == nullptr) { |
97 SkDebugf("Could not read %s as an SkPicture.\n", path); | 94 SkDebugf("Could not read %s as an SkPicture.\n", path); |
98 return false; | 95 return false; |
99 } | 96 } |
100 return true; | 97 return true; |
101 } | 98 } |
102 | 99 |
103 Benchmark* VisualBenchmarkStream::next() { | 100 Benchmark* VisualBenchmarkStream::next() { |
104 Benchmark* bench; | |
105 if (!fIsWarmedUp) { | 101 if (!fIsWarmedUp) { |
106 fIsWarmedUp = true; | 102 fIsWarmedUp = true; |
107 bench = new WarmupBench; | 103 return new WarmupBench; |
108 } else { | |
109 // skips non matching benches | |
110 while ((bench = this->innerNext()) && | |
111 (SkCommandLineFlags::ShouldSkip(FLAGS_match, bench->getUniqueName
()) || | |
112 !bench->isSuitableFor(Benchmark::kGPU_Backend))) { | |
113 bench->unref(); | |
114 } | |
115 } | |
116 if (bench && FLAGS_cpu) { | |
117 bench = new CpuWrappedBenchmark(bench); | |
118 } | 104 } |
119 | 105 |
120 fBenchmark.reset(bench); | 106 Benchmark* bench; |
121 return fBenchmark; | 107 |
| 108 // skips non matching benches |
| 109 while ((bench = this->innerNext()) && |
| 110 (SkCommandLineFlags::ShouldSkip(FLAGS_match, bench->getUniqueName())
|| |
| 111 !bench->isSuitableFor(Benchmark::kGPU_Backend))) { |
| 112 bench->unref(); |
| 113 } |
| 114 if (FLAGS_cpu) { |
| 115 return new CpuWrappedBenchmark(bench); |
| 116 } |
| 117 return bench; |
122 } | 118 } |
123 | 119 |
124 Benchmark* VisualBenchmarkStream::innerNext() { | 120 Benchmark* VisualBenchmarkStream::innerNext() { |
125 while (fBenches) { | 121 while (fBenches) { |
126 Benchmark* bench = fBenches->factory()(nullptr); | 122 Benchmark* bench = fBenches->factory()(nullptr); |
127 fBenches = fBenches->next(); | 123 fBenches = fBenches->next(); |
128 if (bench->isVisual()) { | 124 if (bench->isVisual()) { |
129 fSourceType = "bench"; | 125 fSourceType = "bench"; |
130 fBenchType = "micro"; | 126 fBenchType = "micro"; |
131 return bench; | 127 return bench; |
(...skipping 20 matching lines...) Expand all Loading... |
152 } | 148 } |
153 | 149 |
154 SkString name = SkOSPath::Basename(path.c_str()); | 150 SkString name = SkOSPath::Basename(path.c_str()); |
155 fSourceType = "skp"; | 151 fSourceType = "skp"; |
156 fBenchType = "playback"; | 152 fBenchType = "playback"; |
157 return new VisualSKPBench(name.c_str(), pic.get()); | 153 return new VisualSKPBench(name.c_str(), pic.get()); |
158 } | 154 } |
159 | 155 |
160 return nullptr; | 156 return nullptr; |
161 } | 157 } |
OLD | NEW |