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 10 matching lines...) Expand all Loading... |
21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 */ | 24 */ |
25 | 25 |
26 #include "platform/graphics/ImageDecodingStore.h" | 26 #include "platform/graphics/ImageDecodingStore.h" |
27 | 27 |
28 #include "platform/graphics/ImageFrameGenerator.h" | 28 #include "platform/graphics/ImageFrameGenerator.h" |
29 #include "platform/graphics/test/MockImageDecoder.h" | 29 #include "platform/graphics/test/MockImageDecoder.h" |
30 #include "testing/gtest/include/gtest/gtest.h" | 30 #include "testing/gtest/include/gtest/gtest.h" |
31 #include <memory> | |
32 | 31 |
33 namespace blink { | 32 namespace blink { |
34 | 33 |
35 class ImageDecodingStoreTest : public ::testing::Test, public MockImageDecoderCl
ient { | 34 class ImageDecodingStoreTest : public ::testing::Test, public MockImageDecoderCl
ient { |
36 public: | 35 public: |
37 void SetUp() override | 36 void SetUp() override |
38 { | 37 { |
39 ImageDecodingStore::instance().setCacheLimitInBytes(1024 * 1024); | 38 ImageDecodingStore::instance().setCacheLimitInBytes(1024 * 1024); |
40 m_generator = ImageFrameGenerator::create(SkISize::Make(100, 100), true)
; | 39 m_generator = ImageFrameGenerator::create(SkISize::Make(100, 100), true)
; |
41 m_decodersDestroyed = 0; | 40 m_decodersDestroyed = 0; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 ImageDecodingStore::instance().setCacheLimitInBytes(0); | 75 ImageDecodingStore::instance().setCacheLimitInBytes(0); |
77 } | 76 } |
78 | 77 |
79 RefPtr<ImageFrameGenerator> m_generator; | 78 RefPtr<ImageFrameGenerator> m_generator; |
80 int m_decodersDestroyed; | 79 int m_decodersDestroyed; |
81 }; | 80 }; |
82 | 81 |
83 TEST_F(ImageDecodingStoreTest, insertDecoder) | 82 TEST_F(ImageDecodingStoreTest, insertDecoder) |
84 { | 83 { |
85 const SkISize size = SkISize::Make(1, 1); | 84 const SkISize size = SkISize::Make(1, 1); |
86 std::unique_ptr<ImageDecoder> decoder = MockImageDecoder::create(this); | 85 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this); |
87 decoder->setSize(1, 1); | 86 decoder->setSize(1, 1); |
88 const ImageDecoder* refDecoder = decoder.get(); | 87 const ImageDecoder* refDecoder = decoder.get(); |
89 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder)); | 88 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder)); |
90 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); | 89 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); |
91 EXPECT_EQ(4u, ImageDecodingStore::instance().memoryUsageInBytes()); | 90 EXPECT_EQ(4u, ImageDecodingStore::instance().memoryUsageInBytes()); |
92 | 91 |
93 ImageDecoder* testDecoder; | 92 ImageDecoder* testDecoder; |
94 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), si
ze, &testDecoder)); | 93 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), si
ze, &testDecoder)); |
95 EXPECT_TRUE(testDecoder); | 94 EXPECT_TRUE(testDecoder); |
96 EXPECT_EQ(refDecoder, testDecoder); | 95 EXPECT_EQ(refDecoder, testDecoder); |
97 ImageDecodingStore::instance().unlockDecoder(m_generator.get(), testDecoder)
; | 96 ImageDecodingStore::instance().unlockDecoder(m_generator.get(), testDecoder)
; |
98 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); | 97 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); |
99 } | 98 } |
100 | 99 |
101 TEST_F(ImageDecodingStoreTest, evictDecoder) | 100 TEST_F(ImageDecodingStoreTest, evictDecoder) |
102 { | 101 { |
103 std::unique_ptr<ImageDecoder> decoder1 = MockImageDecoder::create(this); | 102 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this); |
104 std::unique_ptr<ImageDecoder> decoder2 = MockImageDecoder::create(this); | 103 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this); |
105 std::unique_ptr<ImageDecoder> decoder3 = MockImageDecoder::create(this); | 104 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this); |
106 decoder1->setSize(1, 1); | 105 decoder1->setSize(1, 1); |
107 decoder2->setSize(2, 2); | 106 decoder2->setSize(2, 2); |
108 decoder3->setSize(3, 3); | 107 decoder3->setSize(3, 3); |
109 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder1)); | 108 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder1)); |
110 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder2)); | 109 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder2)); |
111 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder3)); | 110 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder3)); |
112 EXPECT_EQ(3, ImageDecodingStore::instance().cacheEntries()); | 111 EXPECT_EQ(3, ImageDecodingStore::instance().cacheEntries()); |
113 EXPECT_EQ(56u, ImageDecodingStore::instance().memoryUsageInBytes()); | 112 EXPECT_EQ(56u, ImageDecodingStore::instance().memoryUsageInBytes()); |
114 | 113 |
115 evictOneCache(); | 114 evictOneCache(); |
116 EXPECT_EQ(2, ImageDecodingStore::instance().cacheEntries()); | 115 EXPECT_EQ(2, ImageDecodingStore::instance().cacheEntries()); |
117 EXPECT_EQ(52u, ImageDecodingStore::instance().memoryUsageInBytes()); | 116 EXPECT_EQ(52u, ImageDecodingStore::instance().memoryUsageInBytes()); |
118 | 117 |
119 evictOneCache(); | 118 evictOneCache(); |
120 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); | 119 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); |
121 EXPECT_EQ(36u, ImageDecodingStore::instance().memoryUsageInBytes()); | 120 EXPECT_EQ(36u, ImageDecodingStore::instance().memoryUsageInBytes()); |
122 | 121 |
123 evictOneCache(); | 122 evictOneCache(); |
124 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries()); | 123 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries()); |
125 EXPECT_FALSE(ImageDecodingStore::instance().memoryUsageInBytes()); | 124 EXPECT_FALSE(ImageDecodingStore::instance().memoryUsageInBytes()); |
126 } | 125 } |
127 | 126 |
128 TEST_F(ImageDecodingStoreTest, decoderInUseNotEvicted) | 127 TEST_F(ImageDecodingStoreTest, decoderInUseNotEvicted) |
129 { | 128 { |
130 std::unique_ptr<ImageDecoder> decoder1 = MockImageDecoder::create(this); | 129 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this); |
131 std::unique_ptr<ImageDecoder> decoder2 = MockImageDecoder::create(this); | 130 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this); |
132 std::unique_ptr<ImageDecoder> decoder3 = MockImageDecoder::create(this); | 131 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this); |
133 decoder1->setSize(1, 1); | 132 decoder1->setSize(1, 1); |
134 decoder2->setSize(2, 2); | 133 decoder2->setSize(2, 2); |
135 decoder3->setSize(3, 3); | 134 decoder3->setSize(3, 3); |
136 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder1)); | 135 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder1)); |
137 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder2)); | 136 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder2)); |
138 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder3)); | 137 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder3)); |
139 EXPECT_EQ(3, ImageDecodingStore::instance().cacheEntries()); | 138 EXPECT_EQ(3, ImageDecodingStore::instance().cacheEntries()); |
140 | 139 |
141 ImageDecoder* testDecoder; | 140 ImageDecoder* testDecoder; |
142 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), Sk
ISize::Make(2, 2), &testDecoder)); | 141 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), Sk
ISize::Make(2, 2), &testDecoder)); |
143 | 142 |
144 evictOneCache(); | 143 evictOneCache(); |
145 evictOneCache(); | 144 evictOneCache(); |
146 evictOneCache(); | 145 evictOneCache(); |
147 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); | 146 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); |
148 EXPECT_EQ(16u, ImageDecodingStore::instance().memoryUsageInBytes()); | 147 EXPECT_EQ(16u, ImageDecodingStore::instance().memoryUsageInBytes()); |
149 | 148 |
150 ImageDecodingStore::instance().unlockDecoder(m_generator.get(), testDecoder)
; | 149 ImageDecodingStore::instance().unlockDecoder(m_generator.get(), testDecoder)
; |
151 evictOneCache(); | 150 evictOneCache(); |
152 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries()); | 151 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries()); |
153 EXPECT_FALSE(ImageDecodingStore::instance().memoryUsageInBytes()); | 152 EXPECT_FALSE(ImageDecodingStore::instance().memoryUsageInBytes()); |
154 } | 153 } |
155 | 154 |
156 TEST_F(ImageDecodingStoreTest, removeDecoder) | 155 TEST_F(ImageDecodingStoreTest, removeDecoder) |
157 { | 156 { |
158 const SkISize size = SkISize::Make(1, 1); | 157 const SkISize size = SkISize::Make(1, 1); |
159 std::unique_ptr<ImageDecoder> decoder = MockImageDecoder::create(this); | 158 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this); |
160 decoder->setSize(1, 1); | 159 decoder->setSize(1, 1); |
161 const ImageDecoder* refDecoder = decoder.get(); | 160 const ImageDecoder* refDecoder = decoder.get(); |
162 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder)); | 161 ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(de
coder)); |
163 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); | 162 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries()); |
164 EXPECT_EQ(4u, ImageDecodingStore::instance().memoryUsageInBytes()); | 163 EXPECT_EQ(4u, ImageDecodingStore::instance().memoryUsageInBytes()); |
165 | 164 |
166 ImageDecoder* testDecoder; | 165 ImageDecoder* testDecoder; |
167 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), si
ze, &testDecoder)); | 166 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), si
ze, &testDecoder)); |
168 EXPECT_TRUE(testDecoder); | 167 EXPECT_TRUE(testDecoder); |
169 EXPECT_EQ(refDecoder, testDecoder); | 168 EXPECT_EQ(refDecoder, testDecoder); |
170 ImageDecodingStore::instance().removeDecoder(m_generator.get(), testDecoder)
; | 169 ImageDecodingStore::instance().removeDecoder(m_generator.get(), testDecoder)
; |
171 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries()); | 170 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries()); |
172 | 171 |
173 EXPECT_FALSE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), s
ize, &testDecoder)); | 172 EXPECT_FALSE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), s
ize, &testDecoder)); |
174 } | 173 } |
175 | 174 |
176 } // namespace blink | 175 } // namespace blink |
OLD | NEW |