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

Side by Side Diff: gm/recordopts.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/pictureshadertile.cpp ('k') | gm/verylargebitmap.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 2014 Google Inc. 2 * Copyright 2014 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 "SkPath.h" 10 #include "SkPath.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 canvas->drawBitmap(bitmap, SkIntToScalar(0), SkIntToScalar(0), &drawPain t); 93 canvas->drawBitmap(bitmap, SkIntToScalar(0), SkIntToScalar(0), &drawPain t);
94 canvas->restore(); 94 canvas->restore();
95 } 95 }
96 96
97 // Draws an pattern that can be optimized by alpha folding outer savelayer alpha value to 97 // Draws an pattern that can be optimized by alpha folding outer savelayer alpha value to
98 // inner savelayer. We know that alpha folding happens to inner savelayer, so ad d detector there. 98 // inner savelayer. We know that alpha folding happens to inner savelayer, so ad d detector there.
99 static void draw_svg_opacity_and_filter_layer_sequence(SkCanvas* canvas, SkColor shapeColor, 99 static void draw_svg_opacity_and_filter_layer_sequence(SkCanvas* canvas, SkColor shapeColor,
100 InstallDetectorFunc insta llDetector) { 100 InstallDetectorFunc insta llDetector) {
101 101
102 SkRect targetRect(SkRect::MakeWH(SkIntToScalar(kTestRectSize), SkIntToScalar (kTestRectSize))); 102 SkRect targetRect(SkRect::MakeWH(SkIntToScalar(kTestRectSize), SkIntToScalar (kTestRectSize)));
103 SkAutoTUnref<SkPicture> shape; 103 sk_sp<SkPicture> shape;
104 { 104 {
105 SkPictureRecorder recorder; 105 SkPictureRecorder recorder;
106 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kTestRectSize + 2), 106 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kTestRectSize + 2),
107 SkIntToScalar(kTestRectSize + 2)); 107 SkIntToScalar(kTestRectSize + 2));
108 SkPaint shapePaint; 108 SkPaint shapePaint;
109 shapePaint.setColor(shapeColor); 109 shapePaint.setColor(shapeColor);
110 canvas->drawRect(targetRect, shapePaint); 110 canvas->drawRect(targetRect, shapePaint);
111 shape.reset(recorder.endRecordingAsPicture()); 111 shape = recorder.finishRecordingAsPicture();
112 } 112 }
113 113
114 SkPaint layerPaint; 114 SkPaint layerPaint;
115 layerPaint.setColor(SkColorSetARGB(130, 0, 0, 0)); 115 layerPaint.setColor(SkColorSetARGB(130, 0, 0, 0));
116 canvas->saveLayer(&targetRect, &layerPaint); 116 canvas->saveLayer(&targetRect, &layerPaint);
117 canvas->save(); 117 canvas->save();
118 canvas->clipRect(targetRect); 118 canvas->clipRect(targetRect);
119 SkPaint drawPaint; 119 SkPaint drawPaint;
120 drawPaint.setImageFilter(SkPictureImageFilter::Create(shape))->unref (); 120 drawPaint.setImageFilter(SkPictureImageFilter::Create(shape.get()))- >unref();
121 installDetector(&drawPaint); 121 installDetector(&drawPaint);
122 canvas->saveLayer(&targetRect, &drawPaint); 122 canvas->saveLayer(&targetRect, &drawPaint);
123 canvas->restore(); 123 canvas->restore();
124 canvas->restore(); 124 canvas->restore();
125 canvas->restore(); 125 canvas->restore();
126 } 126 }
127 127
128 // Draws two columns of rectangles. The test is correct when: 128 // Draws two columns of rectangles. The test is correct when:
129 // - Left and right columns always identical 129 // - Left and right columns always identical
130 // - First 3 rows are green, with a white dent in the middle row 130 // - First 3 rows are green, with a white dent in the middle row
(...skipping 23 matching lines...) Expand all
154 154
155 TestVariantSequence drawTestSequence = funcs[k]; 155 TestVariantSequence drawTestSequence = funcs[k];
156 drawTestSequence(canvas, shapeColor, no_detector_install); 156 drawTestSequence(canvas, shapeColor, no_detector_install);
157 canvas->flush(); 157 canvas->flush();
158 canvas->translate(SkIntToScalar(kTestRectSize) + SkIntToScalar(1), SkInt ToScalar(0)); 158 canvas->translate(SkIntToScalar(kTestRectSize) + SkIntToScalar(1), SkInt ToScalar(0));
159 { 159 {
160 SkPictureRecorder recorder; 160 SkPictureRecorder recorder;
161 drawTestSequence(recorder.beginRecording(SkIntToScalar(kTestRectSize ), 161 drawTestSequence(recorder.beginRecording(SkIntToScalar(kTestRectSize ),
162 SkIntToScalar(kTestRectSize )), 162 SkIntToScalar(kTestRectSize )),
163 shapeColor, no_detector_install); 163 shapeColor, no_detector_install);
164 SkAutoTUnref<SkPicture> optimizedPicture(recorder.endRecordingAsPict ure()); 164 recorder.finishRecordingAsPicture()->playback(canvas);
165 optimizedPicture->playback(canvas);
166 canvas->flush(); 165 canvas->flush();
167 } 166 }
168 canvas->restore(); 167 canvas->restore();
169 canvas->translate(SkIntToScalar(0), SkIntToScalar(kTestRectSize) + SkInt ToScalar(1)); 168 canvas->translate(SkIntToScalar(0), SkIntToScalar(kTestRectSize) + SkInt ToScalar(1));
170 } 169 }
171 170
172 // Draw the same layer related sequences, but manipulate the sequences so th at the result is 171 // Draw the same layer related sequences, but manipulate the sequences so th at the result is
173 // incorrect if the alpha is folded or folded incorrectly. These test the ob servable state 172 // incorrect if the alpha is folded or folded incorrectly. These test the ob servable state
174 // throughout the pixel pipeline, and thus may turn off the optimizations (t his is why we 173 // throughout the pixel pipeline, and thus may turn off the optimizations (t his is why we
175 // trigger the optimizations above). 174 // trigger the optimizations above).
(...skipping 20 matching lines...) Expand all
196 TestVariantSequence drawTestSequence = funcs[k]; 195 TestVariantSequence drawTestSequence = funcs[k];
197 canvas->save(); 196 canvas->save();
198 drawTestSequence(canvas, shapeColor, detectorInstallFunc); 197 drawTestSequence(canvas, shapeColor, detectorInstallFunc);
199 canvas->flush(); 198 canvas->flush();
200 canvas->translate(SkIntToScalar(kTestRectSize) + SkIntToScalar(1 ), SkIntToScalar(0)); 199 canvas->translate(SkIntToScalar(kTestRectSize) + SkIntToScalar(1 ), SkIntToScalar(0));
201 { 200 {
202 SkPictureRecorder recorder; 201 SkPictureRecorder recorder;
203 drawTestSequence(recorder.beginRecording(SkIntToScalar(kTest RectSize), 202 drawTestSequence(recorder.beginRecording(SkIntToScalar(kTest RectSize),
204 SkIntToScalar(kTest RectSize)), 203 SkIntToScalar(kTest RectSize)),
205 shapeColor, detectorInstallFunc); 204 shapeColor, detectorInstallFunc);
206 SkAutoTUnref<SkPicture> optimizedPicture(recorder.endRecordi ngAsPicture()); 205 recorder.finishRecordingAsPicture()->playback(canvas);
207 optimizedPicture->playback(canvas);
208 canvas->flush(); 206 canvas->flush();
209 } 207 }
210 208
211 canvas->restore(); 209 canvas->restore();
212 canvas->translate(SkIntToScalar(0), SkIntToScalar(kTestRectSize) + SkIntToScalar(1)); 210 canvas->translate(SkIntToScalar(0), SkIntToScalar(kTestRectSize) + SkIntToScalar(1));
213 } 211 }
214 212
215 } 213 }
216 } 214 }
217 } 215 }
218 216
OLDNEW
« no previous file with comments | « gm/pictureshadertile.cpp ('k') | gm/verylargebitmap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698