OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "Benchmark.h" | 7 #include "Benchmark.h" |
8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
9 #include "SkCommandLineFlags.h" | 9 #include "SkCommandLineFlags.h" |
10 #include "SkPaint.h" | 10 #include "SkPaint.h" |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 "maskopaque");) | 295 "maskopaque");) |
296 DEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, | 296 DEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, |
297 BlitMaskBench::kMaskBlack, | 297 BlitMaskBench::kMaskBlack, |
298 "maskblack");) | 298 "maskblack");) |
299 DEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, | 299 DEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, |
300 BlitMaskBench::kMaskColor, | 300 BlitMaskBench::kMaskColor, |
301 "maskcolor");) | 301 "maskcolor");) |
302 DEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, | 302 DEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode, |
303 BlitMaskBench::KMaskShader, | 303 BlitMaskBench::KMaskShader, |
304 "maskshader");) | 304 "maskshader");) |
305 | |
306 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | |
307 | |
308 typedef int (*RectMathProc)(const SkMatrix&, const SkRect[], const SkIRect[], in
t count); | |
309 | |
310 class RectMathBench : public Benchmark { | |
311 SkString fName; | |
312 SkRandom fRand; | |
313 SkString fSuffix; | |
314 RectMathProc fProc; | |
315 | |
316 public: | |
317 enum { | |
318 N = 300, | |
319 OUTER = 10000, | |
320 }; | |
321 SkRect fRects[N]; | |
322 SkIRect fIRects[N]; | |
323 volatile int fCounter; | |
324 | |
325 RectMathBench(RectMathProc proc, const char* suffix) { | |
326 fProc = proc; | |
327 fSuffix.set(suffix); | |
328 SkRandom rand; | |
329 for (int i = 0; i < N; ++i) { | |
330 fRects[i].setXYWH(rand.nextUScalar1() * 100, rand.nextUScalar1() * 1
00, | |
331 rand.nextUScalar1() * 100, rand.nextUScalar1() * 1
00); | |
332 fIRects[i].setXYWH(i, i, 10, 10); | |
333 } | |
334 } | |
335 | |
336 bool isVisual() override { return false; } | |
337 | |
338 protected: | |
339 const char* onGetName() override { | |
340 fName.printf("rect_math_%s", fSuffix.c_str()); | |
341 return fName.c_str(); | |
342 } | |
343 | |
344 void onDraw(int loops, SkCanvas* canvas) override { | |
345 SkMatrix mat; | |
346 for (int j = 0; j < OUTER; ++j) { | |
347 mat.setScaleTranslate(fRand.nextUScalar1(), fRand.nextUScalar1(), | |
348 fRand.nextUScalar1(), fRand.nextUScalar1()); | |
349 fCounter += fProc(mat, fRects, fIRects, N); | |
350 } | |
351 } | |
352 | |
353 private: | |
354 typedef Benchmark INHERITED; | |
355 }; | |
356 | |
357 static int rectmath0(const SkMatrix& mat, const SkRect rr[], const SkIRect ir[],
int count) { | |
358 int counter = 0; | |
359 for (int i = 0; i < count; ++i) { | |
360 SkRect dst; | |
361 mat.mapRectScaleTranslate(&dst, rr[i]); | |
362 counter += dst.round().contains(ir[i]); | |
363 } | |
364 return counter; | |
365 } | |
366 | |
367 static int rectmath1(const SkMatrix& mat, const SkRect rr[], const SkIRect ir[],
int count) { | |
368 int counter = 0; | |
369 for (int i = 0; i < count; ++i) { | |
370 SkRect dst; | |
371 mat.mapRectScaleTranslate(&dst, rr[i]); | |
372 counter += dst.round2i().contains(ir[i]); | |
373 } | |
374 return counter; | |
375 } | |
376 | |
377 #if 0 | |
378 static bool contains(SkIRect outer, SkIRect inner) { | |
379 Sk4i le(outer.fLeft, outer.fTop, inner.fRight, inner.fBottom); | |
380 Sk4i ge(inner.fLeft, inner.fTop, outer.fRight, outer.fBottom); | |
381 return (le <= ge).allTrue(); | |
382 } | |
383 | |
384 static int rectmath3(const SkMatrix& mat, const SkRect rr[], const SkIRect ir[],
int count) { | |
385 int counter = 0; | |
386 for (int i = 0; i < count; ++i) { | |
387 counter += contains(mat.mapRectScaleTranslate(rr[i]).round2i(), ir[i]); | |
388 } | |
389 return counter; | |
390 } | |
391 #endif | |
392 | |
393 DEF_BENCH(return new RectMathBench(rectmath0, "0");) | |
394 DEF_BENCH(return new RectMathBench(rectmath1, "1");) | |
OLD | NEW |