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

Side by Side Diff: gm/convexpolyclip.cpp

Issue 148283017: Make GMs aware of what tool they're being run in. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: w to this->getMode() Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « bench/benchmain.cpp ('k') | gm/gm.h » ('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 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 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 "gm.h" 9 #include "gm.h"
10 10
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 ConvexPolyClip() { 76 ConvexPolyClip() {
77 this->setBGColor(0xFFFFFFFF); 77 this->setBGColor(0xFFFFFFFF);
78 } 78 }
79 79
80 protected: 80 protected:
81 virtual SkString onShortName() SK_OVERRIDE { 81 virtual SkString onShortName() SK_OVERRIDE {
82 return SkString("convex_poly_clip"); 82 return SkString("convex_poly_clip");
83 } 83 }
84 84
85 virtual SkISize onISize() SK_OVERRIDE { 85 virtual SkISize onISize() SK_OVERRIDE {
86 return make_isize(435, 540); 86 // When benchmarking the saveLayer set of draws is skipped.
87 int w = 435;
88 if (kBench_Mode != this->getMode()) {
89 w *= 2;
90 }
91 return make_isize(w, 540);
87 } 92 }
88 93
89 virtual void onOnceBeforeDraw() SK_OVERRIDE { 94 virtual void onOnceBeforeDraw() SK_OVERRIDE {
90 SkPath tri; 95 SkPath tri;
91 tri.moveTo(5.f, 5.f); 96 tri.moveTo(5.f, 5.f);
92 tri.lineTo(100.f, 20.f); 97 tri.lineTo(100.f, 20.f);
93 tri.lineTo(15.f, 100.f); 98 tri.lineTo(15.f, 100.f);
94 99
95 fClips.addToTail()->setPath(tri); 100 fClips.addToTail()->setPath(tri);
96 101
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 SkScalar y = 0; 138 SkScalar y = 0;
134 static const SkScalar kMargin = 10.f; 139 static const SkScalar kMargin = 10.f;
135 140
136 SkPaint bgPaint; 141 SkPaint bgPaint;
137 bgPaint.setAlpha(0x15); 142 bgPaint.setAlpha(0x15);
138 SkISize size = canvas->getDeviceSize(); 143 SkISize size = canvas->getDeviceSize();
139 SkRect dstRect = SkRect::MakeWH(SkIntToScalar(size.fWidth), 144 SkRect dstRect = SkRect::MakeWH(SkIntToScalar(size.fWidth),
140 SkIntToScalar(size.fHeight)); 145 SkIntToScalar(size.fHeight));
141 canvas->drawBitmapRectToRect(fBmp, NULL, dstRect, &bgPaint); 146 canvas->drawBitmapRectToRect(fBmp, NULL, dstRect, &bgPaint);
142 147
143 for (SkTLList<Clip>::Iter iter(fClips, SkTLList<Clip>::Iter::kHead_IterS tart); 148 static const char kTxt[] = "Clip Me!";
144 NULL != iter.get(); 149 SkPaint txtPaint;
145 iter.next()) { 150 txtPaint.setTextSize(23.f);
146 const Clip* clip = iter.get(); 151 txtPaint.setAntiAlias(true);
147 SkScalar x = 0; 152 txtPaint.setColor(SK_ColorDKGRAY);
148 for (int aa = 0; aa < 2; ++aa) { 153 SkScalar textW = txtPaint.measureText(kTxt, SK_ARRAY_COUNT(kTxt)-1);
149 canvas->save(); 154
150 canvas->translate(x, y); 155 SkScalar startX = 0;
151 clip->setOnCanvas(canvas, SkRegion::kIntersect_Op, SkToBool(aa)) ; 156 int testLayers = kBench_Mode != this->getMode();
152 canvas->drawBitmap(fBmp, 0, 0); 157 for (int doLayer = 0; doLayer <= testLayers; ++doLayer) {
153 canvas->restore(); 158 for (SkTLList<Clip>::Iter iter(fClips, SkTLList<Clip>::Iter::kHead_I terStart);
154 x += fBmp.width() + kMargin; 159 NULL != iter.get();
160 iter.next()) {
161 const Clip* clip = iter.get();
162 SkScalar x = startX;
163 for (int aa = 0; aa < 2; ++aa) {
164 if (doLayer) {
165 SkRect bounds;
166 clip->getBounds(&bounds);
167 bounds.outset(2, 2);
168 bounds.offset(x, y);
169 canvas->saveLayer(&bounds, NULL);
170 } else {
171 canvas->save();
172 }
173 canvas->translate(x, y);
174 clip->setOnCanvas(canvas, SkRegion::kIntersect_Op, SkToBool( aa));
175 canvas->drawBitmap(fBmp, 0, 0);
176 canvas->restore();
177 x += fBmp.width() + kMargin;
178 }
179 for (int aa = 0; aa < 2; ++aa) {
180
181 SkPaint clipOutlinePaint;
182 clipOutlinePaint.setAntiAlias(true);
183 clipOutlinePaint.setColor(0x50505050);
184 clipOutlinePaint.setStyle(SkPaint::kStroke_Style);
185 clipOutlinePaint.setStrokeWidth(0);
186
187 if (doLayer) {
188 SkRect bounds;
189 clip->getBounds(&bounds);
190 bounds.outset(2, 2);
191 bounds.offset(x, y);
192 canvas->saveLayer(&bounds, NULL);
193 } else {
194 canvas->save();
195 }
196 canvas->translate(x, y);
197 SkPath closedClipPath;
198 clip->asClosedPath(&closedClipPath);
199 canvas->drawPath(closedClipPath, clipOutlinePaint);
200 clip->setOnCanvas(canvas, SkRegion::kIntersect_Op, SkToBool( aa));
201 canvas->scale(1.f, 1.8f);
202 canvas->drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1,
203 0, 1.5f * txtPaint.getTextSize(),
204 txtPaint);
205 canvas->restore();
206 x += textW + 2 * kMargin;
207 }
208 y += fBmp.height() + kMargin;
155 } 209 }
156 for (int aa = 0; aa < 2; ++aa) { 210 y = 0;
157 static const char kTxt[] = "Clip Me!"; 211 startX += 2 * fBmp.width() + SkScalarCeilToInt(2 * textW) + 6 * kMar gin;
158 SkPaint txtPaint;
159 txtPaint.setTextSize(23.f);
160 txtPaint.setAntiAlias(true);
161 txtPaint.setColor(SK_ColorDKGRAY);
162
163 SkPaint clipOutlinePaint;
164 clipOutlinePaint.setAntiAlias(true);
165 clipOutlinePaint.setColor(0x50505050);
166 clipOutlinePaint.setStyle(SkPaint::kStroke_Style);
167 clipOutlinePaint.setStrokeWidth(0);
168
169 canvas->save();
170 canvas->translate(x, y);
171 SkPath closedClipPath;
172 clip->asClosedPath(&closedClipPath);
173 canvas->drawPath(closedClipPath, clipOutlinePaint);
174 clip->setOnCanvas(canvas, SkRegion::kIntersect_Op, SkToBool(aa)) ;
175 canvas->scale(1.f, 1.8f);
176 canvas->drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1,
177 0, 1.5f * txtPaint.getTextSize(),
178 txtPaint);
179 canvas->restore();
180 x += fBmp.width() + kMargin;
181 }
182
183 y += fBmp.height() + kMargin;
184 } 212 }
185 } 213 }
186 214
187 virtual uint32_t onGetFlags() const { 215 virtual uint32_t onGetFlags() const {
188 return kAsBench_Flag; 216 return kAsBench_Flag;
189 } 217 }
190 218
191 private: 219 private:
192 class Clip { 220 class Clip {
193 public: 221 public:
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 } 263 }
236 264
237 void setRect(const SkRect& rect) { 265 void setRect(const SkRect& rect) {
238 fClipType = kRect_ClipType; 266 fClipType = kRect_ClipType;
239 fRect = rect; 267 fRect = rect;
240 fPath.reset(); 268 fPath.reset();
241 } 269 }
242 270
243 ClipType getType() const { return fClipType; } 271 ClipType getType() const { return fClipType; }
244 272
273 void getBounds(SkRect* bounds) const {
274 switch (fClipType) {
275 case kPath_ClipType:
276 *bounds = fPath.getBounds();
277 break;
278 case kRect_ClipType:
279 *bounds = fRect;
280 break;
281 case kNone_ClipType:
282 SkDEBUGFAIL("Uninitialized Clip.");
283 break;
284 }
285 }
286
245 private: 287 private:
246 ClipType fClipType; 288 ClipType fClipType;
247 SkPath fPath; 289 SkPath fPath;
248 SkRect fRect; 290 SkRect fRect;
249 }; 291 };
250 292
251 SkTLList<Clip> fClips; 293 SkTLList<Clip> fClips;
252 SkBitmap fBmp; 294 SkBitmap fBmp;
253 295
254 typedef GM INHERITED; 296 typedef GM INHERITED;
255 }; 297 };
256 298
257 DEF_GM( return SkNEW(ConvexPolyClip); ) 299 DEF_GM( return SkNEW(ConvexPolyClip); )
258 300
259 } 301 }
OLDNEW
« no previous file with comments | « bench/benchmain.cpp ('k') | gm/gm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698