Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(337)

Side by Side Diff: Source/platform/graphics/ImageDecodingStoreTest.cpp

Issue 794223003: Cheaper thread-safe atomic initialization of static references. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add type check for initial value Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 22 matching lines...) Expand all
33 #include <gtest/gtest.h> 33 #include <gtest/gtest.h>
34 34
35 using namespace blink; 35 using namespace blink;
36 36
37 namespace { 37 namespace {
38 38
39 class ImageDecodingStoreTest : public ::testing::Test, public MockImageDecoderCl ient { 39 class ImageDecodingStoreTest : public ::testing::Test, public MockImageDecoderCl ient {
40 public: 40 public:
41 virtual void SetUp() 41 virtual void SetUp()
42 { 42 {
43 ImageDecodingStore::instance()->setCacheLimitInBytes(1024 * 1024); 43 ImageDecodingStore::instance().setCacheLimitInBytes(1024 * 1024);
44 m_data = SharedBuffer::create(); 44 m_data = SharedBuffer::create();
45 m_generator = ImageFrameGenerator::create(SkISize::Make(100, 100), m_dat a, true); 45 m_generator = ImageFrameGenerator::create(SkISize::Make(100, 100), m_dat a, true);
46 m_decodersDestroyed = 0; 46 m_decodersDestroyed = 0;
47 } 47 }
48 48
49 virtual void TearDown() 49 virtual void TearDown()
50 { 50 {
51 ImageDecodingStore::instance()->clear(); 51 ImageDecodingStore::instance().clear();
52 } 52 }
53 53
54 virtual void decoderBeingDestroyed() 54 virtual void decoderBeingDestroyed()
55 { 55 {
56 ++m_decodersDestroyed; 56 ++m_decodersDestroyed;
57 } 57 }
58 58
59 virtual void frameBufferRequested() 59 virtual void frameBufferRequested()
60 { 60 {
61 // Decoder is never used by ImageDecodingStore. 61 // Decoder is never used by ImageDecodingStore.
62 ASSERT_TRUE(false); 62 ASSERT_TRUE(false);
63 } 63 }
64 64
65 virtual ImageFrame::Status status() 65 virtual ImageFrame::Status status()
66 { 66 {
67 return ImageFrame::FramePartial; 67 return ImageFrame::FramePartial;
68 } 68 }
69 69
70 virtual size_t frameCount() { return 1; } 70 virtual size_t frameCount() { return 1; }
71 virtual int repetitionCount() const { return cAnimationNone; } 71 virtual int repetitionCount() const { return cAnimationNone; }
72 virtual float frameDuration() const { return 0; } 72 virtual float frameDuration() const { return 0; }
73 73
74 protected: 74 protected:
75 void evictOneCache() 75 void evictOneCache()
76 { 76 {
77 size_t memoryUsageInBytes = ImageDecodingStore::instance()->memoryUsageI nBytes(); 77 size_t memoryUsageInBytes = ImageDecodingStore::instance().memoryUsageIn Bytes();
78 if (memoryUsageInBytes) 78 if (memoryUsageInBytes)
79 ImageDecodingStore::instance()->setCacheLimitInBytes(memoryUsageInBy tes - 1); 79 ImageDecodingStore::instance().setCacheLimitInBytes(memoryUsageInByt es - 1);
80 else 80 else
81 ImageDecodingStore::instance()->setCacheLimitInBytes(0); 81 ImageDecodingStore::instance().setCacheLimitInBytes(0);
82 } 82 }
83 83
84 RefPtr<SharedBuffer> m_data; 84 RefPtr<SharedBuffer> m_data;
85 RefPtr<ImageFrameGenerator> m_generator; 85 RefPtr<ImageFrameGenerator> m_generator;
86 int m_decodersDestroyed; 86 int m_decodersDestroyed;
87 }; 87 };
88 88
89 TEST_F(ImageDecodingStoreTest, insertDecoder) 89 TEST_F(ImageDecodingStoreTest, insertDecoder)
90 { 90 {
91 const SkISize size = SkISize::Make(1, 1); 91 const SkISize size = SkISize::Make(1, 1);
92 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this); 92 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this);
93 decoder->setSize(1, 1); 93 decoder->setSize(1, 1);
94 const ImageDecoder* refDecoder = decoder.get(); 94 const ImageDecoder* refDecoder = decoder.get();
95 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder.rel ease()); 95 ImageDecodingStore::instance().insertDecoder(m_generator.get(), decoder.rele ase());
96 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 96 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries());
97 EXPECT_EQ(4u, ImageDecodingStore::instance()->memoryUsageInBytes()); 97 EXPECT_EQ(4u, ImageDecodingStore::instance().memoryUsageInBytes());
98 98
99 ImageDecoder* testDecoder; 99 ImageDecoder* testDecoder;
100 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), s ize, &testDecoder)); 100 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), si ze, &testDecoder));
101 EXPECT_TRUE(testDecoder); 101 EXPECT_TRUE(testDecoder);
102 EXPECT_EQ(refDecoder, testDecoder); 102 EXPECT_EQ(refDecoder, testDecoder);
103 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), testDecoder ); 103 ImageDecodingStore::instance().unlockDecoder(m_generator.get(), testDecoder) ;
104 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 104 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries());
105 } 105 }
106 106
107 TEST_F(ImageDecodingStoreTest, evictDecoder) 107 TEST_F(ImageDecodingStoreTest, evictDecoder)
108 { 108 {
109 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this); 109 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this);
110 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this); 110 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this);
111 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this); 111 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this);
112 decoder1->setSize(1, 1); 112 decoder1->setSize(1, 1);
113 decoder2->setSize(2, 2); 113 decoder2->setSize(2, 2);
114 decoder3->setSize(3, 3); 114 decoder3->setSize(3, 3);
115 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder1.re lease()); 115 ImageDecodingStore::instance().insertDecoder(m_generator.get(), decoder1.rel ease());
116 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder2.re lease()); 116 ImageDecodingStore::instance().insertDecoder(m_generator.get(), decoder2.rel ease());
117 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder3.re lease()); 117 ImageDecodingStore::instance().insertDecoder(m_generator.get(), decoder3.rel ease());
118 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries()); 118 EXPECT_EQ(3, ImageDecodingStore::instance().cacheEntries());
119 EXPECT_EQ(56u, ImageDecodingStore::instance()->memoryUsageInBytes()); 119 EXPECT_EQ(56u, ImageDecodingStore::instance().memoryUsageInBytes());
120 120
121 evictOneCache(); 121 evictOneCache();
122 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries()); 122 EXPECT_EQ(2, ImageDecodingStore::instance().cacheEntries());
123 EXPECT_EQ(52u, ImageDecodingStore::instance()->memoryUsageInBytes()); 123 EXPECT_EQ(52u, ImageDecodingStore::instance().memoryUsageInBytes());
124 124
125 evictOneCache(); 125 evictOneCache();
126 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 126 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries());
127 EXPECT_EQ(36u, ImageDecodingStore::instance()->memoryUsageInBytes()); 127 EXPECT_EQ(36u, ImageDecodingStore::instance().memoryUsageInBytes());
128 128
129 evictOneCache(); 129 evictOneCache();
130 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries()); 130 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries());
131 EXPECT_FALSE(ImageDecodingStore::instance()->memoryUsageInBytes()); 131 EXPECT_FALSE(ImageDecodingStore::instance().memoryUsageInBytes());
132 } 132 }
133 133
134 TEST_F(ImageDecodingStoreTest, decoderInUseNotEvicted) 134 TEST_F(ImageDecodingStoreTest, decoderInUseNotEvicted)
135 { 135 {
136 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this); 136 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this);
137 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this); 137 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this);
138 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this); 138 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this);
139 decoder1->setSize(1, 1); 139 decoder1->setSize(1, 1);
140 decoder2->setSize(2, 2); 140 decoder2->setSize(2, 2);
141 decoder3->setSize(3, 3); 141 decoder3->setSize(3, 3);
142 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder1.re lease()); 142 ImageDecodingStore::instance().insertDecoder(m_generator.get(), decoder1.rel ease());
143 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder2.re lease()); 143 ImageDecodingStore::instance().insertDecoder(m_generator.get(), decoder2.rel ease());
144 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder3.re lease()); 144 ImageDecodingStore::instance().insertDecoder(m_generator.get(), decoder3.rel ease());
145 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries()); 145 EXPECT_EQ(3, ImageDecodingStore::instance().cacheEntries());
146 146
147 ImageDecoder* testDecoder; 147 ImageDecoder* testDecoder;
148 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), S kISize::Make(2, 2), &testDecoder)); 148 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), Sk ISize::Make(2, 2), &testDecoder));
149 149
150 evictOneCache(); 150 evictOneCache();
151 evictOneCache(); 151 evictOneCache();
152 evictOneCache(); 152 evictOneCache();
153 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 153 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries());
154 EXPECT_EQ(16u, ImageDecodingStore::instance()->memoryUsageInBytes()); 154 EXPECT_EQ(16u, ImageDecodingStore::instance().memoryUsageInBytes());
155 155
156 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), testDecoder ); 156 ImageDecodingStore::instance().unlockDecoder(m_generator.get(), testDecoder) ;
157 evictOneCache(); 157 evictOneCache();
158 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries()); 158 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries());
159 EXPECT_FALSE(ImageDecodingStore::instance()->memoryUsageInBytes()); 159 EXPECT_FALSE(ImageDecodingStore::instance().memoryUsageInBytes());
160 } 160 }
161 161
162 TEST_F(ImageDecodingStoreTest, removeDecoder) 162 TEST_F(ImageDecodingStoreTest, removeDecoder)
163 { 163 {
164 const SkISize size = SkISize::Make(1, 1); 164 const SkISize size = SkISize::Make(1, 1);
165 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this); 165 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this);
166 decoder->setSize(1, 1); 166 decoder->setSize(1, 1);
167 const ImageDecoder* refDecoder = decoder.get(); 167 const ImageDecoder* refDecoder = decoder.get();
168 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder.rel ease()); 168 ImageDecodingStore::instance().insertDecoder(m_generator.get(), decoder.rele ase());
169 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 169 EXPECT_EQ(1, ImageDecodingStore::instance().cacheEntries());
170 EXPECT_EQ(4u, ImageDecodingStore::instance()->memoryUsageInBytes()); 170 EXPECT_EQ(4u, ImageDecodingStore::instance().memoryUsageInBytes());
171 171
172 ImageDecoder* testDecoder; 172 ImageDecoder* testDecoder;
173 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), s ize, &testDecoder)); 173 EXPECT_TRUE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), si ze, &testDecoder));
174 EXPECT_TRUE(testDecoder); 174 EXPECT_TRUE(testDecoder);
175 EXPECT_EQ(refDecoder, testDecoder); 175 EXPECT_EQ(refDecoder, testDecoder);
176 ImageDecodingStore::instance()->removeDecoder(m_generator.get(), testDecoder ); 176 ImageDecodingStore::instance().removeDecoder(m_generator.get(), testDecoder) ;
177 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries()); 177 EXPECT_FALSE(ImageDecodingStore::instance().cacheEntries());
178 178
179 EXPECT_FALSE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), size, &testDecoder)); 179 EXPECT_FALSE(ImageDecodingStore::instance().lockDecoder(m_generator.get(), s ize, &testDecoder));
180 } 180 }
181 181
182 } // namespace 182 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698