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

Side by Side Diff: src/images/SkImageDecoder.cpp

Issue 19109002: Add the lazy decoder from PictureFlags to SkImageDecoder (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Remove unnecessary dependency Created 7 years, 5 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
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
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 8
9 #include "SkImageDecoder.h" 9 #include "SkImageDecoder.h"
10 #include "SkBitmap.h" 10 #include "SkBitmap.h"
11 #include "SkData.h"
12 #include "SkForceLinking.h"
11 #include "SkImagePriv.h" 13 #include "SkImagePriv.h"
12 #include "SkPixelRef.h" 14 #include "SkPixelRef.h"
13 #include "SkStream.h" 15 #include "SkStream.h"
14 #include "SkTemplates.h" 16 #include "SkTemplates.h"
15 #include "SkCanvas.h" 17 #include "SkCanvas.h"
16 18
19 __SK_FORCE_IMAGE_DECODER_LINKING;
scroggo 2013/07/15 15:09:28 If we move __SK_FORCE_IMAGE_DECODER_LINKING here,
20
17 SK_DEFINE_INST_COUNT(SkImageDecoder::Peeker) 21 SK_DEFINE_INST_COUNT(SkImageDecoder::Peeker)
18 SK_DEFINE_INST_COUNT(SkImageDecoder::Chooser) 22 SK_DEFINE_INST_COUNT(SkImageDecoder::Chooser)
19 SK_DEFINE_INST_COUNT(SkImageDecoderFactory) 23 SK_DEFINE_INST_COUNT(SkImageDecoderFactory)
20 24
21 static SkBitmap::Config gDeviceConfig = SkBitmap::kNo_Config; 25 static SkBitmap::Config gDeviceConfig = SkBitmap::kNo_Config;
22 26
23 SkBitmap::Config SkImageDecoder::GetDeviceConfig() 27 SkBitmap::Config SkImageDecoder::GetDeviceConfig()
24 { 28 {
25 return gDeviceConfig; 29 return gDeviceConfig;
26 } 30 }
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(file)); 277 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(file));
274 if (stream.get()) { 278 if (stream.get()) {
275 if (SkImageDecoder::DecodeStream(stream, bm, pref, mode, format)) { 279 if (SkImageDecoder::DecodeStream(stream, bm, pref, mode, format)) {
276 bm->pixelRef()->setURI(file); 280 bm->pixelRef()->setURI(file);
277 return true; 281 return true;
278 } 282 }
279 } 283 }
280 return false; 284 return false;
281 } 285 }
282 286
287 SkLruImageCache SkImageDecoder::fLruImageCache(1024*1024);
sglez 2013/07/13 04:11:27 Leon, why 1024^2? I copied this from what you have
scroggo 2013/07/15 15:09:28 This was arbitrary. I may have based it off of a n
288 SkBitmapFactory SkImageDecoder::fLazyBitmapFactory(&SkImageDecoder::DecodeMemory ToTarget);
289
290 bool SkImageDecoder::LazyDecodeBitmap(const void* buffer, size_t size, SkBitmap* bitmap) {
291 void* copiedBuffer = sk_malloc_throw(size);
292 memcpy(copiedBuffer, buffer, size);
293 SkAutoDataUnref data(SkData::NewFromMalloc(copiedBuffer, size));
294
295 static bool gOnce;
296 if (!gOnce) {
scroggo 2013/07/15 15:09:28 This is not threadsafe. In its current use in our
297 fLazyBitmapFactory.setImageCache(&fLruImageCache);
298 gOnce = true;
299 }
300 return fLazyBitmapFactory.installPixelRef(data, bitmap);
301 }
302
283 bool SkImageDecoder::DecodeMemory(const void* buffer, size_t size, SkBitmap* bm, 303 bool SkImageDecoder::DecodeMemory(const void* buffer, size_t size, SkBitmap* bm,
284 SkBitmap::Config pref, Mode mode, Format* format) { 304 SkBitmap::Config pref, Mode mode, Format* format) {
285 if (0 == size) { 305 if (0 == size) {
286 return false; 306 return false;
287 } 307 }
288 SkASSERT(buffer); 308 SkASSERT(buffer);
289 309
290 SkMemoryStream stream(buffer, size); 310 SkMemoryStream stream(buffer, size);
291 return SkImageDecoder::DecodeStream(&stream, bm, pref, mode, format); 311 return SkImageDecoder::DecodeStream(&stream, bm, pref, mode, format);
292 } 312 }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 if (kUnknown_Format == *format) { 474 if (kUnknown_Format == *format) {
455 if (stream->rewind()) { 475 if (stream->rewind()) {
456 *format = GetStreamFormat(stream); 476 *format = GetStreamFormat(stream);
457 } 477 }
458 } 478 }
459 } 479 }
460 delete codec; 480 delete codec;
461 } 481 }
462 return success; 482 return success;
463 } 483 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698