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

Side by Side Diff: samplecode/SamplePictFile.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 | « samplecode/SampleHT.cpp ('k') | samplecode/SampleTiling.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 2011 Google Inc. 2 * Copyright 2011 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 "SampleCode.h" 8 #include "SampleCode.h"
9 #include "SkDumpCanvas.h" 9 #include "SkDumpCanvas.h"
10 #include "SkView.h" 10 #include "SkView.h"
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 110
111 void onDrawContent(SkCanvas* canvas) override { 111 void onDrawContent(SkCanvas* canvas) override {
112 SkASSERT(static_cast<int>(fBBox) < kBBoxTypeCount); 112 SkASSERT(static_cast<int>(fBBox) < kBBoxTypeCount);
113 SkPicture** picture = fPictures + fBBox; 113 SkPicture** picture = fPictures + fBBox;
114 114
115 #ifdef SK_GLYPHCACHE_TRACK_HASH_STATS 115 #ifdef SK_GLYPHCACHE_TRACK_HASH_STATS
116 SkGraphics::PurgeFontCache(); 116 SkGraphics::PurgeFontCache();
117 #endif 117 #endif
118 118
119 if (!*picture) { 119 if (!*picture) {
120 *picture = LoadPicture(fFilename.c_str(), fBBox); 120 *picture = LoadPicture(fFilename.c_str(), fBBox).release();
121 } 121 }
122 if (*picture) { 122 if (*picture) {
123 SkCounterDrawFilter filter(fCount); 123 SkCounterDrawFilter filter(fCount);
124 if (fCount > 0) { 124 if (fCount > 0) {
125 canvas->setDrawFilter(&filter); 125 canvas->setDrawFilter(&filter);
126 } 126 }
127 canvas->drawPicture(*picture); 127 canvas->drawPicture(*picture);
128 canvas->setDrawFilter(nullptr); 128 canvas->setDrawFilter(nullptr);
129 } 129 }
130 130
(...skipping 11 matching lines...) Expand all
142 kLast_BBoxType = kRTree_BBoxType, 142 kLast_BBoxType = kRTree_BBoxType,
143 }; 143 };
144 static const int kBBoxTypeCount = kLast_BBoxType + 1; 144 static const int kBBoxTypeCount = kLast_BBoxType + 1;
145 145
146 SkString fFilename; 146 SkString fFilename;
147 SkPicture* fPictures[kBBoxTypeCount]; 147 SkPicture* fPictures[kBBoxTypeCount];
148 BBoxType fBBox; 148 BBoxType fBBox;
149 SkSize fTileSize; 149 SkSize fTileSize;
150 int fCount; 150 int fCount;
151 151
152 SkPicture* LoadPicture(const char path[], BBoxType bbox) { 152 sk_sp<SkPicture> LoadPicture(const char path[], BBoxType bbox) {
153 SkAutoTUnref<SkPicture> pic; 153 sk_sp<SkPicture> pic;
154 154
155 SkBitmap bm; 155 SkBitmap bm;
156 if (SkImageDecoder::DecodeFile(path, &bm)) { 156 if (SkImageDecoder::DecodeFile(path, &bm)) {
157 bm.setImmutable(); 157 bm.setImmutable();
158 SkPictureRecorder recorder; 158 SkPictureRecorder recorder;
159 SkCanvas* can = recorder.beginRecording(SkIntToScalar(bm.width()), 159 SkCanvas* can = recorder.beginRecording(SkIntToScalar(bm.width()),
160 SkIntToScalar(bm.height()), 160 SkIntToScalar(bm.height()),
161 nullptr, 0); 161 nullptr, 0);
162 can->drawBitmap(bm, 0, 0, nullptr); 162 can->drawBitmap(bm, 0, 0, nullptr);
163 pic.reset(recorder.endRecording()); 163 pic = recorder.finishRecordingAsPicture();
164 } else { 164 } else {
165 SkFILEStream stream(path); 165 SkFILEStream stream(path);
166 if (stream.isValid()) { 166 if (stream.isValid()) {
167 pic.reset(SkPicture::CreateFromStream(&stream)); 167 pic = SkPicture::MakeFromStream(&stream);
168 } else { 168 } else {
169 SkDebugf("coun't load picture at \"path\"\n", path); 169 SkDebugf("coun't load picture at \"path\"\n", path);
170 } 170 }
171 171
172 if (false) { // re-record 172 if (false) { // re-record
173 SkPictureRecorder recorder; 173 SkPictureRecorder recorder;
174 pic->playback(recorder.beginRecording(pic->cullRect().width(), 174 pic->playback(recorder.beginRecording(pic->cullRect().width(),
175 pic->cullRect().height(), 175 pic->cullRect().height(),
176 nullptr, 0)); 176 nullptr, 0));
177 SkAutoTUnref<SkPicture> p2(recorder.endRecording()); 177 sk_sp<SkPicture> p2(recorder.finishRecordingAsPicture());
178 178
179 SkString path2(path); 179 SkString path2(path);
180 path2.append(".new.skp"); 180 path2.append(".new.skp");
181 SkFILEWStream writer(path2.c_str()); 181 SkFILEWStream writer(path2.c_str());
182 p2->serialize(&writer); 182 p2->serialize(&writer);
183 } 183 }
184 } 184 }
185 185
186 if (nullptr == pic) { 186 if (nullptr == pic) {
187 return nullptr; 187 return nullptr;
188 } 188 }
189 189
190 SkAutoTDelete<SkBBHFactory> factory; 190 SkAutoTDelete<SkBBHFactory> factory;
191 switch (bbox) { 191 switch (bbox) {
192 case kNo_BBoxType: 192 case kNo_BBoxType:
193 // no bbox playback necessary 193 // no bbox playback necessary
194 return pic.release(); 194 return std::move(pic);
195 case kRTree_BBoxType: 195 case kRTree_BBoxType:
196 factory.reset(new SkRTreeFactory); 196 factory.reset(new SkRTreeFactory);
197 break; 197 break;
198 default: 198 default:
199 SkASSERT(false); 199 SkASSERT(false);
200 } 200 }
201 201
202 SkPictureRecorder recorder; 202 SkPictureRecorder recorder;
203 pic->playback(recorder.beginRecording(pic->cullRect().width(), 203 pic->playback(recorder.beginRecording(pic->cullRect().width(),
204 pic->cullRect().height(), 204 pic->cullRect().height(),
205 factory.get(), 0)); 205 factory.get(), 0));
206 return recorder.endRecording(); 206 return recorder.finishRecordingAsPicture();
207 } 207 }
208 208
209 typedef SampleView INHERITED; 209 typedef SampleView INHERITED;
210 }; 210 };
211 211
212 SampleView* CreateSamplePictFileView(const char filename[]); 212 SampleView* CreateSamplePictFileView(const char filename[]);
213 SampleView* CreateSamplePictFileView(const char filename[]) { 213 SampleView* CreateSamplePictFileView(const char filename[]) {
214 return new PictFileView(filename); 214 return new PictFileView(filename);
215 } 215 }
216 216
217 ////////////////////////////////////////////////////////////////////////////// 217 //////////////////////////////////////////////////////////////////////////////
218 218
219 #if 0 219 #if 0
220 static SkView* MyFactory() { return new PictFileView; } 220 static SkView* MyFactory() { return new PictFileView; }
221 static SkViewRegister reg(MyFactory); 221 static SkViewRegister reg(MyFactory);
222 #endif 222 #endif
OLDNEW
« no previous file with comments | « samplecode/SampleHT.cpp ('k') | samplecode/SampleTiling.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698