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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp

Issue 2290903002: Change (Pass)RefPtr<SkXxx> into sk_sp<SkXxx>. (Closed)
Patch Set: Rebasing... Created 4 years, 3 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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 92
93 DeferredImageDecoder::~DeferredImageDecoder() 93 DeferredImageDecoder::~DeferredImageDecoder()
94 { 94 {
95 } 95 }
96 96
97 String DeferredImageDecoder::filenameExtension() const 97 String DeferredImageDecoder::filenameExtension() const
98 { 98 {
99 return m_actualDecoder ? m_actualDecoder->filenameExtension() : m_filenameEx tension; 99 return m_actualDecoder ? m_actualDecoder->filenameExtension() : m_filenameEx tension;
100 } 100 }
101 101
102 PassRefPtr<SkImage> DeferredImageDecoder::createFrameAtIndex(size_t index) 102 sk_sp<SkImage> DeferredImageDecoder::createFrameAtIndex(size_t index)
103 { 103 {
104 if (m_frameGenerator && m_frameGenerator->decodeFailed()) 104 if (m_frameGenerator && m_frameGenerator->decodeFailed())
105 return nullptr; 105 return nullptr;
106 106
107 prepareLazyDecodedFrames(); 107 prepareLazyDecodedFrames();
108 108
109 if (index < m_frameData.size()) { 109 if (index < m_frameData.size()) {
110 DeferredFrameData* frameData = &m_frameData[index]; 110 DeferredFrameData* frameData = &m_frameData[index];
111 if (m_actualDecoder) 111 if (m_actualDecoder)
112 frameData->m_frameBytes = m_actualDecoder->frameBytesAtIndex(index); 112 frameData->m_frameBytes = m_actualDecoder->frameBytesAtIndex(index);
113 else 113 else
114 frameData->m_frameBytes = m_size.area() * sizeof(ImageFrame::PixelDa ta); 114 frameData->m_frameBytes = m_size.area() * sizeof(ImageFrame::PixelDa ta);
115 // ImageFrameGenerator has the latest known alpha state. There will be a 115 // ImageFrameGenerator has the latest known alpha state. There will be a
116 // performance boost if this frame is opaque. 116 // performance boost if this frame is opaque.
117 DCHECK(m_frameGenerator); 117 DCHECK(m_frameGenerator);
118 return createFrameImageAtIndex(index, !m_frameGenerator->hasAlpha(index) ); 118 return createFrameImageAtIndex(index, !m_frameGenerator->hasAlpha(index) );
119 } 119 }
120 120
121 if (!m_actualDecoder || m_actualDecoder->failed()) 121 if (!m_actualDecoder || m_actualDecoder->failed())
122 return nullptr; 122 return nullptr;
123 123
124 ImageFrame* frame = m_actualDecoder->frameBufferAtIndex(index); 124 ImageFrame* frame = m_actualDecoder->frameBufferAtIndex(index);
125 if (!frame || frame->getStatus() == ImageFrame::FrameEmpty) 125 if (!frame || frame->getStatus() == ImageFrame::FrameEmpty)
126 return nullptr; 126 return nullptr;
127 127
128 return fromSkSp(SkImage::MakeFromBitmap(frame->bitmap())); 128 return SkImage::MakeFromBitmap(frame->bitmap());
129 } 129 }
130 130
131 PassRefPtr<SharedBuffer> DeferredImageDecoder::data() 131 PassRefPtr<SharedBuffer> DeferredImageDecoder::data()
132 { 132 {
133 if (!m_rwBuffer) 133 if (!m_rwBuffer)
134 return nullptr; 134 return nullptr;
135 RefPtr<SkROBuffer> roBuffer = adoptRef(m_rwBuffer->newRBufferSnapshot()); 135 sk_sp<SkROBuffer> roBuffer(m_rwBuffer->newRBufferSnapshot());
136 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(); 136 RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create();
137 SkROBuffer::Iter it(roBuffer.get()); 137 SkROBuffer::Iter it(roBuffer.get());
138 do { 138 do {
139 sharedBuffer->append(static_cast<const char*>(it.data()), it.size()); 139 sharedBuffer->append(static_cast<const char*>(it.data()), it.size());
140 } while (it.next()); 140 } while (it.next());
141 return sharedBuffer.release(); 141 return sharedBuffer.release();
142 } 142 }
143 143
144 void DeferredImageDecoder::setData(PassRefPtr<SharedBuffer> data, bool allDataRe ceived) 144 void DeferredImageDecoder::setData(PassRefPtr<SharedBuffer> data, bool allDataRe ceived)
145 { 145 {
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 m_actualDecoder.reset(); 311 m_actualDecoder.reset();
312 // Hold on to m_rwBuffer, which is still needed by createFrameAtIndex. 312 // Hold on to m_rwBuffer, which is still needed by createFrameAtIndex.
313 } 313 }
314 } 314 }
315 315
316 inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, bool knownToBeOpaqu e) 316 inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, bool knownToBeOpaqu e)
317 { 317 {
318 return SkImageInfo::MakeN32(decodedSize.width(), decodedSize.height(), known ToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); 318 return SkImageInfo::MakeN32(decodedSize.width(), decodedSize.height(), known ToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType);
319 } 319 }
320 320
321 PassRefPtr<SkImage> DeferredImageDecoder::createFrameImageAtIndex(size_t index, bool knownToBeOpaque) 321 sk_sp<SkImage> DeferredImageDecoder::createFrameImageAtIndex(size_t index, bool knownToBeOpaque)
322 { 322 {
323 const SkISize& decodedSize = m_frameGenerator->getFullSize(); 323 const SkISize& decodedSize = m_frameGenerator->getFullSize();
324 ASSERT(decodedSize.width() > 0); 324 ASSERT(decodedSize.width() > 0);
325 ASSERT(decodedSize.height() > 0); 325 ASSERT(decodedSize.height() > 0);
326 326
327 RefPtr<SkROBuffer> roBuffer = adoptRef(m_rwBuffer->newRBufferSnapshot()); 327 sk_sp<SkROBuffer> roBuffer(m_rwBuffer->newRBufferSnapshot());
328 RefPtr<SegmentReader> segmentReader = SegmentReader::createFromSkROBuffer(ro Buffer.release()); 328 RefPtr<SegmentReader> segmentReader = SegmentReader::createFromSkROBuffer(st d::move(roBuffer));
329 DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenera tor, imageInfoFrom(decodedSize, knownToBeOpaque), segmentReader.release(), m_all DataReceived, index, m_frameData[index].m_uniqueID); 329 DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenera tor, imageInfoFrom(decodedSize, knownToBeOpaque), segmentReader.release(), m_all DataReceived, index, m_frameData[index].m_uniqueID);
330 RefPtr<SkImage> image = fromSkSp(SkImage::MakeFromGenerator(generator)); // SkImage takes ownership of the generator. 330 sk_sp<SkImage> image = SkImage::MakeFromGenerator(generator); // SkImage tak es ownership of the generator.
331 if (!image) 331 if (!image)
332 return nullptr; 332 return nullptr;
333 333
334 // We can consider decoded bitmap constant and reuse uniqueID only after all 334 // We can consider decoded bitmap constant and reuse uniqueID only after all
335 // data is received. We reuse it also for multiframe images when image data 335 // data is received. We reuse it also for multiframe images when image data
336 // is partially received but the frame data is fully received. 336 // is partially received but the frame data is fully received.
337 if (m_allDataReceived || m_frameData[index].m_isComplete) { 337 if (m_allDataReceived || m_frameData[index].m_isComplete) {
338 DCHECK(m_frameData[index].m_uniqueID == DecodingImageGenerator::kNeedNew ImageUniqueID || m_frameData[index].m_uniqueID == image->uniqueID()); 338 DCHECK(m_frameData[index].m_uniqueID == DecodingImageGenerator::kNeedNew ImageUniqueID || m_frameData[index].m_uniqueID == image->uniqueID());
339 m_frameData[index].m_uniqueID = image->uniqueID(); 339 m_frameData[index].m_uniqueID = image->uniqueID();
340 } 340 }
341 341
342 generator->setCanYUVDecode(m_canYUVDecode); 342 generator->setCanYUVDecode(m_canYUVDecode);
343 343
344 return image.release(); 344 return image;
345 } 345 }
346 346
347 bool DeferredImageDecoder::hotSpot(IntPoint& hotSpot) const 347 bool DeferredImageDecoder::hotSpot(IntPoint& hotSpot) const
348 { 348 {
349 if (m_actualDecoder) 349 if (m_actualDecoder)
350 return m_actualDecoder->hotSpot(hotSpot); 350 return m_actualDecoder->hotSpot(hotSpot);
351 if (m_hasHotSpot) 351 if (m_hasHotSpot)
352 hotSpot = m_hotSpot; 352 hotSpot = m_hotSpot;
353 return m_hasHotSpot; 353 return m_hasHotSpot;
354 } 354 }
355 355
356 } // namespace blink 356 } // namespace blink
357 357
358 namespace WTF { 358 namespace WTF {
359 template<> struct VectorTraits<blink::DeferredFrameData> : public SimpleClassVec torTraits<blink::DeferredFrameData> { 359 template<> struct VectorTraits<blink::DeferredFrameData> : public SimpleClassVec torTraits<blink::DeferredFrameData> {
360 STATIC_ONLY(VectorTraits); 360 STATIC_ONLY(VectorTraits);
361 static const bool canInitializeWithMemset = false; // Not all DeferredFrameD ata members initialize to 0. 361 static const bool canInitializeWithMemset = false; // Not all DeferredFrameD ata members initialize to 0.
362 }; 362 };
363 } 363 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698