| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 #include "SkBenchmark.h" | 7 #include "SkBenchmark.h" |
| 8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
| 9 #include "SkColor.h" | 9 #include "SkColor.h" |
| 10 #include "SkPaint.h" | 10 #include "SkPaint.h" |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 canvas->drawPaint(paint); | 150 canvas->drawPaint(paint); |
| 151 } | 151 } |
| 152 } | 152 } |
| 153 | 153 |
| 154 private: | 154 private: |
| 155 typedef PictureRecordBench INHERITED; | 155 typedef PictureRecordBench INHERITED; |
| 156 }; | 156 }; |
| 157 | 157 |
| 158 /* | 158 /* |
| 159 * Populates the SkPaint dictionary with a number of unique paint | 159 * Populates the SkPaint dictionary with a number of unique paint |
| 160 * objects that get reused repeatedly | 160 * objects that get reused repeatedly. |
| 161 * |
| 162 * Re-creating the paint objects in the inner loop slows the benchmark down 10%
. |
| 163 * Using setColor(i % objCount) instead of a random color creates a very high r
ate |
| 164 * of hash conflicts, slowing us down 12%. |
| 161 */ | 165 */ |
| 162 class RecurringPaintDictionaryRecordBench : public PictureRecordBench { | 166 class RecurringPaintDictionaryRecordBench : public PictureRecordBench { |
| 163 public: | 167 public: |
| 164 RecurringPaintDictionaryRecordBench(void* param) | 168 RecurringPaintDictionaryRecordBench(void* param) |
| 165 : INHERITED(param, "recurring_paint_dictionary") { } | 169 : INHERITED(param, "recurring_paint_dictionary") { |
| 170 SkRandom rand; |
| 171 for (int i = 0; i < ObjCount; i++) { |
| 172 fPaint[i].setColor(rand.nextU()); |
| 173 } |
| 174 } |
| 166 | 175 |
| 167 enum { | 176 enum { |
| 168 ObjCount = 100, // number of unique paint objects | 177 ObjCount = 100, // number of unique paint objects |
| 169 M = SkBENCHLOOP(50000), // number of draw iterations | 178 M = SkBENCHLOOP(50000), // number of draw iterations |
| 170 }; | 179 }; |
| 171 protected: | 180 protected: |
| 172 virtual float innerLoopScale() const SK_OVERRIDE { return 0.1f; } | 181 virtual float innerLoopScale() const SK_OVERRIDE { return 0.1f; } |
| 173 virtual void recordCanvas(SkCanvas* canvas) { | 182 virtual void recordCanvas(SkCanvas* canvas) { |
| 174 | 183 |
| 175 for (int i = 0; i < M; i++) { | 184 for (int i = 0; i < M; i++) { |
| 176 SkPaint paint; | 185 canvas->drawPaint(fPaint[i % ObjCount]); |
| 177 paint.setColor(i % ObjCount); | |
| 178 canvas->drawPaint(paint); | |
| 179 } | 186 } |
| 180 } | 187 } |
| 181 | 188 |
| 182 private: | 189 private: |
| 190 SkPaint fPaint [ObjCount]; |
| 183 typedef PictureRecordBench INHERITED; | 191 typedef PictureRecordBench INHERITED; |
| 184 }; | 192 }; |
| 185 | 193 |
| 186 /////////////////////////////////////////////////////////////////////////////// | 194 /////////////////////////////////////////////////////////////////////////////// |
| 187 | 195 |
| 188 static SkBenchmark* Fact0(void* p) { return new DictionaryRecordBench(p); } | 196 static SkBenchmark* Fact0(void* p) { return new DictionaryRecordBench(p); } |
| 189 static SkBenchmark* Fact1(void* p) { return new UniquePaintDictionaryRecordBench
(p); } | 197 static SkBenchmark* Fact1(void* p) { return new UniquePaintDictionaryRecordBench
(p); } |
| 190 static SkBenchmark* Fact2(void* p) { return new RecurringPaintDictionaryRecordBe
nch(p); } | 198 static SkBenchmark* Fact2(void* p) { return new RecurringPaintDictionaryRecordBe
nch(p); } |
| 191 | 199 |
| 192 static BenchRegistry gReg0(Fact0); | 200 static BenchRegistry gReg0(Fact0); |
| 193 static BenchRegistry gReg1(Fact1); | 201 static BenchRegistry gReg1(Fact1); |
| 194 static BenchRegistry gReg2(Fact2); | 202 static BenchRegistry gReg2(Fact2); |
| OLD | NEW |