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

Side by Side Diff: gm/image_pict.cpp

Issue 1811703002: return pictures as sk_sp (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rely on RVO in picturerecorder 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
« no previous file with comments | « gm/image.cpp ('k') | gm/image_shader.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 2015 Google Inc. 2 * Copyright 2015 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 "gm.h" 8 #include "gm.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkImage.h" 10 #include "SkImage.h"
(...skipping 17 matching lines...) Expand all
28 paint.setStyle(SkPaint::kFill_Style); 28 paint.setStyle(SkPaint::kFill_Style);
29 paint.setColor(SK_ColorBLUE); 29 paint.setColor(SK_ColorBLUE);
30 canvas->drawOval(bounds, paint); 30 canvas->drawOval(bounds, paint);
31 } 31 }
32 32
33 /* 33 /*
34 * Exercise drawing pictures inside an image, showing that the image version is pixelated 34 * Exercise drawing pictures inside an image, showing that the image version is pixelated
35 * (correctly) when it is inside an image. 35 * (correctly) when it is inside an image.
36 */ 36 */
37 class ImagePictGM : public skiagm::GM { 37 class ImagePictGM : public skiagm::GM {
38 SkAutoTUnref<SkPicture> fPicture; 38 sk_sp<SkPicture> fPicture;
39 sk_sp<SkImage> fImage0; 39 sk_sp<SkImage> fImage0;
40 sk_sp<SkImage> fImage1; 40 sk_sp<SkImage> fImage1;
41 public: 41 public:
42 ImagePictGM() {} 42 ImagePictGM() {}
43 43
44 protected: 44 protected:
45 SkString onShortName() override { 45 SkString onShortName() override {
46 return SkString("image-picture"); 46 return SkString("image-picture");
47 } 47 }
48 48
49 SkISize onISize() override { 49 SkISize onISize() override {
50 return SkISize::Make(850, 450); 50 return SkISize::Make(850, 450);
51 } 51 }
52 52
53 void onOnceBeforeDraw() override { 53 void onOnceBeforeDraw() override {
54 const SkRect bounds = SkRect::MakeXYWH(100, 100, 100, 100); 54 const SkRect bounds = SkRect::MakeXYWH(100, 100, 100, 100);
55 SkPictureRecorder recorder; 55 SkPictureRecorder recorder;
56 draw_something(recorder.beginRecording(bounds), bounds); 56 draw_something(recorder.beginRecording(bounds), bounds);
57 fPicture.reset(recorder.endRecording()); 57 fPicture = recorder.finishRecordingAsPicture();
58 58
59 // extract enough just for the oval. 59 // extract enough just for the oval.
60 const SkISize size = SkISize::Make(100, 100); 60 const SkISize size = SkISize::Make(100, 100);
61 61
62 SkMatrix matrix; 62 SkMatrix matrix;
63 matrix.setTranslate(-100, -100); 63 matrix.setTranslate(-100, -100);
64 fImage0 = SkImage::MakeFromPicture(sk_ref_sp(fPicture.get()), size, &mat rix, nullptr); 64 fImage0 = SkImage::MakeFromPicture(fPicture, size, &matrix, nullptr);
65 matrix.postTranslate(-50, -50); 65 matrix.postTranslate(-50, -50);
66 matrix.postRotate(45); 66 matrix.postRotate(45);
67 matrix.postTranslate(50, 50); 67 matrix.postTranslate(50, 50);
68 fImage1 = SkImage::MakeFromPicture(sk_ref_sp(fPicture.get()), size, &mat rix, nullptr); 68 fImage1 = SkImage::MakeFromPicture(fPicture, size, &matrix, nullptr);
69 } 69 }
70 70
71 void drawSet(SkCanvas* canvas) const { 71 void drawSet(SkCanvas* canvas) const {
72 SkMatrix matrix = SkMatrix::MakeTrans(-100, -100); 72 SkMatrix matrix = SkMatrix::MakeTrans(-100, -100);
73 canvas->drawPicture(fPicture, &matrix, nullptr); 73 canvas->drawPicture(fPicture, &matrix, nullptr);
74 canvas->drawImage(fImage0.get(), 150, 0); 74 canvas->drawImage(fImage0.get(), 150, 0);
75 canvas->drawImage(fImage1.get(), 300, 0); 75 canvas->drawImage(fImage1.get(), 300, 0);
76 } 76 }
77 77
78 void onDraw(SkCanvas* canvas) override { 78 void onDraw(SkCanvas* canvas) override {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 if (!ctx) { 247 if (!ctx) {
248 return new EmptyGenerator(info); 248 return new EmptyGenerator(info);
249 } 249 }
250 return new TextureGenerator(ctx, info, pic); 250 return new TextureGenerator(ctx, info, pic);
251 } 251 }
252 #endif 252 #endif
253 253
254 class ImageCacheratorGM : public skiagm::GM { 254 class ImageCacheratorGM : public skiagm::GM {
255 SkString fName; 255 SkString fName;
256 SkImageGenerator* (*fFactory)(GrContext*, SkPicture*); 256 SkImageGenerator* (*fFactory)(GrContext*, SkPicture*);
257 SkAutoTUnref<SkPicture> fPicture; 257 sk_sp<SkPicture> fPicture;
258 SkAutoTDelete<SkImageCacherator> fCache; 258 SkAutoTDelete<SkImageCacherator> fCache;
259 SkAutoTDelete<SkImageCacherator> fCacheSubset; 259 SkAutoTDelete<SkImageCacherator> fCacheSubset;
260 260
261 public: 261 public:
262 ImageCacheratorGM(const char suffix[], SkImageGenerator* (*factory)(GrContex t*, SkPicture*)) 262 ImageCacheratorGM(const char suffix[], SkImageGenerator* (*factory)(GrContex t*, SkPicture*))
263 : fFactory(factory) 263 : fFactory(factory)
264 { 264 {
265 fName.printf("image-cacherator-from-%s", suffix); 265 fName.printf("image-cacherator-from-%s", suffix);
266 } 266 }
267 267
268 protected: 268 protected:
269 SkString onShortName() override { 269 SkString onShortName() override {
270 return fName; 270 return fName;
271 } 271 }
272 272
273 SkISize onISize() override { 273 SkISize onISize() override {
274 return SkISize::Make(960, 450); 274 return SkISize::Make(960, 450);
275 } 275 }
276 276
277 void onOnceBeforeDraw() override { 277 void onOnceBeforeDraw() override {
278 const SkRect bounds = SkRect::MakeXYWH(100, 100, 100, 100); 278 const SkRect bounds = SkRect::MakeXYWH(100, 100, 100, 100);
279 SkPictureRecorder recorder; 279 SkPictureRecorder recorder;
280 draw_something(recorder.beginRecording(bounds), bounds); 280 draw_something(recorder.beginRecording(bounds), bounds);
281 fPicture.reset(recorder.endRecording()); 281 fPicture = recorder.finishRecordingAsPicture();
282 } 282 }
283 283
284 void makeCaches(GrContext* ctx) { 284 void makeCaches(GrContext* ctx) {
285 auto gen = fFactory(ctx, fPicture); 285 auto gen = fFactory(ctx, fPicture.get());
286 SkDEBUGCODE(const uint32_t genID = gen->uniqueID();) 286 SkDEBUGCODE(const uint32_t genID = gen->uniqueID();)
287 fCache.reset(SkImageCacherator::NewFromGenerator(gen)); 287 fCache.reset(SkImageCacherator::NewFromGenerator(gen));
288 288
289 const SkIRect subset = SkIRect::MakeLTRB(50, 50, 100, 100); 289 const SkIRect subset = SkIRect::MakeLTRB(50, 50, 100, 100);
290 290
291 gen = fFactory(ctx, fPicture); 291 gen = fFactory(ctx, fPicture.get());
292 SkDEBUGCODE(const uint32_t genSubsetID = gen->uniqueID();) 292 SkDEBUGCODE(const uint32_t genSubsetID = gen->uniqueID();)
293 fCacheSubset.reset(SkImageCacherator::NewFromGenerator(gen, &subset)); 293 fCacheSubset.reset(SkImageCacherator::NewFromGenerator(gen, &subset));
294 294
295 // whole caches should have the same ID as the generator. Subsets should be diff 295 // whole caches should have the same ID as the generator. Subsets should be diff
296 SkASSERT(fCache->uniqueID() == genID); 296 SkASSERT(fCache->uniqueID() == genID);
297 SkASSERT(fCacheSubset->uniqueID() != genID); 297 SkASSERT(fCacheSubset->uniqueID() != genID);
298 SkASSERT(fCacheSubset->uniqueID() != genSubsetID); 298 SkASSERT(fCacheSubset->uniqueID() != genSubsetID);
299 299
300 SkASSERT(fCache->info().dimensions() == SkISize::Make(100, 100)); 300 SkASSERT(fCache->info().dimensions() == SkISize::Make(100, 100));
301 SkASSERT(fCacheSubset->info().dimensions() == SkISize::Make(50, 50)); 301 SkASSERT(fCacheSubset->info().dimensions() == SkISize::Make(50, 50));
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 }; 370 };
371 DEF_GM( return new ImageCacheratorGM("picture", make_pic_generator); ) 371 DEF_GM( return new ImageCacheratorGM("picture", make_pic_generator); )
372 DEF_GM( return new ImageCacheratorGM("raster", make_ras_generator); ) 372 DEF_GM( return new ImageCacheratorGM("raster", make_ras_generator); )
373 DEF_GM( return new ImageCacheratorGM("ctable", make_ctable_generator); ) 373 DEF_GM( return new ImageCacheratorGM("ctable", make_ctable_generator); )
374 #if SK_SUPPORT_GPU 374 #if SK_SUPPORT_GPU
375 DEF_GM( return new ImageCacheratorGM("texture", make_tex_generator); ) 375 DEF_GM( return new ImageCacheratorGM("texture", make_tex_generator); )
376 #endif 376 #endif
377 377
378 378
379 379
OLDNEW
« no previous file with comments | « gm/image.cpp ('k') | gm/image_shader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698