2 * Copyright 2017 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
9 #include "include/core/SkCanvas.h"
10 #include "include/core/SkColor.h"
11 #include "include/core/SkPaint.h"
12 #include "include/core/SkRRect.h"
13 #include "include/core/SkRect.h"
14 #include "include/core/SkScalar.h"
15 #include "include/core/SkSize.h"
16 #include "include/core/SkString.h"
17 #include "include/utils/SkRandom.h"
18 #include "tools/ToolUtils.h"
22 static SkColor gen_color(SkRandom* rand) {
24 hsv[0] = rand->nextRangeF(0.0f, 360.0f);
25 hsv[1] = rand->nextRangeF(0.5f, 1.0f);
26 hsv[2] = rand->nextRangeF(0.5f, 1.0f);
28 return ToolUtils::color_to_565(SkHSVToColor(hsv));
31 class ManyCirclesGM : public GM {
32 // This GM attempts to flood Ganesh with more circles than will fit in a single index buffer
33 // Stresses crbug.com/688582.
36 this->setBGColor(0xFFFFFFFF);
40 static const int kWidth = 800;
41 static const int kHeight = 600;
43 SkString onShortName() override {
44 return SkString("manycircles");
47 SkISize onISize() override {
48 return SkISize::Make(kWidth, kHeight);
51 void onDraw(SkCanvas* canvas) override {
54 paint.setAntiAlias(true);
57 SkScalar x = rand.nextF() * kWidth - 100;
58 SkScalar y = rand.nextF() * kHeight - 100;
59 SkScalar w = rand.nextF() * 200;
60 SkRect circle = SkRect::MakeXYWH(x, y, w, w);
61 paint.setColor(gen_color(&rand));
62 canvas->drawOval(circle, paint);
70 //////////////////////////////////////////////////////////////////////////////
72 class ManyRRectsGM : public GM {
73 // This GM attempts to flood Ganesh with more rrects than will fit in a single index buffer
74 // Stresses crbug.com/684112
77 this->setBGColor(0xFFFFFFFF);
82 SkString onShortName() override {
83 return SkString("manyrrects");
86 SkISize onISize() override {
87 return SkISize::Make(800, 300);
90 void onDraw(SkCanvas* canvas) override {
93 paint.setAntiAlias(true);
94 paint.setColor(SK_ColorBLUE);
97 // Rectangle positioning variables
100 const int kXLimit = 700;
101 const int kYIncrement = 5;
102 const int kXIncrement = 5;
104 SkRect rect = SkRect::MakeLTRB(0, 0, 4, 4);
105 SkRRect rrect = SkRRect::MakeRectXY(rect, 1, 1);
108 canvas->translate(x, y);
109 canvas->drawRRect(rrect, paint);
120 using INHERITED = GM;
123 //////////////////////////////////////////////////////////////////////////////
125 DEF_GM( return new ManyCirclesGM; )
126 DEF_GM( return new ManyRRectsGM; )
128 } // namespace skiagm