OLD | NEW |
1 #include "DMSrcSink.h" | 1 #include "DMSrcSink.h" |
2 #include "SamplePipeControllers.h" | 2 #include "SamplePipeControllers.h" |
3 #include "SkCommonFlags.h" | 3 #include "SkCommonFlags.h" |
4 #include "SkDocument.h" | 4 #include "SkDocument.h" |
5 #include "SkMultiPictureDraw.h" | 5 #include "SkMultiPictureDraw.h" |
6 #include "SkOSFile.h" | 6 #include "SkOSFile.h" |
7 #include "SkPictureRecorder.h" | 7 #include "SkPictureRecorder.h" |
8 #include "SkRandom.h" | 8 #include "SkRandom.h" |
9 #include "SkSVGDevice.h" | 9 #include "SkSVGDevice.h" |
10 #include "SkStream.h" | 10 #include "SkStream.h" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 | 124 |
125 SkISize SKPSrc::size() const { | 125 SkISize SKPSrc::size() const { |
126 // This may be unnecessarily large. | 126 // This may be unnecessarily large. |
127 return kSKPViewport.roundOut().size(); | 127 return kSKPViewport.roundOut().size(); |
128 } | 128 } |
129 | 129 |
130 Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } | 130 Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } |
131 | 131 |
132 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 132 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
133 | 133 |
| 134 DEFINE_bool(gpuStats, false, "Append GPU stats to the log for each GPU task?"); |
| 135 |
134 GPUSink::GPUSink(GrContextFactory::GLContextType ct, | 136 GPUSink::GPUSink(GrContextFactory::GLContextType ct, |
135 GrGLStandard api, | 137 GrGLStandard api, |
136 int samples, | 138 int samples, |
137 bool dfText, | 139 bool dfText, |
138 bool threaded) | 140 bool threaded) |
139 : fContextType(ct) | 141 : fContextType(ct) |
140 , fGpuAPI(api) | 142 , fGpuAPI(api) |
141 , fSampleCount(samples) | 143 , fSampleCount(samples) |
142 , fUseDFText(dfText) | 144 , fUseDFText(dfText) |
143 , fThreaded(threaded) {} | 145 , fThreaded(threaded) {} |
144 | 146 |
145 int GPUSink::enclave() const { | 147 int GPUSink::enclave() const { |
146 return fThreaded ? kAnyThread_Enclave : kGPU_Enclave; | 148 return fThreaded ? kAnyThread_Enclave : kGPU_Enclave; |
147 } | 149 } |
148 | 150 |
149 Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*) const { | 151 Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log) co
nst { |
150 GrContextFactory factory; | 152 GrContextFactory factory; |
151 const SkISize size = src.size(); | 153 const SkISize size = src.size(); |
152 const SkImageInfo info = | 154 const SkImageInfo info = |
153 SkImageInfo::Make(size.width(), size.height(), kN32_SkColorType, kPremul
_SkAlphaType); | 155 SkImageInfo::Make(size.width(), size.height(), kN32_SkColorType, kPremul
_SkAlphaType); |
154 SkAutoTUnref<SkSurface> surface( | 156 SkAutoTUnref<SkSurface> surface( |
155 NewGpuSurface(&factory, fContextType, fGpuAPI, info, fSampleCount, f
UseDFText)); | 157 NewGpuSurface(&factory, fContextType, fGpuAPI, info, fSampleCount, f
UseDFText)); |
156 if (!surface) { | 158 if (!surface) { |
157 return "Could not create a surface."; | 159 return "Could not create a surface."; |
158 } | 160 } |
159 SkCanvas* canvas = surface->getCanvas(); | 161 SkCanvas* canvas = surface->getCanvas(); |
160 Error err = src.draw(canvas); | 162 Error err = src.draw(canvas); |
161 if (!err.isEmpty()) { | 163 if (!err.isEmpty()) { |
162 return err; | 164 return err; |
163 } | 165 } |
164 canvas->flush(); | 166 canvas->flush(); |
| 167 if (FLAGS_gpuStats) { |
| 168 canvas->getGrContext()->dumpCacheStats(log); |
| 169 canvas->getGrContext()->dumpGpuStats(log); |
| 170 } |
165 dst->allocPixels(info); | 171 dst->allocPixels(info); |
166 canvas->readPixels(dst, 0,0); | 172 canvas->readPixels(dst, 0,0); |
167 if (FLAGS_abandonGpuContext) { | 173 if (FLAGS_abandonGpuContext) { |
168 factory.abandonContexts(); | 174 factory.abandonContexts(); |
169 } | 175 } |
170 return ""; | 176 return ""; |
171 } | 177 } |
172 | 178 |
173 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 179 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
174 | 180 |
175 PDFSink::PDFSink() {} | 181 PDFSink::PDFSink() {} |
176 | 182 |
177 Error PDFSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { | 183 Error PDFSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const
{ |
178 // Print the given DM:Src to a PDF, breaking on 8.5x11 pages. | 184 // Print the given DM:Src to a PDF, breaking on 8.5x11 pages. |
179 SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(dst)); | 185 SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(dst)); |
180 | 186 |
181 int width = src.size().width(), | 187 int width = src.size().width(), |
182 height = src.size().height(); | 188 height = src.size().height(); |
183 | 189 |
184 const int kLetterWidth = 612, // 8.5 * 72 | 190 const int kLetterWidth = 612, // 8.5 * 72 |
185 kLetterHeight = 792; // 11 * 72 | 191 kLetterHeight = 792; // 11 * 72 |
186 const SkRect letter = SkRect::MakeWH(SkIntToScalar(kLetterWidth), | 192 const SkRect letter = SkRect::MakeWH(SkIntToScalar(kLetterWidth), |
187 SkIntToScalar(kLetterHeight)); | 193 SkIntToScalar(kLetterHeight)); |
(...skipping 18 matching lines...) Expand all Loading... |
206 } | 212 } |
207 doc->close(); | 213 doc->close(); |
208 dst->flush(); | 214 dst->flush(); |
209 return ""; | 215 return ""; |
210 } | 216 } |
211 | 217 |
212 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 218 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
213 | 219 |
214 SKPSink::SKPSink() {} | 220 SKPSink::SKPSink() {} |
215 | 221 |
216 Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { | 222 Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const
{ |
217 SkSize size; | 223 SkSize size; |
218 size = src.size(); | 224 size = src.size(); |
219 SkPictureRecorder recorder; | 225 SkPictureRecorder recorder; |
220 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); | 226 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); |
221 if (!err.isEmpty()) { | 227 if (!err.isEmpty()) { |
222 return err; | 228 return err; |
223 } | 229 } |
224 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); | 230 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); |
225 pic->serialize(dst); | 231 pic->serialize(dst); |
226 return ""; | 232 return ""; |
227 } | 233 } |
228 | 234 |
229 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 235 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
230 | 236 |
231 SVGSink::SVGSink() {} | 237 SVGSink::SVGSink() {} |
232 | 238 |
233 Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { | 239 Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const
{ |
234 SkAutoTUnref<SkBaseDevice> device(SkSVGDevice::Create(src.size(), dst)); | 240 SkAutoTUnref<SkBaseDevice> device(SkSVGDevice::Create(src.size(), dst)); |
235 SkCanvas canvas(device); | 241 SkCanvas canvas(device); |
236 return src.draw(&canvas); | 242 return src.draw(&canvas); |
237 } | 243 } |
238 | 244 |
239 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 245 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
240 | 246 |
241 RasterSink::RasterSink(SkColorType colorType) : fColorType(colorType) {} | 247 RasterSink::RasterSink(SkColorType colorType) : fColorType(colorType) {} |
242 | 248 |
243 Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*) const { | 249 Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) con
st { |
244 const SkISize size = src.size(); | 250 const SkISize size = src.size(); |
245 // If there's an appropriate alpha type for this color type, use it, otherwi
se use premul. | 251 // If there's an appropriate alpha type for this color type, use it, otherwi
se use premul. |
246 SkAlphaType alphaType = kPremul_SkAlphaType; | 252 SkAlphaType alphaType = kPremul_SkAlphaType; |
247 (void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType); | 253 (void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType); |
248 | 254 |
249 dst->allocPixels(SkImageInfo::Make(size.width(), size.height(), fColorType,
alphaType)); | 255 dst->allocPixels(SkImageInfo::Make(size.width(), size.height(), fColorType,
alphaType)); |
250 dst->eraseColor(SK_ColorTRANSPARENT); | 256 dst->eraseColor(SK_ColorTRANSPARENT); |
251 SkCanvas canvas(*dst); | 257 SkCanvas canvas(*dst); |
252 return src.draw(&canvas); | 258 return src.draw(&canvas); |
253 } | 259 } |
254 | 260 |
255 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 261 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
256 | 262 |
257 ViaMatrix::ViaMatrix(SkMatrix matrix, Sink* sink) : fMatrix(matrix), fSink(sink)
{} | 263 ViaMatrix::ViaMatrix(SkMatrix matrix, Sink* sink) : fMatrix(matrix), fSink(sink)
{} |
258 | 264 |
259 Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const
{ | 265 Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStr
ing* log) const { |
260 // We turn our arguments into a Src, then draw that Src into our Sink to fil
l bitmap or stream. | 266 // We turn our arguments into a Src, then draw that Src into our Sink to fil
l bitmap or stream. |
261 struct ProxySrc : public Src { | 267 struct ProxySrc : public Src { |
262 const Src& fSrc; | 268 const Src& fSrc; |
263 SkMatrix fMatrix; | 269 SkMatrix fMatrix; |
264 ProxySrc(const Src& src, SkMatrix matrix) : fSrc(src), fMatrix(matrix) {
} | 270 ProxySrc(const Src& src, SkMatrix matrix) : fSrc(src), fMatrix(matrix) {
} |
265 | 271 |
266 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 272 Error draw(SkCanvas* canvas) const SK_OVERRIDE { |
267 canvas->concat(fMatrix); | 273 canvas->concat(fMatrix); |
268 return fSrc.draw(canvas); | 274 return fSrc.draw(canvas); |
269 } | 275 } |
270 SkISize size() const SK_OVERRIDE { return fSrc.size(); } | 276 SkISize size() const SK_OVERRIDE { return fSrc.size(); } |
271 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 277 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. |
272 } proxy(src, fMatrix); | 278 } proxy(src, fMatrix); |
273 return fSink->draw(proxy, bitmap, stream); | 279 return fSink->draw(proxy, bitmap, stream, log); |
274 } | 280 } |
275 | 281 |
276 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 282 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
277 | 283 |
278 ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {} | 284 ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {} |
279 | 285 |
280 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const { | 286 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin
g* log) const { |
281 // We turn ourselves into another Src that draws our argument into bitmap/st
ream via pipe. | 287 // We turn ourselves into another Src that draws our argument into bitmap/st
ream via pipe. |
282 struct ProxySrc : public Src { | 288 struct ProxySrc : public Src { |
283 const Src& fSrc; | 289 const Src& fSrc; |
284 ProxySrc(const Src& src) : fSrc(src) {} | 290 ProxySrc(const Src& src) : fSrc(src) {} |
285 | 291 |
286 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 292 Error draw(SkCanvas* canvas) const SK_OVERRIDE { |
287 SkISize size = this->size(); | 293 SkISize size = this->size(); |
288 PipeController controller(canvas, &SkImageDecoder::DecodeMemory); | 294 PipeController controller(canvas, &SkImageDecoder::DecodeMemory); |
289 SkGPipeWriter pipe; | 295 SkGPipeWriter pipe; |
290 const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which does
n't use any flags. | 296 const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which does
n't use any flags. |
291 return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width
(), size.height())); | 297 return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width
(), size.height())); |
292 } | 298 } |
293 SkISize size() const SK_OVERRIDE { return fSrc.size(); } | 299 SkISize size() const SK_OVERRIDE { return fSrc.size(); } |
294 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 300 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. |
295 } proxy(src); | 301 } proxy(src); |
296 return fSink->draw(proxy, bitmap, stream); | 302 return fSink->draw(proxy, bitmap, stream, log); |
297 } | 303 } |
298 | 304 |
299 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 305 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
300 | 306 |
301 ViaSerialization::ViaSerialization(Sink* sink) : fSink(sink) {} | 307 ViaSerialization::ViaSerialization(Sink* sink) : fSink(sink) {} |
302 | 308 |
303 Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream
) const { | 309 Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream
, SkString* log) |
| 310 const { |
304 // Record our Src into a picture. | 311 // Record our Src into a picture. |
305 SkSize size; | 312 SkSize size; |
306 size = src.size(); | 313 size = src.size(); |
307 SkPictureRecorder recorder; | 314 SkPictureRecorder recorder; |
308 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); | 315 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); |
309 if (!err.isEmpty()) { | 316 if (!err.isEmpty()) { |
310 return err; | 317 return err; |
311 } | 318 } |
312 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); | 319 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); |
313 | 320 |
314 // Serialize it and then deserialize it. | 321 // Serialize it and then deserialize it. |
315 SkDynamicMemoryWStream wStream; | 322 SkDynamicMemoryWStream wStream; |
316 pic->serialize(&wStream); | 323 pic->serialize(&wStream); |
317 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); | 324 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); |
318 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream)); | 325 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream)); |
319 | 326 |
320 // Turn that deserialized picture into a Src, draw it into our Sink to fill
bitmap or stream. | 327 // Turn that deserialized picture into a Src, draw it into our Sink to fill
bitmap or stream. |
321 struct ProxySrc : public Src { | 328 struct ProxySrc : public Src { |
322 const SkPicture* fPic; | 329 const SkPicture* fPic; |
323 const SkISize fSize; | 330 const SkISize fSize; |
324 ProxySrc(const SkPicture* pic, SkISize size) : fPic(pic), fSize(size) {} | 331 ProxySrc(const SkPicture* pic, SkISize size) : fPic(pic), fSize(size) {} |
325 | 332 |
326 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 333 Error draw(SkCanvas* canvas) const SK_OVERRIDE { |
327 canvas->drawPicture(fPic); | 334 canvas->drawPicture(fPic); |
328 return ""; | 335 return ""; |
329 } | 336 } |
330 SkISize size() const SK_OVERRIDE { return fSize; } | 337 SkISize size() const SK_OVERRIDE { return fSize; } |
331 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 338 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. |
332 } proxy(deserialized, src.size()); | 339 } proxy(deserialized, src.size()); |
333 return fSink->draw(proxy, bitmap, stream); | 340 return fSink->draw(proxy, bitmap, stream, log); |
334 } | 341 } |
335 | 342 |
336 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 343 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
337 | 344 |
338 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) | 345 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) |
339 : fW(w) | 346 : fW(w) |
340 , fH(h) | 347 , fH(h) |
341 , fFactory(factory) | 348 , fFactory(factory) |
342 , fSink(sink) {} | 349 , fSink(sink) {} |
343 | 350 |
344 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const
{ | 351 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri
ng* log) const { |
345 // Record our Src into a picture. | 352 // Record our Src into a picture. |
346 SkSize size; | 353 SkSize size; |
347 size = src.size(); | 354 size = src.size(); |
348 SkPictureRecorder recorder; | 355 SkPictureRecorder recorder; |
349 Error err = src.draw(recorder.beginRecording(size.width(), size.height(), fF
actory.get())); | 356 Error err = src.draw(recorder.beginRecording(size.width(), size.height(), fF
actory.get())); |
350 if (!err.isEmpty()) { | 357 if (!err.isEmpty()) { |
351 return err; | 358 return err; |
352 } | 359 } |
353 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); | 360 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); |
354 | 361 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 SkAutoTUnref<SkImage> image(surfaces[i+xTiles*j]->newImageSn
apshot()); | 396 SkAutoTUnref<SkImage> image(surfaces[i+xTiles*j]->newImageSn
apshot()); |
390 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(
j*fH)); | 397 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(
j*fH)); |
391 } | 398 } |
392 } | 399 } |
393 surfaces.unrefAll(); | 400 surfaces.unrefAll(); |
394 return ""; | 401 return ""; |
395 } | 402 } |
396 SkISize size() const SK_OVERRIDE { return fSize; } | 403 SkISize size() const SK_OVERRIDE { return fSize; } |
397 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 404 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. |
398 } proxy(fW, fH, pic, src.size()); | 405 } proxy(fW, fH, pic, src.size()); |
399 return fSink->draw(proxy, bitmap, stream); | 406 return fSink->draw(proxy, bitmap, stream, log); |
400 } | 407 } |
401 | 408 |
402 } // namespace DM | 409 } // namespace DM |
OLD | NEW |