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

Side by Side Diff: bench/XfermodeBench.cpp

Issue 2396953002: Revert[8] "replace SkXfermode obj with SkBlendMode enum in paints" (Closed)
Patch Set: add tmp virtual to unroll legacy arithmodes Created 4 years, 2 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
« no previous file with comments | « bench/RotatedRectBench.cpp ('k') | dm/DMSrcSink.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 7
8 #include "Benchmark.h" 8 #include "Benchmark.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkPaint.h" 10 #include "SkPaint.h"
11 #include "SkRandom.h" 11 #include "SkRandom.h"
12 #include "SkString.h" 12 #include "SkString.h"
13 #include "SkXfermode.h" 13 #include "SkXfermode.h"
14 14
15 // Benchmark that draws non-AA rects or AA text with an SkXfermode::Mode. 15 // Benchmark that draws non-AA rects or AA text with an SkXfermode::Mode.
16 class XfermodeBench : public Benchmark { 16 class XfermodeBench : public Benchmark {
17 public: 17 public:
18 XfermodeBench(SkXfermode::Mode mode, bool aa) { 18 XfermodeBench(SkBlendMode mode, bool aa) : fBlendMode(mode) {
19 fXfermode = SkXfermode::Make(mode);
20 fAA = aa; 19 fAA = aa;
21 SkASSERT(fXfermode.get() || SkXfermode::kSrcOver_Mode == mode);
22 fName.printf("Xfermode_%s%s", SkXfermode::ModeName(mode), aa ? "_aa" : " "); 20 fName.printf("Xfermode_%s%s", SkXfermode::ModeName(mode), aa ? "_aa" : " ");
23 } 21 }
24 22
25 protected: 23 protected:
26 const char* onGetName() override { return fName.c_str(); } 24 const char* onGetName() override { return fName.c_str(); }
27 25
28 void onDraw(int loops, SkCanvas* canvas) override { 26 void onDraw(int loops, SkCanvas* canvas) override {
29 const char* text = "Hamburgefons"; 27 const char* text = "Hamburgefons";
30 size_t len = strlen(text); 28 size_t len = strlen(text);
31 SkISize size = canvas->getDeviceSize(); 29 SkISize size = canvas->getDeviceSize();
32 SkRandom random; 30 SkRandom random;
33 for (int i = 0; i < loops; ++i) { 31 for (int i = 0; i < loops; ++i) {
34 SkPaint paint; 32 SkPaint paint;
35 paint.setXfermode(fXfermode); 33 paint.setBlendMode(fBlendMode);
36 paint.setColor(random.nextU()); 34 paint.setColor(random.nextU());
37 if (fAA) { 35 if (fAA) {
38 // Draw text to exercise AA code paths. 36 // Draw text to exercise AA code paths.
39 paint.setAntiAlias(true); 37 paint.setAntiAlias(true);
40 paint.setTextSize(random.nextRangeScalar(12, 96)); 38 paint.setTextSize(random.nextRangeScalar(12, 96));
41 SkScalar x = random.nextRangeScalar(0, (SkScalar)size.fWidth), 39 SkScalar x = random.nextRangeScalar(0, (SkScalar)size.fWidth),
42 y = random.nextRangeScalar(0, (SkScalar)size.fHeight); 40 y = random.nextRangeScalar(0, (SkScalar)size.fHeight);
43 for (int j = 0; j < 1000; ++j) { 41 for (int j = 0; j < 1000; ++j) {
44 canvas->drawText(text, len, x, y, paint); 42 canvas->drawText(text, len, x, y, paint);
45 } 43 }
46 } else { 44 } else {
47 // Draw rects to exercise non-AA code paths. 45 // Draw rects to exercise non-AA code paths.
48 SkScalar w = random.nextRangeScalar(50, 100); 46 SkScalar w = random.nextRangeScalar(50, 100);
49 SkScalar h = random.nextRangeScalar(50, 100); 47 SkScalar h = random.nextRangeScalar(50, 100);
50 SkRect rect = SkRect::MakeXYWH( 48 SkRect rect = SkRect::MakeXYWH(
51 random.nextUScalar1() * (size.fWidth - w), 49 random.nextUScalar1() * (size.fWidth - w),
52 random.nextUScalar1() * (size.fHeight - h), 50 random.nextUScalar1() * (size.fHeight - h),
53 w, 51 w,
54 h 52 h
55 ); 53 );
56 for (int j = 0; j < 1000; ++j) { 54 for (int j = 0; j < 1000; ++j) {
57 canvas->drawRect(rect, paint); 55 canvas->drawRect(rect, paint);
58 } 56 }
59 } 57 }
60 } 58 }
61 } 59 }
62 60
63 private: 61 private:
64 sk_sp<SkXfermode> fXfermode; 62 SkBlendMode fBlendMode;
65 SkString fName; 63 SkString fName;
66 bool fAA; 64 bool fAA;
67 65
68 typedef Benchmark INHERITED; 66 typedef Benchmark INHERITED;
69 }; 67 };
70 68
71 class XferCreateBench : public Benchmark {
72 public:
73 bool isSuitableFor(Backend backend) override {
74 return backend == kNonRendering_Backend;
75 }
76
77 protected:
78 const char* onGetName() override { return "xfermode_create"; }
79
80 void onDraw(int loops, SkCanvas* canvas) override {
81 for (int outer = 0; outer < loops * 10; ++outer) {
82 for (int i = 0; i <= SkXfermode::kLastMode; ++i) {
83 (void)SkXfermode::Make(SkXfermode::Mode(i));
84 }
85 }
86 }
87
88 private:
89 typedef Benchmark INHERITED;
90 };
91
92 ////////////////////////////////////////////////////////////////////////////// 69 //////////////////////////////////////////////////////////////////////////////
93 70
94 #define BENCH(...) \ 71 #define BENCH(...) \
95 DEF_BENCH( return new XfermodeBench(__VA_ARGS__, true); ) \ 72 DEF_BENCH( return new XfermodeBench(__VA_ARGS__, true); ) \
96 DEF_BENCH( return new XfermodeBench(__VA_ARGS__, false); ) 73 DEF_BENCH( return new XfermodeBench(__VA_ARGS__, false); )
97 74
98 BENCH(SkXfermode::kClear_Mode) 75 BENCH(SkBlendMode::kClear)
99 BENCH(SkXfermode::kSrc_Mode) 76 BENCH(SkBlendMode::kSrc)
100 BENCH(SkXfermode::kDst_Mode) 77 BENCH(SkBlendMode::kDst)
101 BENCH(SkXfermode::kSrcOver_Mode) 78 BENCH(SkBlendMode::kSrcOver)
102 BENCH(SkXfermode::kDstOver_Mode) 79 BENCH(SkBlendMode::kDstOver)
103 BENCH(SkXfermode::kSrcIn_Mode) 80 BENCH(SkBlendMode::kSrcIn)
104 BENCH(SkXfermode::kDstIn_Mode) 81 BENCH(SkBlendMode::kDstIn)
105 BENCH(SkXfermode::kSrcOut_Mode) 82 BENCH(SkBlendMode::kSrcOut)
106 BENCH(SkXfermode::kDstOut_Mode) 83 BENCH(SkBlendMode::kDstOut)
107 BENCH(SkXfermode::kSrcATop_Mode) 84 BENCH(SkBlendMode::kSrcATop)
108 BENCH(SkXfermode::kDstATop_Mode) 85 BENCH(SkBlendMode::kDstATop)
109 BENCH(SkXfermode::kXor_Mode) 86 BENCH(SkBlendMode::kXor)
110 87
111 BENCH(SkXfermode::kPlus_Mode) 88 BENCH(SkBlendMode::kPlus)
112 BENCH(SkXfermode::kModulate_Mode) 89 BENCH(SkBlendMode::kModulate)
113 BENCH(SkXfermode::kScreen_Mode) 90 BENCH(SkBlendMode::kScreen)
114 91
115 BENCH(SkXfermode::kOverlay_Mode) 92 BENCH(SkBlendMode::kOverlay)
116 BENCH(SkXfermode::kDarken_Mode) 93 BENCH(SkBlendMode::kDarken)
117 BENCH(SkXfermode::kLighten_Mode) 94 BENCH(SkBlendMode::kLighten)
118 BENCH(SkXfermode::kColorDodge_Mode) 95 BENCH(SkBlendMode::kColorDodge)
119 BENCH(SkXfermode::kColorBurn_Mode) 96 BENCH(SkBlendMode::kColorBurn)
120 BENCH(SkXfermode::kHardLight_Mode) 97 BENCH(SkBlendMode::kHardLight)
121 BENCH(SkXfermode::kSoftLight_Mode) 98 BENCH(SkBlendMode::kSoftLight)
122 BENCH(SkXfermode::kDifference_Mode) 99 BENCH(SkBlendMode::kDifference)
123 BENCH(SkXfermode::kExclusion_Mode) 100 BENCH(SkBlendMode::kExclusion)
124 BENCH(SkXfermode::kMultiply_Mode) 101 BENCH(SkBlendMode::kMultiply)
125 102
126 BENCH(SkXfermode::kHue_Mode) 103 BENCH(SkBlendMode::kHue)
127 BENCH(SkXfermode::kSaturation_Mode) 104 BENCH(SkBlendMode::kSaturation)
128 BENCH(SkXfermode::kColor_Mode) 105 BENCH(SkBlendMode::kColor)
129 BENCH(SkXfermode::kLuminosity_Mode) 106 BENCH(SkBlendMode::kLuminosity)
130
131 DEF_BENCH(return new XferCreateBench;)
OLDNEW
« no previous file with comments | « bench/RotatedRectBench.cpp ('k') | dm/DMSrcSink.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698