Changeset 142891 in webkit
- Timestamp:
- Feb 14, 2013, 10:49:27 AM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r142890 r142891 1 2013-02-14 Min Qin <qinmin@chromium.org> 2 3 Passing alpha to DeferredImageDecoder once decoding completes 4 https://bugs.webkit.org/show_bug.cgi?id=108892 5 6 Reviewed by Stephen White. 7 8 We should pass hasAlpha value back to the DeferredImageDecoder once decoding is completed 9 Added unit tests in ImageFrameGeneratorTest. 10 11 * platform/graphics/chromium/DeferredImageDecoder.cpp: 12 (WebCore::DeferredImageDecoder::frameHasAlphaAtIndex): 13 * platform/graphics/chromium/ImageFrameGenerator.cpp: 14 (WebCore::ImageFrameGenerator::tryToScale): 15 (WebCore::ImageFrameGenerator::decode): 16 * platform/graphics/chromium/LazyDecodingPixelRef.cpp: 17 (WebCore::LazyDecodingPixelRef::LazyDecodingPixelRef): 18 (WebCore::LazyDecodingPixelRef::onUnlockPixels): 19 * platform/graphics/chromium/LazyDecodingPixelRef.h: 20 (WebCore::LazyDecodingPixelRef::hasAlpha): 21 (LazyDecodingPixelRef): 22 * platform/graphics/chromium/ScaledImageFragment.cpp: 23 (WebCore::ScaledImageFragment::ScaledImageFragment): 24 * platform/graphics/chromium/ScaledImageFragment.h: 25 (WebCore::ScaledImageFragment::create): 26 (ScaledImageFragment): 27 (WebCore::ScaledImageFragment::hasAlpha): 28 1 29 2013-02-14 David Grogan <dgrogan@chromium.org> 2 30 -
trunk/Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp
r141135 r142891 182 182 bool DeferredImageDecoder::frameHasAlphaAtIndex(size_t index) const 183 183 { 184 // FIXME: Synchronize this state with ImageDecodingStore when image is 185 // actually decoded. Return true here is correct in terms of rendering but 186 // may not go through some optimized rendering code path. 187 return m_actualDecoder ? m_actualDecoder->frameHasAlphaAtIndex(index) : true; 184 return m_actualDecoder ? m_actualDecoder->frameHasAlphaAtIndex(index) : m_frameGenerator->hasAlpha(); 188 185 } 189 186 -
trunk/Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp
r141020 r142891 49 49 : m_fullSize(fullSize) 50 50 , m_decodeFailedAndEmpty(false) 51 , m_hasAlpha(true) 51 52 { 52 53 setData(data.get(), allDataReceived); … … 212 213 bool isComplete = frame->status() == ImageFrame::FrameComplete; 213 214 SkBitmap fullSizeBitmap = frame->getSkBitmap(); 215 { 216 MutexLocker lock(m_alphaMutex); 217 m_hasAlpha = !fullSizeBitmap.isOpaque(); 218 } 214 219 ASSERT(fullSizeBitmap.width() == m_fullSize.width() && fullSizeBitmap.height() == m_fullSize.height()); 215 220 … … 217 222 } 218 223 224 bool ImageFrameGenerator::hasAlpha() 225 { 226 MutexLocker lock(m_alphaMutex); 227 return m_hasAlpha; 228 } 229 219 230 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.h
r141020 r142891 68 68 void setImageDecoderFactoryForTesting(PassOwnPtr<ImageDecoderFactory> factory) { m_imageDecoderFactory = factory; } 69 69 70 bool hasAlpha(); 71 70 72 private: 71 73 // These methods are called while m_decodeMutex is locked. … … 81 83 ThreadSafeDataTransport m_data; 82 84 bool m_decodeFailedAndEmpty; 85 bool m_hasAlpha; 83 86 DiscardablePixelRefAllocator m_allocator; 84 87 … … 87 90 // Prevents multiple decode operations on the same data. 88 91 Mutex m_decodeMutex; 92 93 // Protect concurrent access to m_hasAlpha. 94 Mutex m_alphaMutex; 89 95 }; 90 96 -
trunk/Source/WebKit/chromium/ChangeLog
r142879 r142891 1 2013-02-14 Min Qin <qinmin@chromium.org> 2 3 Passing alpha to DeferredImageDecoder once decoding completes 4 https://bugs.webkit.org/show_bug.cgi?id=108892 5 6 Reviewed by Stephen White. 7 8 Add test to check that alpha value is passed from the decoder to ImageFrameGenerator. 9 10 * tests/ImageFrameGeneratorTest.cpp: 11 (WebCore::MockImageDecoderFactory::create): 12 (WebCore::TEST_F): 13 * tests/MockImageDecoder.h: 14 (WebCore::MockImageDecoder::MockImageDecoder): 15 (WebCore::MockImageDecoder::setFrameHasAlpha): 16 (MockImageDecoder): 17 (WebCore::MockImageDecoder::frameHasAlphaAtIndex): 18 1 19 2013-02-08 Andrey Kosyakov <caseq@chromium.org> 2 20 -
trunk/Source/WebKit/chromium/tests/ImageFrameGeneratorTest.cpp
r137508 r142891 125 125 OwnPtr<MockImageDecoder> decoder = MockImageDecoder::create(m_test); 126 126 decoder->setSize(fullSize().width(), fullSize().height()); 127 decoder->setFrameHasAlpha(false); 127 128 return decoder.release(); 128 129 } … … 138 139 EXPECT_EQ(fullImage, tempImage); 139 140 EXPECT_EQ(fullSize(), tempImage->scaledSize()); 141 EXPECT_TRUE(m_generator->hasAlpha()); 140 142 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); 141 143 EXPECT_EQ(0, m_frameBufferRequestCount); … … 153 155 EXPECT_NE(fullImage, scaledImage); 154 156 EXPECT_EQ(scaledSize(), scaledImage->scaledSize()); 157 EXPECT_TRUE(m_generator->hasAlpha()); 155 158 ImageDecodingStore::instance()->unlockCache(m_generator.get(), scaledImage); 156 159 … … 159 162 EXPECT_EQ(scaledImage, tempImage); 160 163 EXPECT_EQ(scaledSize(), tempImage->scaledSize()); 164 EXPECT_TRUE(m_generator->hasAlpha()); 161 165 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); 162 166 EXPECT_EQ(0, m_frameBufferRequestCount); … … 171 175 EXPECT_EQ(1, m_frameBufferRequestCount); 172 176 EXPECT_EQ(scaledSize(), scaledImage->scaledSize()); 177 EXPECT_FALSE(m_generator->hasAlpha()); 173 178 ImageDecodingStore::instance()->unlockCache(m_generator.get(), scaledImage); 174 179 EXPECT_EQ(1, m_decodersDestroyed); … … 178 183 EXPECT_NE(scaledImage, fullImage); 179 184 EXPECT_EQ(fullSize(), fullImage->scaledSize()); 185 EXPECT_FALSE(m_generator->hasAlpha()); 180 186 ImageDecodingStore::instance()->unlockCache(m_generator.get(), fullImage); 181 187 … … 184 190 EXPECT_EQ(scaledImage, tempImage); 185 191 EXPECT_EQ(scaledSize(), tempImage->scaledSize()); 192 EXPECT_FALSE(m_generator->hasAlpha()); 186 193 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); 187 194 EXPECT_EQ(1, m_frameBufferRequestCount); -
trunk/Source/WebKit/chromium/tests/MockImageDecoder.h
r137008 r142891 60 60 } 61 61 62 virtual void setFrameHasAlpha(bool hasAlpha) { m_frameBufferCache[0].setHasAlpha(hasAlpha); } 63 62 64 virtual String filenameExtension() const 63 65 {
Note:
See TracChangeset
for help on using the changeset viewer.