Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(223)

Side by Side Diff: bench/XfermodeBench.cpp

Issue 1832223002: switch xfermodes over to sk_sp (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2013 Google Inc. 3 * Copyright 2013 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "Benchmark.h" 9 #include "Benchmark.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
11 #include "SkPaint.h" 11 #include "SkPaint.h"
12 #include "SkRandom.h" 12 #include "SkRandom.h"
13 #include "SkString.h" 13 #include "SkString.h"
14 #include "SkXfermode.h" 14 #include "SkXfermode.h"
15 15
16 // Benchmark that draws non-AA rects or AA text with an SkXfermode::Mode. 16 // Benchmark that draws non-AA rects or AA text with an SkXfermode::Mode.
17 class XfermodeBench : public Benchmark { 17 class XfermodeBench : public Benchmark {
18 public: 18 public:
19 XfermodeBench(SkXfermode::Mode mode, bool aa) { 19 XfermodeBench(SkXfermode::Mode mode, bool aa) {
20 fXfermode.reset(SkXfermode::Create(mode)); 20 fXfermode = SkXfermode::Make(mode);
21 fAA = aa; 21 fAA = aa;
22 SkASSERT(fXfermode.get() || SkXfermode::kSrcOver_Mode == mode); 22 SkASSERT(fXfermode.get() || SkXfermode::kSrcOver_Mode == mode);
23 fName.printf("Xfermode_%s%s", SkXfermode::ModeName(mode), aa ? "_aa" : " "); 23 fName.printf("Xfermode_%s%s", SkXfermode::ModeName(mode), aa ? "_aa" : " ");
24 } 24 }
25 25
26 XfermodeBench(SkXfermode* xferMode, const char* name, bool aa) { 26 XfermodeBench(SkXfermode* xferMode, const char* name, bool aa) {
27 SkASSERT(xferMode); 27 SkASSERT(xferMode);
28 fXfermode.reset(xferMode); 28 fXfermode.reset(xferMode);
29 fAA = aa; 29 fAA = aa;
30 fName.printf("Xfermode_%s%s", name, aa ? "_aa" : ""); 30 fName.printf("Xfermode_%s%s", name, aa ? "_aa" : "");
31 } 31 }
32 32
33 protected: 33 protected:
34 const char* onGetName() override { return fName.c_str(); } 34 const char* onGetName() override { return fName.c_str(); }
35 35
36 void onDraw(int loops, SkCanvas* canvas) override { 36 void onDraw(int loops, SkCanvas* canvas) override {
37 const char* text = "Hamburgefons"; 37 const char* text = "Hamburgefons";
38 size_t len = strlen(text); 38 size_t len = strlen(text);
39 SkISize size = canvas->getDeviceSize(); 39 SkISize size = canvas->getDeviceSize();
40 SkRandom random; 40 SkRandom random;
41 for (int i = 0; i < loops; ++i) { 41 for (int i = 0; i < loops; ++i) {
42 SkPaint paint; 42 SkPaint paint;
43 paint.setXfermode(fXfermode.get()); 43 paint.setXfermode(fXfermode);
44 paint.setColor(random.nextU()); 44 paint.setColor(random.nextU());
45 if (fAA) { 45 if (fAA) {
46 // Draw text to exercise AA code paths. 46 // Draw text to exercise AA code paths.
47 paint.setAntiAlias(true); 47 paint.setAntiAlias(true);
48 paint.setTextSize(random.nextRangeScalar(12, 96)); 48 paint.setTextSize(random.nextRangeScalar(12, 96));
49 SkScalar x = random.nextRangeScalar(0, (SkScalar)size.fWidth), 49 SkScalar x = random.nextRangeScalar(0, (SkScalar)size.fWidth),
50 y = random.nextRangeScalar(0, (SkScalar)size.fHeight); 50 y = random.nextRangeScalar(0, (SkScalar)size.fHeight);
51 for (int j = 0; j < 1000; ++j) { 51 for (int j = 0; j < 1000; ++j) {
52 canvas->drawText(text, len, x, y, paint); 52 canvas->drawText(text, len, x, y, paint);
53 } 53 }
54 } else { 54 } else {
55 // Draw rects to exercise non-AA code paths. 55 // Draw rects to exercise non-AA code paths.
56 SkScalar w = random.nextRangeScalar(50, 100); 56 SkScalar w = random.nextRangeScalar(50, 100);
57 SkScalar h = random.nextRangeScalar(50, 100); 57 SkScalar h = random.nextRangeScalar(50, 100);
58 SkRect rect = SkRect::MakeXYWH( 58 SkRect rect = SkRect::MakeXYWH(
59 random.nextUScalar1() * (size.fWidth - w), 59 random.nextUScalar1() * (size.fWidth - w),
60 random.nextUScalar1() * (size.fHeight - h), 60 random.nextUScalar1() * (size.fHeight - h),
61 w, 61 w,
62 h 62 h
63 ); 63 );
64 for (int j = 0; j < 1000; ++j) { 64 for (int j = 0; j < 1000; ++j) {
65 canvas->drawRect(rect, paint); 65 canvas->drawRect(rect, paint);
66 } 66 }
67 } 67 }
68 } 68 }
69 } 69 }
70 70
71 private: 71 private:
72 SkAutoTUnref<SkXfermode> fXfermode; 72 sk_sp<SkXfermode> fXfermode;
73 SkString fName; 73 SkString fName;
74 bool fAA; 74 bool fAA;
75 75
76 typedef Benchmark INHERITED; 76 typedef Benchmark INHERITED;
77 }; 77 };
78 78
79 class XferCreateBench : public Benchmark { 79 class XferCreateBench : public Benchmark {
80 public: 80 public:
81 bool isSuitableFor(Backend backend) override { 81 bool isSuitableFor(Backend backend) override {
82 return backend == kNonRendering_Backend; 82 return backend == kNonRendering_Backend;
83 } 83 }
84 84
85 protected: 85 protected:
86 const char* onGetName() override { return "xfermode_create"; } 86 const char* onGetName() override { return "xfermode_create"; }
87 87
88 void onDraw(int loops, SkCanvas* canvas) override { 88 void onDraw(int loops, SkCanvas* canvas) override {
89 for (int outer = 0; outer < loops * 10; ++outer) { 89 for (int outer = 0; outer < loops * 10; ++outer) {
90 for (int i = 0; i <= SkXfermode::kLastMode; ++i) { 90 for (int i = 0; i <= SkXfermode::kLastMode; ++i) {
91 SkXfermode* xfer = SkXfermode::Create(SkXfermode::Mode(i)); 91 (void)SkXfermode::Make(SkXfermode::Mode(i));
92 SkSafeUnref(xfer);
93 } 92 }
94 } 93 }
95 } 94 }
96 95
97 private: 96 private:
98 typedef Benchmark INHERITED; 97 typedef Benchmark INHERITED;
99 }; 98 };
100 99
101 ////////////////////////////////////////////////////////////////////////////// 100 //////////////////////////////////////////////////////////////////////////////
102 101
(...skipping 28 matching lines...) Expand all
131 BENCH(SkXfermode::kDifference_Mode) 130 BENCH(SkXfermode::kDifference_Mode)
132 BENCH(SkXfermode::kExclusion_Mode) 131 BENCH(SkXfermode::kExclusion_Mode)
133 BENCH(SkXfermode::kMultiply_Mode) 132 BENCH(SkXfermode::kMultiply_Mode)
134 133
135 BENCH(SkXfermode::kHue_Mode) 134 BENCH(SkXfermode::kHue_Mode)
136 BENCH(SkXfermode::kSaturation_Mode) 135 BENCH(SkXfermode::kSaturation_Mode)
137 BENCH(SkXfermode::kColor_Mode) 136 BENCH(SkXfermode::kColor_Mode)
138 BENCH(SkXfermode::kLuminosity_Mode) 137 BENCH(SkXfermode::kLuminosity_Mode)
139 138
140 DEF_BENCH(return new XferCreateBench;) 139 DEF_BENCH(return new XferCreateBench;)
OLDNEW
« no previous file with comments | « bench/XferU64Bench.cpp ('k') | gm/aarectmodes.cpp » ('j') | src/core/SkComposeShader.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698