Chromium Code Reviews| Index: third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp |
| diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp b/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp |
| index 9edaf3875ec4dc49a7947909763d15d5cf0d0bfb..618efe9df858f5cf73cef825146874c0fa9554bf 100644 |
| --- a/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp |
| +++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp |
| @@ -30,6 +30,7 @@ |
| #include "platform/ThreadSafeFunctional.h" |
| #include "platform/graphics/ImageDecodingStore.h" |
| #include "platform/graphics/test/MockImageDecoder.h" |
| +#include "platform/image-decoders/SharedBufferSegmentReader.h" |
| #include "public/platform/Platform.h" |
| #include "public/platform/WebThread.h" |
| #include "public/platform/WebTraceLocation.h" |
| @@ -54,8 +55,9 @@ public: |
| void SetUp() override |
| { |
| ImageDecodingStore::instance().setCacheLimitInBytes(1024 * 1024); |
| + m_generator = ImageFrameGenerator::create(fullSize(), false); |
| m_data = SharedBuffer::create(); |
| - m_generator = ImageFrameGenerator::create(fullSize(), m_data, false); |
| + m_segmentReader = adoptRef(new SharedBufferSegmentReader(m_data)); |
| useMockImageDecoderFactory(); |
| m_decodersDestroyed = 0; |
| m_decodeRequestCount = 0; |
| @@ -95,10 +97,9 @@ protected: |
| m_generator->setImageDecoderFactory(MockImageDecoderFactory::create(this, fullSize())); |
| } |
| - void addNewData(bool allDataReceived = false) |
| + void addNewData() |
| { |
| m_data->append("g", 1); |
| - m_generator->setData(m_data, allDataReceived); |
| } |
| void setFrameStatus(ImageFrame::Status status) { m_status = m_nextFrameStatus = status; } |
| @@ -108,12 +109,13 @@ protected: |
| m_frameCount = count; |
| if (count > 1) { |
| m_generator.clear(); |
| - m_generator = ImageFrameGenerator::create(fullSize(), m_data, true, true); |
| + m_generator = ImageFrameGenerator::create(fullSize(), true); |
| useMockImageDecoderFactory(); |
| } |
| } |
| RefPtr<SharedBuffer> m_data; |
| + RefPtr<SegmentReader> m_segmentReader; |
| RefPtr<ImageFrameGenerator> m_generator; |
| int m_decodersDestroyed; |
| int m_decodeRequestCount; |
| @@ -127,11 +129,11 @@ TEST_F(ImageFrameGeneratorTest, incompleteDecode) |
| setFrameStatus(ImageFrame::FramePartial); |
| char buffer[100 * 100 * 4]; |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(1, m_decodeRequestCount); |
| addNewData(); |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(2, m_decodeRequestCount); |
| EXPECT_EQ(0, m_decodersDestroyed); |
| } |
| @@ -141,35 +143,26 @@ TEST_F(ImageFrameGeneratorTest, incompleteDecodeBecomesComplete) |
| setFrameStatus(ImageFrame::FramePartial); |
| char buffer[100 * 100 * 4]; |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(1, m_decodeRequestCount); |
| EXPECT_EQ(0, m_decodersDestroyed); |
| setFrameStatus(ImageFrame::FrameComplete); |
| addNewData(); |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(2, m_decodeRequestCount); |
| EXPECT_EQ(1, m_decodersDestroyed); |
| // Decoder created again. |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(3, m_decodeRequestCount); |
| } |
| -static void decodeThreadMain(ImageFrameGenerator* generator) |
| +static void decodeThreadMain(ImageFrameGenerator* generator, SegmentReader* segmentReader) |
| { |
| char buffer[100 * 100 * 4]; |
| - generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| -} |
| - |
| -static void decodeThreadWithRefEncodedMain(ImageFrameGenerator* generator) |
| -{ |
| - // Image must be complete - refEncodedData otherwise returns null. |
| - char buffer[100 * 100 * 4]; |
| - SkData* data = generator->refEncodedData(); |
| - generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| - data->unref(); |
| + generator->decodeAndScale(segmentReader, false, 0, imageInfo(), buffer, 100 * 4); |
| } |
| TEST_F(ImageFrameGeneratorTest, incompleteDecodeBecomesCompleteMultiThreaded) |
| @@ -177,52 +170,27 @@ TEST_F(ImageFrameGeneratorTest, incompleteDecodeBecomesCompleteMultiThreaded) |
| setFrameStatus(ImageFrame::FramePartial); |
| char buffer[100 * 100 * 4]; |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(1, m_decodeRequestCount); |
| EXPECT_EQ(0, m_decodersDestroyed); |
| - SkData* data = m_generator->refEncodedData(); |
| - EXPECT_EQ(nullptr, data); |
| // LocalFrame can now be decoded completely. |
| setFrameStatus(ImageFrame::FrameComplete); |
| addNewData(); |
| - // addNewData is calling m_generator->setData with allDataReceived == false, which means that |
| - // refEncodedData should return null. |
| - data = m_generator->refEncodedData(); |
| - EXPECT_EQ(nullptr, data); |
| OwnPtr<WebThread> thread = adoptPtr(Platform::current()->createThread("DecodeThread")); |
| - thread->taskRunner()->postTask(BLINK_FROM_HERE, new Task(threadSafeBind(&decodeThreadMain, AllowCrossThreadAccess(m_generator.get())))); |
| + thread->taskRunner()->postTask(BLINK_FROM_HERE, new Task(threadSafeBind(&decodeThreadMain, AllowCrossThreadAccess(m_generator.get()), AllowCrossThreadAccess(m_segmentReader.get())))); |
| thread.clear(); |
| EXPECT_EQ(2, m_decodeRequestCount); |
| EXPECT_EQ(1, m_decodersDestroyed); |
| // Decoder created again. |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(3, m_decodeRequestCount); |
| - addNewData(true); |
| - data = m_generator->refEncodedData(); |
| - ASSERT_TRUE(data); |
| - // To prevent data writting, SkData::unique() should be false. |
| - ASSERT_TRUE(!data->unique()); |
| - |
| - // Thread will also ref and unref the data. |
| - thread = adoptPtr(Platform::current()->createThread("RefEncodedDataThread")); |
| - thread->taskRunner()->postTask(BLINK_FROM_HERE, new Task(threadSafeBind(&decodeThreadWithRefEncodedMain, AllowCrossThreadAccess(m_generator.get())))); |
| - thread.clear(); |
| - EXPECT_EQ(4, m_decodeRequestCount); |
| - |
| - data->unref(); |
| - // m_generator is holding the only reference to SkData now. |
| - ASSERT_TRUE(data->unique()); |
| - |
| - data = m_generator->refEncodedData(); |
| - ASSERT_TRUE(data && !data->unique()); |
| + addNewData(); |
| - // Delete generator, and SkData should have the only reference. |
| + // Delete generator |
|
Peter Kasting
2016/03/23 02:42:58
Nit: Period
scroggo_chromium
2016/03/24 13:59:45
Done.
|
| m_generator = nullptr; |
| - ASSERT_TRUE(data->unique()); |
| - data->unref(); |
| } |
| TEST_F(ImageFrameGeneratorTest, frameHasAlpha) |
| @@ -230,7 +198,7 @@ TEST_F(ImageFrameGeneratorTest, frameHasAlpha) |
| setFrameStatus(ImageFrame::FramePartial); |
| char buffer[100 * 100 * 4]; |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_TRUE(m_generator->hasAlpha(0)); |
| EXPECT_EQ(1, m_decodeRequestCount); |
| @@ -242,7 +210,7 @@ TEST_F(ImageFrameGeneratorTest, frameHasAlpha) |
| EXPECT_EQ(2, m_decodeRequestCount); |
| setFrameStatus(ImageFrame::FrameComplete); |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), false, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(3, m_decodeRequestCount); |
| EXPECT_FALSE(m_generator->hasAlpha(0)); |
| } |
| @@ -253,20 +221,20 @@ TEST_F(ImageFrameGeneratorTest, removeMultiFrameDecoder) |
| setFrameStatus(ImageFrame::FrameComplete); |
| char buffer[100 * 100 * 4]; |
| - m_generator->decodeAndScale(0, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), true, 0, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(1, m_decodeRequestCount); |
| EXPECT_EQ(0, m_decodersDestroyed); |
| setFrameStatus(ImageFrame::FrameComplete); |
| - m_generator->decodeAndScale(1, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), true, 1, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(2, m_decodeRequestCount); |
| EXPECT_EQ(0, m_decodersDestroyed); |
| setFrameStatus(ImageFrame::FrameComplete); |
| // Multi frame decoder should be removed. |
| - m_generator->decodeAndScale(2, imageInfo(), buffer, 100 * 4); |
| + m_generator->decodeAndScale(m_segmentReader.get(), true, 2, imageInfo(), buffer, 100 * 4); |
| EXPECT_EQ(3, m_decodeRequestCount); |
| EXPECT_EQ(1, m_decodersDestroyed); |
| } |