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: third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp

Issue 1460523002: GIF decoding to Index8, unit tests and misusing unit test as benchmark (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comment #25 processed. Created 4 years, 11 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 return; 221 return;
222 222
223 m_size = m_actualDecoder->size(); 223 m_size = m_actualDecoder->size();
224 m_filenameExtension = m_actualDecoder->filenameExtension(); 224 m_filenameExtension = m_actualDecoder->filenameExtension();
225 // JPEG images support YUV decoding: other decoders do not, WEBP could in fu ture. 225 // JPEG images support YUV decoding: other decoders do not, WEBP could in fu ture.
226 m_canYUVDecode = RuntimeEnabledFeatures::decodeToYUVEnabled() && (m_filename Extension == "jpg"); 226 m_canYUVDecode = RuntimeEnabledFeatures::decodeToYUVEnabled() && (m_filename Extension == "jpg");
227 m_hasColorProfile = m_actualDecoder->hasColorProfile(); 227 m_hasColorProfile = m_actualDecoder->hasColorProfile();
228 228
229 const bool isSingleFrame = m_actualDecoder->repetitionCount() == cAnimationN one || (m_allDataReceived && m_actualDecoder->frameCount() == 1u); 229 const bool isSingleFrame = m_actualDecoder->repetitionCount() == cAnimationN one || (m_allDataReceived && m_actualDecoder->frameCount() == 1u);
230 m_frameGenerator = ImageFrameGenerator::create(SkISize::Make(m_actualDecoder ->decodedSize().width(), m_actualDecoder->decodedSize().height()), m_data, m_all DataReceived, !isSingleFrame); 230 m_frameGenerator = ImageFrameGenerator::create(SkISize::Make(m_actualDecoder ->decodedSize().width(), m_actualDecoder->decodedSize().height()), m_data, m_all DataReceived, !isSingleFrame);
231 // GIF images support Index8 decoding: other decoders do not.
232 m_frameGenerator->setDecoderCanDecodeToIndex8(m_filenameExtension == "gif");
231 } 233 }
232 234
233 void DeferredImageDecoder::prepareLazyDecodedFrames() 235 void DeferredImageDecoder::prepareLazyDecodedFrames()
234 { 236 {
235 if (!s_enabled 237 if (!s_enabled
236 || !m_actualDecoder 238 || !m_actualDecoder
237 || !m_actualDecoder->isSizeAvailable() 239 || !m_actualDecoder->isSizeAvailable()
238 || m_actualDecoder->filenameExtension() == "ico") 240 || m_actualDecoder->filenameExtension() == "ico")
239 return; 241 return;
240 242
(...skipping 20 matching lines...) Expand all
261 m_frameData[lastFrame].m_isComplete = m_actualDecoder->frameIsCompleteAt Index(lastFrame); 263 m_frameData[lastFrame].m_isComplete = m_actualDecoder->frameIsCompleteAt Index(lastFrame);
262 } 264 }
263 265
264 if (m_allDataReceived) { 266 if (m_allDataReceived) {
265 m_repetitionCount = m_actualDecoder->repetitionCount(); 267 m_repetitionCount = m_actualDecoder->repetitionCount();
266 m_actualDecoder.clear(); 268 m_actualDecoder.clear();
267 m_data = nullptr; 269 m_data = nullptr;
268 } 270 }
269 } 271 }
270 272
271 inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, bool knownToBeOpaqu e) 273 static inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, bool knownTo BeOpaque)
272 { 274 {
273 return SkImageInfo::MakeN32(decodedSize.width(), decodedSize.height(), known ToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); 275 return SkImageInfo::MakeN32(decodedSize.width(), decodedSize.height(), known ToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType);
274 } 276 }
275 277
276 PassRefPtr<SkImage> DeferredImageDecoder::createFrameImageAtIndex(size_t index, bool knownToBeOpaque) const 278 PassRefPtr<SkImage> DeferredImageDecoder::createFrameImageAtIndex(size_t index, bool knownToBeOpaque) const
277 { 279 {
278 const SkISize& decodedSize = m_frameGenerator->getFullSize(); 280 const SkISize& decodedSize = m_frameGenerator->getFullSize();
279 ASSERT(decodedSize.width() > 0); 281 ASSERT(decodedSize.width() > 0);
280 ASSERT(decodedSize.height() > 0); 282 ASSERT(decodedSize.height() > 0);
281 283
282 DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenera tor, imageInfoFrom(decodedSize, knownToBeOpaque), index); 284 const SkImageInfo info = m_frameGenerator->canDecodeTo(index, kIndex_8_SkCol orType)
283 RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator)); // S kImage takes ownership of the generator. 285 ? SkImageInfo::Make(decodedSize.width(), decodedSize.height(), kIndex_8_ SkColorType,
286 knownToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType)
287 : imageInfoFrom(decodedSize, knownToBeOpaque);
288
289 DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenera tor, info, index);
290 RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator));
284 if (!image) 291 if (!image)
285 return nullptr; 292 return nullptr;
286 293
287 generator->setGenerationId(image->uniqueID()); 294 generator->setGenerationId(image->uniqueID());
288 generator->setCanYUVDecode(m_canYUVDecode); 295 generator->setCanYUVDecode(m_canYUVDecode);
289 296
290 return image.release(); 297 return image.release();
291 } 298 }
292 299
293 bool DeferredImageDecoder::hotSpot(IntPoint& hotSpot) const 300 bool DeferredImageDecoder::hotSpot(IntPoint& hotSpot) const
294 { 301 {
295 // TODO: Implement. 302 // TODO: Implement.
296 return m_actualDecoder ? m_actualDecoder->hotSpot(hotSpot) : false; 303 return m_actualDecoder ? m_actualDecoder->hotSpot(hotSpot) : false;
297 } 304 }
298 305
299 } // namespace blink 306 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698