Index: Source/core/platform/graphics/BitmapImageTest.cpp |
diff --git a/Source/core/platform/graphics/BitmapImageTest.cpp b/Source/core/platform/graphics/BitmapImageTest.cpp |
index 734f38734232b63ae5a3773432b67f6fa5a97b42..b5c9b2c57690508ed52081b5f63d47623827aa95 100644 |
--- a/Source/core/platform/graphics/BitmapImageTest.cpp |
+++ b/Source/core/platform/graphics/BitmapImageTest.cpp |
@@ -70,6 +70,7 @@ public: |
size_t frameCount() { return m_image->frameCount(); } |
void setCurrentFrame(size_t frame) { m_image->m_currentFrame = frame; } |
size_t frameDecodedSize(size_t frame) { return m_image->m_frames[frame].m_frameBytes; } |
+ size_t decodedFramesCount() const { return m_image->m_frames.size(); } |
void loadImage(const char* fileName) |
{ |
@@ -77,13 +78,27 @@ public: |
ASSERT_TRUE(imageData.get()); |
m_image->setData(imageData, true); |
- EXPECT_EQ(0u, m_image->decodedSize()); |
+ EXPECT_EQ(0u, decodedSize()); |
size_t frameCount = m_image->frameCount(); |
for (size_t i = 0; i < frameCount; ++i) |
m_image->frameAtIndex(i); |
} |
+ size_t decodedSize() |
+ { |
+ // In the context of this test, the following loop will give the correct result, but only because the test |
+ // forces all frames to be decoded in loadImage() above. There is no general guarantee that frameDecodedSize() |
+ // is up-to-date. Because of how multi frame images (like GIF) work, requesting one frame to be decoded may |
+ // require other previous frames to be decoded as well. In those cases frameDecodedSize() wouldn't return the |
+ // correct thing for the previous frame because the decoded size wouldn't have propagated upwards to the |
+ // BitmapImage frame cache. |
+ size_t size = 0; |
+ for (size_t i = 0; i < decodedFramesCount(); ++i) |
+ size += frameDecodedSize(i); |
+ return size; |
+ } |
+ |
protected: |
virtual void SetUp() OVERRIDE |
{ |
@@ -97,7 +112,7 @@ protected: |
TEST_F(BitmapImageTest, destroyDecodedDataExceptCurrentFrame) |
{ |
loadImage("/LayoutTests/fast/images/resources/animated-10color.gif"); |
- size_t totalSize = m_image->decodedSize(); |
+ size_t totalSize = decodedSize(); |
size_t frame = frameCount() / 2; |
setCurrentFrame(frame); |
size_t size = frameDecodedSize(frame); |
@@ -109,11 +124,11 @@ TEST_F(BitmapImageTest, destroyDecodedDataExceptCurrentFrame) |
TEST_F(BitmapImageTest, destroyAllDecodedData) |
{ |
loadImage("/LayoutTests/fast/images/resources/animated-10color.gif"); |
- size_t decodedSize = m_image->decodedSize(); |
- EXPECT_GT(decodedSize, 0u); |
+ size_t totalSize = decodedSize(); |
+ EXPECT_GT(totalSize, 0u); |
destroyDecodedData(true); |
- EXPECT_EQ(-static_cast<int>(decodedSize), m_imageObserver.m_lastDecodedSizeChangedDelta); |
- EXPECT_EQ(0u, m_image->decodedSize()); |
+ EXPECT_EQ(-static_cast<int>(totalSize), m_imageObserver.m_lastDecodedSizeChangedDelta); |
+ EXPECT_EQ(0u, decodedSize()); |
} |
} // namespace |