| OLD | NEW |
| 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 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 virtual void frameBufferRequested() | 88 virtual void frameBufferRequested() |
| 89 { | 89 { |
| 90 ++m_frameBufferRequestCount; | 90 ++m_frameBufferRequestCount; |
| 91 } | 91 } |
| 92 | 92 |
| 93 virtual ImageFrame::FrameStatus frameStatus() | 93 virtual ImageFrame::FrameStatus frameStatus() |
| 94 { | 94 { |
| 95 return m_frameStatus; | 95 return m_frameStatus; |
| 96 } | 96 } |
| 97 | 97 |
| 98 virtual size_t frameCount() { return 1; } |
| 99 virtual int repetitionCount() const { return cAnimationNone; } |
| 100 virtual float frameDuration() const { return 0; } |
| 101 |
| 98 protected: | 102 protected: |
| 99 PassOwnPtr<ScaledImageFragment> createCompleteImage(const SkISize& size) | 103 PassOwnPtr<ScaledImageFragment> createCompleteImage(const SkISize& size) |
| 100 { | 104 { |
| 101 SkBitmap bitmap; | 105 SkBitmap bitmap; |
| 102 bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height(
)); | 106 bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height(
)); |
| 103 bitmap.allocPixels(); | 107 bitmap.allocPixels(); |
| 104 return ScaledImageFragment::createComplete(size, 0, bitmap); | 108 return ScaledImageFragment::createComplete(size, 0, bitmap); |
| 105 } | 109 } |
| 106 | 110 |
| 107 void addNewData() | 111 void addNewData() |
| (...skipping 22 matching lines...) Expand all Loading... |
| 130 TEST_F(ImageFrameGeneratorTest, cacheHit) | 134 TEST_F(ImageFrameGeneratorTest, cacheHit) |
| 131 { | 135 { |
| 132 const ScaledImageFragment* fullImage = ImageDecodingStore::instance()->inser
tAndLockCache( | 136 const ScaledImageFragment* fullImage = ImageDecodingStore::instance()->inser
tAndLockCache( |
| 133 m_generator.get(), createCompleteImage(fullSize())); | 137 m_generator.get(), createCompleteImage(fullSize())); |
| 134 EXPECT_EQ(fullSize(), fullImage->scaledSize()); | 138 EXPECT_EQ(fullSize(), fullImage->scaledSize()); |
| 135 ImageDecodingStore::instance()->unlockCache(m_generator.get(), fullImage); | 139 ImageDecodingStore::instance()->unlockCache(m_generator.get(), fullImage); |
| 136 | 140 |
| 137 const ScaledImageFragment* tempImage = m_generator->decodeAndScale(fullSize(
)); | 141 const ScaledImageFragment* tempImage = m_generator->decodeAndScale(fullSize(
)); |
| 138 EXPECT_EQ(fullImage, tempImage); | 142 EXPECT_EQ(fullImage, tempImage); |
| 139 EXPECT_EQ(fullSize(), tempImage->scaledSize()); | 143 EXPECT_EQ(fullSize(), tempImage->scaledSize()); |
| 140 EXPECT_TRUE(m_generator->hasAlpha()); | 144 EXPECT_TRUE(m_generator->hasAlpha(0)); |
| 141 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); | 145 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); |
| 142 EXPECT_EQ(0, m_frameBufferRequestCount); | 146 EXPECT_EQ(0, m_frameBufferRequestCount); |
| 143 } | 147 } |
| 144 | 148 |
| 145 TEST_F(ImageFrameGeneratorTest, cacheMissWithScale) | 149 TEST_F(ImageFrameGeneratorTest, cacheMissWithScale) |
| 146 { | 150 { |
| 147 const ScaledImageFragment* fullImage = ImageDecodingStore::instance()->inser
tAndLockCache( | 151 const ScaledImageFragment* fullImage = ImageDecodingStore::instance()->inser
tAndLockCache( |
| 148 m_generator.get(), createCompleteImage(fullSize())); | 152 m_generator.get(), createCompleteImage(fullSize())); |
| 149 EXPECT_EQ(fullSize(), fullImage->scaledSize()); | 153 EXPECT_EQ(fullSize(), fullImage->scaledSize()); |
| 150 ImageDecodingStore::instance()->unlockCache(m_generator.get(), fullImage); | 154 ImageDecodingStore::instance()->unlockCache(m_generator.get(), fullImage); |
| 151 | 155 |
| 152 // Cache miss because of scaled size not found. | 156 // Cache miss because of scaled size not found. |
| 153 const ScaledImageFragment* scaledImage = m_generator->decodeAndScale(scaledS
ize()); | 157 const ScaledImageFragment* scaledImage = m_generator->decodeAndScale(scaledS
ize()); |
| 154 EXPECT_NE(fullImage, scaledImage); | 158 EXPECT_NE(fullImage, scaledImage); |
| 155 EXPECT_EQ(scaledSize(), scaledImage->scaledSize()); | 159 EXPECT_EQ(scaledSize(), scaledImage->scaledSize()); |
| 156 EXPECT_TRUE(m_generator->hasAlpha()); | 160 EXPECT_TRUE(m_generator->hasAlpha(0)); |
| 157 ImageDecodingStore::instance()->unlockCache(m_generator.get(), scaledImage); | 161 ImageDecodingStore::instance()->unlockCache(m_generator.get(), scaledImage); |
| 158 | 162 |
| 159 // Cache hit. | 163 // Cache hit. |
| 160 const ScaledImageFragment* tempImage = m_generator->decodeAndScale(scaledSiz
e()); | 164 const ScaledImageFragment* tempImage = m_generator->decodeAndScale(scaledSiz
e()); |
| 161 EXPECT_EQ(scaledImage, tempImage); | 165 EXPECT_EQ(scaledImage, tempImage); |
| 162 EXPECT_EQ(scaledSize(), tempImage->scaledSize()); | 166 EXPECT_EQ(scaledSize(), tempImage->scaledSize()); |
| 163 EXPECT_TRUE(m_generator->hasAlpha()); | 167 EXPECT_TRUE(m_generator->hasAlpha(0)); |
| 164 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); | 168 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); |
| 165 EXPECT_EQ(0, m_frameBufferRequestCount); | 169 EXPECT_EQ(0, m_frameBufferRequestCount); |
| 166 } | 170 } |
| 167 | 171 |
| 168 TEST_F(ImageFrameGeneratorTest, cacheMissWithDecodeAndScale) | 172 TEST_F(ImageFrameGeneratorTest, cacheMissWithDecodeAndScale) |
| 169 { | 173 { |
| 170 setFrameStatus(ImageFrame::FrameComplete); | 174 setFrameStatus(ImageFrame::FrameComplete); |
| 171 | 175 |
| 172 // Cache miss. | 176 // Cache miss. |
| 173 const ScaledImageFragment* scaledImage = m_generator->decodeAndScale(scaledS
ize()); | 177 const ScaledImageFragment* scaledImage = m_generator->decodeAndScale(scaledS
ize()); |
| 174 EXPECT_EQ(1, m_frameBufferRequestCount); | 178 EXPECT_EQ(1, m_frameBufferRequestCount); |
| 175 EXPECT_EQ(scaledSize(), scaledImage->scaledSize()); | 179 EXPECT_EQ(scaledSize(), scaledImage->scaledSize()); |
| 176 EXPECT_FALSE(m_generator->hasAlpha()); | 180 EXPECT_FALSE(m_generator->hasAlpha(0)); |
| 177 ImageDecodingStore::instance()->unlockCache(m_generator.get(), scaledImage); | 181 ImageDecodingStore::instance()->unlockCache(m_generator.get(), scaledImage); |
| 178 EXPECT_EQ(1, m_decodersDestroyed); | 182 EXPECT_EQ(1, m_decodersDestroyed); |
| 179 | 183 |
| 180 // Cache hit. | 184 // Cache hit. |
| 181 const ScaledImageFragment* fullImage = m_generator->decodeAndScale(fullSize(
)); | 185 const ScaledImageFragment* fullImage = m_generator->decodeAndScale(fullSize(
)); |
| 182 EXPECT_NE(scaledImage, fullImage); | 186 EXPECT_NE(scaledImage, fullImage); |
| 183 EXPECT_EQ(fullSize(), fullImage->scaledSize()); | 187 EXPECT_EQ(fullSize(), fullImage->scaledSize()); |
| 184 EXPECT_FALSE(m_generator->hasAlpha()); | 188 EXPECT_FALSE(m_generator->hasAlpha(0)); |
| 185 ImageDecodingStore::instance()->unlockCache(m_generator.get(), fullImage); | 189 ImageDecodingStore::instance()->unlockCache(m_generator.get(), fullImage); |
| 186 | 190 |
| 187 // Cache hit. | 191 // Cache hit. |
| 188 const ScaledImageFragment* tempImage = m_generator->decodeAndScale(scaledSiz
e()); | 192 const ScaledImageFragment* tempImage = m_generator->decodeAndScale(scaledSiz
e()); |
| 189 EXPECT_EQ(scaledImage, tempImage); | 193 EXPECT_EQ(scaledImage, tempImage); |
| 190 EXPECT_EQ(scaledSize(), tempImage->scaledSize()); | 194 EXPECT_EQ(scaledSize(), tempImage->scaledSize()); |
| 191 EXPECT_FALSE(m_generator->hasAlpha()); | 195 EXPECT_FALSE(m_generator->hasAlpha(0)); |
| 192 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); | 196 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); |
| 193 EXPECT_EQ(1, m_frameBufferRequestCount); | 197 EXPECT_EQ(1, m_frameBufferRequestCount); |
| 194 } | 198 } |
| 195 | 199 |
| 196 TEST_F(ImageFrameGeneratorTest, cacheMissWithIncompleteDecode) | 200 TEST_F(ImageFrameGeneratorTest, cacheMissWithIncompleteDecode) |
| 197 { | 201 { |
| 198 setFrameStatus(ImageFrame::FramePartial); | 202 setFrameStatus(ImageFrame::FramePartial); |
| 199 | 203 |
| 200 const ScaledImageFragment* tempImage= m_generator->decodeAndScale(fullSize()
); | 204 const ScaledImageFragment* tempImage= m_generator->decodeAndScale(fullSize()
); |
| 201 EXPECT_FALSE(tempImage->isComplete()); | 205 EXPECT_FALSE(tempImage->isComplete()); |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 EXPECT_EQ(1, m_frameBufferRequestCount); | 385 EXPECT_EQ(1, m_frameBufferRequestCount); |
| 382 | 386 |
| 383 ImageDecoder* tempDecoder = 0; | 387 ImageDecoder* tempDecoder = 0; |
| 384 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), f
ullSize(), &tempDecoder)); | 388 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), f
ullSize(), &tempDecoder)); |
| 385 ASSERT_TRUE(tempDecoder); | 389 ASSERT_TRUE(tempDecoder); |
| 386 EXPECT_NE(tempDecoder->frameBufferAtIndex(0)->getSkBitmap().getPixels(), tem
pImage->bitmap().getPixels()); | 390 EXPECT_NE(tempDecoder->frameBufferAtIndex(0)->getSkBitmap().getPixels(), tem
pImage->bitmap().getPixels()); |
| 387 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); | 391 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); |
| 388 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), tempDecoder
); | 392 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), tempDecoder
); |
| 389 } | 393 } |
| 390 | 394 |
| 395 TEST_F(ImageFrameGeneratorTest, resumeDecodeEmptyFrame) |
| 396 { |
| 397 m_generator = ImageFrameGenerator::create(fullSize(), m_data, false, true); |
| 398 m_generator->setImageDecoderFactoryForTesting(MockImageDecoderFactory::creat
e(this)); |
| 399 setFrameStatus(ImageFrame::FrameComplete); |
| 400 |
| 401 const ScaledImageFragment* tempImage = m_generator->decodeAndScale(fullSize(
), 0); |
| 402 EXPECT_TRUE(tempImage->isComplete()); |
| 403 ImageDecodingStore::instance()->unlockCache(m_generator.get(), tempImage); |
| 404 |
| 405 setFrameStatus(ImageFrame::FrameEmpty); |
| 406 EXPECT_FALSE(m_generator->decodeAndScale(fullSize(), 1)); |
| 407 } |
| 408 |
| 409 TEST_F(ImageFrameGeneratorTest, frameHasAlpha) |
| 410 { |
| 411 setFrameStatus(ImageFrame::FramePartial); |
| 412 ImageDecodingStore::instance()->unlockCache(m_generator.get(), m_generator->
decodeAndScale(fullSize(), 1)); |
| 413 EXPECT_TRUE(m_generator->hasAlpha(1)); |
| 414 |
| 415 ImageDecoder* tempDecoder = 0; |
| 416 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), f
ullSize(), &tempDecoder)); |
| 417 ASSERT_TRUE(tempDecoder); |
| 418 static_cast<MockImageDecoder*>(tempDecoder)->setFrameHasAlpha(false); |
| 419 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), tempDecoder
); |
| 420 |
| 421 setFrameStatus(ImageFrame::FrameComplete); |
| 422 ImageDecodingStore::instance()->unlockCache(m_generator.get(), m_generator->
decodeAndScale(fullSize(), 1)); |
| 423 EXPECT_FALSE(m_generator->hasAlpha(1)); |
| 424 } |
| 425 |
| 391 } // namespace | 426 } // namespace |
| OLD | NEW |