FSRectBench.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * Copyright 2013 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #include "bench/Benchmark.h"
  8. #include "include/core/SkCanvas.h"
  9. #include "include/core/SkPaint.h"
  10. #include "include/utils/SkRandom.h"
  11. /**
  12. * Draws full screen opaque rectangles. It is designed to test any optimizations in the GPU backend
  13. * to turn such draws into clears.
  14. */
  15. class FSRectBench : public Benchmark {
  16. public:
  17. FSRectBench() : fInit(false) { }
  18. protected:
  19. const char* onGetName() override { return "fullscreen_rects"; }
  20. void onDelayedSetup() override {
  21. if (!fInit) {
  22. SkRandom rand;
  23. static const SkScalar kMinOffset = 0;
  24. static const SkScalar kMaxOffset = 100 * SK_Scalar1;
  25. static const SkScalar kOffsetRange = kMaxOffset - kMinOffset;
  26. for (int i = 0; i < N; ++i) {
  27. fRects[i].fLeft = -kMinOffset - rand.nextUScalar1() * kOffsetRange;
  28. fRects[i].fTop = -kMinOffset - rand.nextUScalar1() * kOffsetRange;
  29. fRects[i].fRight = W + kMinOffset + rand.nextUScalar1() * kOffsetRange;
  30. fRects[i].fBottom = H + kMinOffset + rand.nextUScalar1() * kOffsetRange;
  31. fColors[i] = rand.nextU() | 0xFF000000;
  32. }
  33. fInit = true;
  34. }
  35. }
  36. void onDraw(int loops, SkCanvas* canvas) override {
  37. SkPaint paint;
  38. for (int i = 0; i < loops; ++i) {
  39. paint.setColor(fColors[i % N]);
  40. canvas->drawRect(fRects[i % N], paint);
  41. }
  42. }
  43. private:
  44. enum {
  45. W = 640,
  46. H = 480,
  47. N = 300,
  48. };
  49. SkRect fRects[N];
  50. SkColor fColors[N];
  51. bool fInit;
  52. typedef Benchmark INHERITED;
  53. };
  54. DEF_BENCH(return new FSRectBench();)