OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 } | 59 } |
60 | 60 |
61 private: | 61 private: |
62 cc::TestGpuMemoryBufferManager test_gpu_memory_buffer_manager_; | 62 cc::TestGpuMemoryBufferManager test_gpu_memory_buffer_manager_; |
63 }; | 63 }; |
64 | 64 |
65 } // anonymous namespace | 65 } // anonymous namespace |
66 | 66 |
67 class DrawingBufferTest : public Test { | 67 class DrawingBufferTest : public Test { |
68 protected: | 68 protected: |
69 void SetUp() override { | 69 void SetUp() override { Init(kDisableMultisampling); } |
| 70 |
| 71 void Init(UseMultisampling use_multisampling) { |
70 IntSize initial_size(kInitialWidth, kInitialHeight); | 72 IntSize initial_size(kInitialWidth, kInitialHeight); |
71 std::unique_ptr<GLES2InterfaceForTests> gl = | 73 std::unique_ptr<GLES2InterfaceForTests> gl = |
72 WTF::WrapUnique(new GLES2InterfaceForTests); | 74 WTF::WrapUnique(new GLES2InterfaceForTests); |
73 gl_ = gl.get(); | 75 gl_ = gl.get(); |
74 SetAndSaveRestoreState(false); | 76 SetAndSaveRestoreState(false); |
75 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = | 77 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = |
76 WTF::WrapUnique( | 78 WTF::WrapUnique( |
77 new WebGraphicsContext3DProviderForTests(std::move(gl))); | 79 new WebGraphicsContext3DProviderForTests(std::move(gl))); |
78 drawing_buffer_ = DrawingBufferForTests::Create( | 80 drawing_buffer_ = DrawingBufferForTests::Create( |
79 std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve); | 81 std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve, |
| 82 use_multisampling); |
80 CHECK(drawing_buffer_); | 83 CHECK(drawing_buffer_); |
81 } | 84 } |
82 | 85 |
83 // Initialize GL state with unusual values, to verify that they are restored. | 86 // Initialize GL state with unusual values, to verify that they are restored. |
84 // The |invert| parameter will reverse all boolean parameters, so that all | 87 // The |invert| parameter will reverse all boolean parameters, so that all |
85 // values are tested. | 88 // values are tested. |
86 void SetAndSaveRestoreState(bool invert) { | 89 void SetAndSaveRestoreState(bool invert) { |
87 GLboolean scissor_enabled = !invert; | 90 GLboolean scissor_enabled = !invert; |
88 GLfloat clear_color[4] = {0.1, 0.2, 0.3, 0.4}; | 91 GLfloat clear_color[4] = {0.1, 0.2, 0.3, 0.4}; |
89 GLfloat clear_depth = 0.8; | 92 GLfloat clear_depth = 0.8; |
(...skipping 29 matching lines...) Expand all Loading... |
119 | 122 |
120 gl_->SaveState(); | 123 gl_->SaveState(); |
121 } | 124 } |
122 | 125 |
123 void VerifyStateWasRestored() { gl_->VerifyStateHasNotChangedSinceSave(); } | 126 void VerifyStateWasRestored() { gl_->VerifyStateHasNotChangedSinceSave(); } |
124 | 127 |
125 GLES2InterfaceForTests* gl_; | 128 GLES2InterfaceForTests* gl_; |
126 RefPtr<DrawingBufferForTests> drawing_buffer_; | 129 RefPtr<DrawingBufferForTests> drawing_buffer_; |
127 }; | 130 }; |
128 | 131 |
| 132 class DrawingBufferTestMultisample : public DrawingBufferTest { |
| 133 protected: |
| 134 void SetUp() override { Init(kEnableMultisampling); } |
| 135 }; |
| 136 |
| 137 TEST_F(DrawingBufferTestMultisample, verifyMultisampleResolve) { |
| 138 // Initial state: already marked changed, multisampled |
| 139 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 140 EXPECT_TRUE(drawing_buffer_->ExplicitResolveOfMultisampleData()); |
| 141 |
| 142 // Resolve the multisample buffer |
| 143 drawing_buffer_->ResolveAndBindForReadAndDraw(); |
| 144 |
| 145 // After resolve, acknowledge new content |
| 146 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 147 // No new content |
| 148 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 149 |
| 150 drawing_buffer_->BeginDestruction(); |
| 151 } |
| 152 |
129 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) { | 153 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) { |
130 VerifyStateWasRestored(); | 154 VerifyStateWasRestored(); |
131 cc::TextureMailbox texture_mailbox; | 155 cc::TextureMailbox texture_mailbox; |
132 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 156 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
133 | 157 |
134 IntSize initial_size(kInitialWidth, kInitialHeight); | 158 IntSize initial_size(kInitialWidth, kInitialHeight); |
135 IntSize alternate_size(kInitialWidth, kAlternateHeight); | 159 IntSize alternate_size(kInitialWidth, kAlternateHeight); |
136 | 160 |
137 // Produce one mailbox at size 100x100. | 161 // Produce one mailbox at size 100x100. |
138 drawing_buffer_->MarkContentsChanged(); | 162 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
139 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 163 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
140 &release_callback)); | 164 &release_callback)); |
141 VerifyStateWasRestored(); | 165 VerifyStateWasRestored(); |
142 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 166 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
143 | 167 |
144 // Resize to 100x50. | 168 // Resize to 100x50. |
145 drawing_buffer_->Resize(alternate_size); | 169 drawing_buffer_->Resize(alternate_size); |
146 VerifyStateWasRestored(); | 170 VerifyStateWasRestored(); |
147 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 171 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
148 VerifyStateWasRestored(); | 172 VerifyStateWasRestored(); |
149 | 173 |
150 // Produce a mailbox at this size. | 174 // Produce a mailbox at this size. |
151 drawing_buffer_->MarkContentsChanged(); | 175 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
152 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 176 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
153 &release_callback)); | 177 &release_callback)); |
154 EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize()); | 178 EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize()); |
155 VerifyStateWasRestored(); | 179 VerifyStateWasRestored(); |
156 | 180 |
157 // Reset to initial size. | 181 // Reset to initial size. |
158 drawing_buffer_->Resize(initial_size); | 182 drawing_buffer_->Resize(initial_size); |
159 VerifyStateWasRestored(); | 183 VerifyStateWasRestored(); |
160 SetAndSaveRestoreState(true); | 184 SetAndSaveRestoreState(true); |
161 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 185 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
162 VerifyStateWasRestored(); | 186 VerifyStateWasRestored(); |
163 | 187 |
164 // Prepare another mailbox and verify that it's the correct size. | 188 // Prepare another mailbox and verify that it's the correct size. |
165 drawing_buffer_->MarkContentsChanged(); | 189 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
166 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 190 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
167 &release_callback)); | 191 &release_callback)); |
168 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 192 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
169 VerifyStateWasRestored(); | 193 VerifyStateWasRestored(); |
170 | 194 |
171 // Prepare one final mailbox and verify that it's the correct size. | 195 // Prepare one final mailbox and verify that it's the correct size. |
172 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 196 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
173 drawing_buffer_->MarkContentsChanged(); | 197 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
174 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 198 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
175 &release_callback)); | 199 &release_callback)); |
176 VerifyStateWasRestored(); | 200 VerifyStateWasRestored(); |
177 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 201 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
178 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 202 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
179 drawing_buffer_->BeginDestruction(); | 203 drawing_buffer_->BeginDestruction(); |
180 } | 204 } |
181 | 205 |
182 TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) { | 206 TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) { |
183 bool live = true; | 207 bool live = true; |
184 drawing_buffer_->live_ = &live; | 208 drawing_buffer_->live_ = &live; |
185 | 209 |
186 cc::TextureMailbox texture_mailbox1; | 210 cc::TextureMailbox texture_mailbox1; |
187 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; | 211 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; |
188 cc::TextureMailbox texture_mailbox2; | 212 cc::TextureMailbox texture_mailbox2; |
189 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; | 213 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; |
190 cc::TextureMailbox texture_mailbox3; | 214 cc::TextureMailbox texture_mailbox3; |
191 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; | 215 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; |
192 | 216 |
193 IntSize initial_size(kInitialWidth, kInitialHeight); | 217 IntSize initial_size(kInitialWidth, kInitialHeight); |
194 | 218 |
195 // Produce mailboxes. | 219 // Produce mailboxes. |
196 drawing_buffer_->MarkContentsChanged(); | 220 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
197 drawing_buffer_->ClearFramebuffers(GL_STENCIL_BUFFER_BIT); | 221 drawing_buffer_->ClearFramebuffers(GL_STENCIL_BUFFER_BIT); |
198 VerifyStateWasRestored(); | 222 VerifyStateWasRestored(); |
199 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, | 223 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, |
200 &release_callback1)); | 224 &release_callback1)); |
201 drawing_buffer_->MarkContentsChanged(); | 225 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
202 drawing_buffer_->ClearFramebuffers(GL_DEPTH_BUFFER_BIT); | 226 drawing_buffer_->ClearFramebuffers(GL_DEPTH_BUFFER_BIT); |
203 VerifyStateWasRestored(); | 227 VerifyStateWasRestored(); |
204 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, | 228 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, |
205 &release_callback2)); | 229 &release_callback2)); |
206 drawing_buffer_->MarkContentsChanged(); | 230 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
207 drawing_buffer_->ClearFramebuffers(GL_COLOR_BUFFER_BIT); | 231 drawing_buffer_->ClearFramebuffers(GL_COLOR_BUFFER_BIT); |
208 VerifyStateWasRestored(); | 232 VerifyStateWasRestored(); |
209 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, | 233 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, |
210 &release_callback3)); | 234 &release_callback3)); |
211 | 235 |
212 drawing_buffer_->MarkContentsChanged(); | 236 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
213 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); | 237 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); |
214 | 238 |
215 drawing_buffer_->BeginDestruction(); | 239 drawing_buffer_->BeginDestruction(); |
216 ASSERT_EQ(live, true); | 240 ASSERT_EQ(live, true); |
217 | 241 |
218 DrawingBufferForTests* raw_pointer = drawing_buffer_.Get(); | 242 DrawingBufferForTests* raw_pointer = drawing_buffer_.Get(); |
219 drawing_buffer_.Clear(); | 243 drawing_buffer_.Clear(); |
220 ASSERT_EQ(live, true); | 244 ASSERT_EQ(live, true); |
221 | 245 |
222 raw_pointer->MarkContentsChanged(); | 246 EXPECT_FALSE(raw_pointer->MarkContentsChanged()); |
223 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 247 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
224 ASSERT_EQ(live, true); | 248 ASSERT_EQ(live, true); |
225 | 249 |
226 raw_pointer->MarkContentsChanged(); | 250 EXPECT_FALSE(raw_pointer->MarkContentsChanged()); |
227 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); | 251 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); |
228 ASSERT_EQ(live, false); | 252 ASSERT_EQ(live, false); |
229 } | 253 } |
230 | 254 |
231 TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost) { | 255 TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost) { |
232 bool live = true; | 256 bool live = true; |
233 drawing_buffer_->live_ = &live; | 257 drawing_buffer_->live_ = &live; |
234 | 258 |
235 cc::TextureMailbox texture_mailbox1; | 259 cc::TextureMailbox texture_mailbox1; |
236 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; | 260 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; |
237 cc::TextureMailbox texture_mailbox2; | 261 cc::TextureMailbox texture_mailbox2; |
238 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; | 262 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; |
239 cc::TextureMailbox texture_mailbox3; | 263 cc::TextureMailbox texture_mailbox3; |
240 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; | 264 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; |
241 | 265 |
242 drawing_buffer_->MarkContentsChanged(); | 266 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
243 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, | 267 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, |
244 &release_callback1)); | 268 &release_callback1)); |
245 VerifyStateWasRestored(); | 269 VerifyStateWasRestored(); |
246 drawing_buffer_->MarkContentsChanged(); | 270 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
247 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, | 271 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, |
248 &release_callback2)); | 272 &release_callback2)); |
249 VerifyStateWasRestored(); | 273 VerifyStateWasRestored(); |
250 drawing_buffer_->MarkContentsChanged(); | 274 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
251 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, | 275 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, |
252 &release_callback3)); | 276 &release_callback3)); |
253 VerifyStateWasRestored(); | 277 VerifyStateWasRestored(); |
254 | 278 |
255 drawing_buffer_->MarkContentsChanged(); | 279 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
256 release_callback1->Run(gpu::SyncToken(), true /* lostResource */); | 280 release_callback1->Run(gpu::SyncToken(), true /* lostResource */); |
257 EXPECT_EQ(live, true); | 281 EXPECT_EQ(live, true); |
258 | 282 |
259 drawing_buffer_->BeginDestruction(); | 283 drawing_buffer_->BeginDestruction(); |
260 EXPECT_EQ(live, true); | 284 EXPECT_EQ(live, true); |
261 | 285 |
262 drawing_buffer_->MarkContentsChanged(); | 286 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
263 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 287 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
264 EXPECT_EQ(live, true); | 288 EXPECT_EQ(live, true); |
265 | 289 |
266 DrawingBufferForTests* raw_ptr = drawing_buffer_.Get(); | 290 DrawingBufferForTests* raw_ptr = drawing_buffer_.Get(); |
267 drawing_buffer_.Clear(); | 291 drawing_buffer_.Clear(); |
268 EXPECT_EQ(live, true); | 292 EXPECT_EQ(live, true); |
269 | 293 |
270 raw_ptr->MarkContentsChanged(); | 294 EXPECT_FALSE(raw_ptr->MarkContentsChanged()); |
271 release_callback3->Run(gpu::SyncToken(), true /* lostResource */); | 295 release_callback3->Run(gpu::SyncToken(), true /* lostResource */); |
272 EXPECT_EQ(live, false); | 296 EXPECT_EQ(live, false); |
273 } | 297 } |
274 | 298 |
275 TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) { | 299 TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) { |
276 cc::TextureMailbox texture_mailbox1; | 300 cc::TextureMailbox texture_mailbox1; |
277 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; | 301 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; |
278 cc::TextureMailbox texture_mailbox2; | 302 cc::TextureMailbox texture_mailbox2; |
279 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; | 303 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; |
280 cc::TextureMailbox texture_mailbox3; | 304 cc::TextureMailbox texture_mailbox3; |
281 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; | 305 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; |
282 | 306 |
283 // Produce mailboxes. | 307 // Produce mailboxes. |
284 drawing_buffer_->MarkContentsChanged(); | 308 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
285 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, | 309 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, |
286 &release_callback1)); | 310 &release_callback1)); |
287 drawing_buffer_->MarkContentsChanged(); | 311 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
288 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, | 312 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, |
289 &release_callback2)); | 313 &release_callback2)); |
290 drawing_buffer_->MarkContentsChanged(); | 314 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
291 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, | 315 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, |
292 &release_callback3)); | 316 &release_callback3)); |
293 | 317 |
294 // Release mailboxes by specific order; 1, 3, 2. | 318 // Release mailboxes by specific order; 1, 3, 2. |
295 drawing_buffer_->MarkContentsChanged(); | 319 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
296 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); | 320 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); |
297 drawing_buffer_->MarkContentsChanged(); | 321 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
298 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); | 322 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); |
299 drawing_buffer_->MarkContentsChanged(); | 323 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
300 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 324 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
301 | 325 |
302 // The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order | 326 // The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order |
303 // because DrawingBuffer never keeps more than one mailbox. | 327 // because DrawingBuffer never keeps more than one mailbox. |
304 cc::TextureMailbox recycled_texture_mailbox1; | 328 cc::TextureMailbox recycled_texture_mailbox1; |
305 std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback1; | 329 std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback1; |
306 drawing_buffer_->MarkContentsChanged(); | 330 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
307 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox( | 331 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox( |
308 &recycled_texture_mailbox1, &recycled_release_callback1)); | 332 &recycled_texture_mailbox1, &recycled_release_callback1)); |
309 EXPECT_EQ(texture_mailbox2.mailbox(), recycled_texture_mailbox1.mailbox()); | 333 EXPECT_EQ(texture_mailbox2.mailbox(), recycled_texture_mailbox1.mailbox()); |
310 | 334 |
311 // The second recycled mailbox must be a new mailbox. | 335 // The second recycled mailbox must be a new mailbox. |
312 cc::TextureMailbox recycled_texture_mailbox2; | 336 cc::TextureMailbox recycled_texture_mailbox2; |
313 std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback2; | 337 std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback2; |
314 drawing_buffer_->MarkContentsChanged(); | 338 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
315 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox( | 339 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox( |
316 &recycled_texture_mailbox2, &recycled_release_callback2)); | 340 &recycled_texture_mailbox2, &recycled_release_callback2)); |
317 EXPECT_NE(texture_mailbox1.mailbox(), recycled_texture_mailbox2.mailbox()); | 341 EXPECT_NE(texture_mailbox1.mailbox(), recycled_texture_mailbox2.mailbox()); |
318 EXPECT_NE(texture_mailbox2.mailbox(), recycled_texture_mailbox2.mailbox()); | 342 EXPECT_NE(texture_mailbox2.mailbox(), recycled_texture_mailbox2.mailbox()); |
319 EXPECT_NE(texture_mailbox3.mailbox(), recycled_texture_mailbox2.mailbox()); | 343 EXPECT_NE(texture_mailbox3.mailbox(), recycled_texture_mailbox2.mailbox()); |
320 | 344 |
321 recycled_release_callback1->Run(gpu::SyncToken(), false /* lostResource */); | 345 recycled_release_callback1->Run(gpu::SyncToken(), false /* lostResource */); |
322 recycled_release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 346 recycled_release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
323 drawing_buffer_->BeginDestruction(); | 347 drawing_buffer_->BeginDestruction(); |
324 } | 348 } |
325 | 349 |
326 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) { | 350 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) { |
327 cc::TextureMailbox texture_mailbox; | 351 cc::TextureMailbox texture_mailbox; |
328 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 352 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
329 | 353 |
330 // Produce mailboxes. | 354 // Produce mailboxes. |
331 drawing_buffer_->MarkContentsChanged(); | 355 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
332 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); | 356 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); |
333 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 357 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
334 &release_callback)); | 358 &release_callback)); |
335 // PrepareTextureMailbox() does not wait for any sync point. | 359 // PrepareTextureMailbox() does not wait for any sync point. |
336 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); | 360 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); |
337 | 361 |
338 gpu::SyncToken wait_sync_token; | 362 gpu::SyncToken wait_sync_token; |
339 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), | 363 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), |
340 wait_sync_token.GetData()); | 364 wait_sync_token.GetData()); |
341 release_callback->Run(wait_sync_token, false /* lostResource */); | 365 release_callback->Run(wait_sync_token, false /* lostResource */); |
342 // m_drawingBuffer will wait for the sync point when recycling. | 366 // m_drawingBuffer will wait for the sync point when recycling. |
343 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); | 367 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); |
344 | 368 |
345 drawing_buffer_->MarkContentsChanged(); | 369 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
346 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 370 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
347 &release_callback)); | 371 &release_callback)); |
348 // m_drawingBuffer waits for the sync point when recycling in | 372 // m_drawingBuffer waits for the sync point when recycling in |
349 // PrepareTextureMailbox(). | 373 // PrepareTextureMailbox(). |
350 EXPECT_EQ(wait_sync_token, gl_->MostRecentlyWaitedSyncToken()); | 374 EXPECT_EQ(wait_sync_token, gl_->MostRecentlyWaitedSyncToken()); |
351 | 375 |
352 drawing_buffer_->BeginDestruction(); | 376 drawing_buffer_->BeginDestruction(); |
353 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), | 377 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), |
354 wait_sync_token.GetData()); | 378 wait_sync_token.GetData()); |
355 release_callback->Run(wait_sync_token, false /* lostResource */); | 379 release_callback->Run(wait_sync_token, false /* lostResource */); |
(...skipping 12 matching lines...) Expand all Loading... |
368 WTF::WrapUnique(new GLES2InterfaceForTests); | 392 WTF::WrapUnique(new GLES2InterfaceForTests); |
369 gl_ = gl.get(); | 393 gl_ = gl.get(); |
370 SetAndSaveRestoreState(true); | 394 SetAndSaveRestoreState(true); |
371 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = | 395 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = |
372 WTF::WrapUnique( | 396 WTF::WrapUnique( |
373 new WebGraphicsContext3DProviderForTests(std::move(gl))); | 397 new WebGraphicsContext3DProviderForTests(std::move(gl))); |
374 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true); | 398 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true); |
375 image_id0_ = gl_->NextImageIdToBeCreated(); | 399 image_id0_ = gl_->NextImageIdToBeCreated(); |
376 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id0_)).Times(1); | 400 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id0_)).Times(1); |
377 drawing_buffer_ = DrawingBufferForTests::Create( | 401 drawing_buffer_ = DrawingBufferForTests::Create( |
378 std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve); | 402 std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve, |
| 403 kDisableMultisampling); |
379 CHECK(drawing_buffer_); | 404 CHECK(drawing_buffer_); |
380 testing::Mock::VerifyAndClearExpectations(gl_); | 405 testing::Mock::VerifyAndClearExpectations(gl_); |
381 } | 406 } |
382 | 407 |
383 void TearDown() override { | 408 void TearDown() override { |
384 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(false); | 409 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(false); |
385 platform_.reset(); | 410 platform_.reset(); |
386 } | 411 } |
387 | 412 |
388 GLuint image_id0_; | 413 GLuint image_id0_; |
389 std::unique_ptr<ScopedTestingPlatformSupport<FakePlatformSupport>> platform_; | 414 std::unique_ptr<ScopedTestingPlatformSupport<FakePlatformSupport>> platform_; |
390 }; | 415 }; |
391 | 416 |
392 TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) { | 417 TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) { |
393 cc::TextureMailbox texture_mailbox; | 418 cc::TextureMailbox texture_mailbox; |
394 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 419 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
395 | 420 |
396 IntSize initial_size(kInitialWidth, kInitialHeight); | 421 IntSize initial_size(kInitialWidth, kInitialHeight); |
397 IntSize alternate_size(kInitialWidth, kAlternateHeight); | 422 IntSize alternate_size(kInitialWidth, kAlternateHeight); |
398 | 423 |
399 GLuint image_id1 = gl_->NextImageIdToBeCreated(); | 424 GLuint image_id1 = gl_->NextImageIdToBeCreated(); |
400 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id1)).Times(1); | 425 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id1)).Times(1); |
401 // Produce one mailbox at size 100x100. | 426 // Produce one mailbox at size 100x100. |
402 drawing_buffer_->MarkContentsChanged(); | 427 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
403 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 428 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
404 &release_callback)); | 429 &release_callback)); |
405 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 430 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
406 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); | 431 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); |
407 testing::Mock::VerifyAndClearExpectations(gl_); | 432 testing::Mock::VerifyAndClearExpectations(gl_); |
408 VerifyStateWasRestored(); | 433 VerifyStateWasRestored(); |
409 | 434 |
410 GLuint image_id2 = gl_->NextImageIdToBeCreated(); | 435 GLuint image_id2 = gl_->NextImageIdToBeCreated(); |
411 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id2)).Times(1); | 436 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id2)).Times(1); |
412 EXPECT_CALL(*gl_, DestroyImageMock(image_id0_)).Times(1); | 437 EXPECT_CALL(*gl_, DestroyImageMock(image_id0_)).Times(1); |
413 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id0_)).Times(1); | 438 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id0_)).Times(1); |
414 EXPECT_CALL(*gl_, DestroyImageMock(image_id1)).Times(1); | 439 EXPECT_CALL(*gl_, DestroyImageMock(image_id1)).Times(1); |
415 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id1)).Times(1); | 440 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id1)).Times(1); |
416 // Resize to 100x50. | 441 // Resize to 100x50. |
417 drawing_buffer_->Resize(alternate_size); | 442 drawing_buffer_->Resize(alternate_size); |
418 VerifyStateWasRestored(); | 443 VerifyStateWasRestored(); |
419 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 444 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
420 VerifyStateWasRestored(); | 445 VerifyStateWasRestored(); |
421 testing::Mock::VerifyAndClearExpectations(gl_); | 446 testing::Mock::VerifyAndClearExpectations(gl_); |
422 | 447 |
423 GLuint image_id3 = gl_->NextImageIdToBeCreated(); | 448 GLuint image_id3 = gl_->NextImageIdToBeCreated(); |
424 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id3)).Times(1); | 449 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id3)).Times(1); |
425 // Produce a mailbox at this size. | 450 // Produce a mailbox at this size. |
426 drawing_buffer_->MarkContentsChanged(); | 451 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
427 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 452 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
428 &release_callback)); | 453 &release_callback)); |
429 EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize()); | 454 EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize()); |
430 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); | 455 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); |
431 testing::Mock::VerifyAndClearExpectations(gl_); | 456 testing::Mock::VerifyAndClearExpectations(gl_); |
432 | 457 |
433 GLuint image_id4 = gl_->NextImageIdToBeCreated(); | 458 GLuint image_id4 = gl_->NextImageIdToBeCreated(); |
434 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id4)).Times(1); | 459 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id4)).Times(1); |
435 EXPECT_CALL(*gl_, DestroyImageMock(image_id2)).Times(1); | 460 EXPECT_CALL(*gl_, DestroyImageMock(image_id2)).Times(1); |
436 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id2)).Times(1); | 461 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id2)).Times(1); |
437 EXPECT_CALL(*gl_, DestroyImageMock(image_id3)).Times(1); | 462 EXPECT_CALL(*gl_, DestroyImageMock(image_id3)).Times(1); |
438 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id3)).Times(1); | 463 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id3)).Times(1); |
439 // Reset to initial size. | 464 // Reset to initial size. |
440 drawing_buffer_->Resize(initial_size); | 465 drawing_buffer_->Resize(initial_size); |
441 VerifyStateWasRestored(); | 466 VerifyStateWasRestored(); |
442 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 467 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
443 VerifyStateWasRestored(); | 468 VerifyStateWasRestored(); |
444 testing::Mock::VerifyAndClearExpectations(gl_); | 469 testing::Mock::VerifyAndClearExpectations(gl_); |
445 | 470 |
446 GLuint image_id5 = gl_->NextImageIdToBeCreated(); | 471 GLuint image_id5 = gl_->NextImageIdToBeCreated(); |
447 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id5)).Times(1); | 472 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id5)).Times(1); |
448 // Prepare another mailbox and verify that it's the correct size. | 473 // Prepare another mailbox and verify that it's the correct size. |
449 drawing_buffer_->MarkContentsChanged(); | 474 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
450 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 475 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
451 &release_callback)); | 476 &release_callback)); |
452 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 477 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
453 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); | 478 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); |
454 testing::Mock::VerifyAndClearExpectations(gl_); | 479 testing::Mock::VerifyAndClearExpectations(gl_); |
455 | 480 |
456 // Prepare one final mailbox and verify that it's the correct size. | 481 // Prepare one final mailbox and verify that it's the correct size. |
457 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 482 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
458 drawing_buffer_->MarkContentsChanged(); | 483 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
459 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 484 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
460 &release_callback)); | 485 &release_callback)); |
461 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 486 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
462 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); | 487 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); |
463 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 488 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
464 | 489 |
465 EXPECT_CALL(*gl_, DestroyImageMock(image_id5)).Times(1); | 490 EXPECT_CALL(*gl_, DestroyImageMock(image_id5)).Times(1); |
466 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id5)).Times(1); | 491 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id5)).Times(1); |
467 EXPECT_CALL(*gl_, DestroyImageMock(image_id4)).Times(1); | 492 EXPECT_CALL(*gl_, DestroyImageMock(image_id4)).Times(1); |
468 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id4)).Times(1); | 493 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id4)).Times(1); |
469 drawing_buffer_->BeginDestruction(); | 494 drawing_buffer_->BeginDestruction(); |
470 testing::Mock::VerifyAndClearExpectations(gl_); | 495 testing::Mock::VerifyAndClearExpectations(gl_); |
471 } | 496 } |
472 | 497 |
473 TEST_F(DrawingBufferImageChromiumTest, allocationFailure) { | 498 TEST_F(DrawingBufferImageChromiumTest, allocationFailure) { |
474 cc::TextureMailbox texture_mailbox1; | 499 cc::TextureMailbox texture_mailbox1; |
475 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; | 500 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; |
476 cc::TextureMailbox texture_mailbox2; | 501 cc::TextureMailbox texture_mailbox2; |
477 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; | 502 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; |
478 cc::TextureMailbox texture_mailbox3; | 503 cc::TextureMailbox texture_mailbox3; |
479 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; | 504 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; |
480 | 505 |
481 // Request a mailbox. An image should already be created. Everything works | 506 // Request a mailbox. An image should already be created. Everything works |
482 // as expected. | 507 // as expected. |
483 EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1); | 508 EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1); |
484 IntSize initial_size(kInitialWidth, kInitialHeight); | 509 IntSize initial_size(kInitialWidth, kInitialHeight); |
485 drawing_buffer_->MarkContentsChanged(); | 510 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
486 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, | 511 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, |
487 &release_callback1)); | 512 &release_callback1)); |
488 EXPECT_TRUE(texture_mailbox1.is_overlay_candidate()); | 513 EXPECT_TRUE(texture_mailbox1.is_overlay_candidate()); |
489 testing::Mock::VerifyAndClearExpectations(gl_); | 514 testing::Mock::VerifyAndClearExpectations(gl_); |
490 VerifyStateWasRestored(); | 515 VerifyStateWasRestored(); |
491 | 516 |
492 // Force image CHROMIUM creation failure. Request another mailbox. It should | 517 // Force image CHROMIUM creation failure. Request another mailbox. It should |
493 // still be provided, but this time with allowOverlay = false. | 518 // still be provided, but this time with allowOverlay = false. |
494 gl_->SetCreateImageChromiumFail(true); | 519 gl_->SetCreateImageChromiumFail(true); |
495 drawing_buffer_->MarkContentsChanged(); | 520 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
496 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, | 521 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, |
497 &release_callback2)); | 522 &release_callback2)); |
498 EXPECT_FALSE(texture_mailbox2.is_overlay_candidate()); | 523 EXPECT_FALSE(texture_mailbox2.is_overlay_candidate()); |
499 VerifyStateWasRestored(); | 524 VerifyStateWasRestored(); |
500 | 525 |
501 // Check that if image CHROMIUM starts working again, mailboxes are | 526 // Check that if image CHROMIUM starts working again, mailboxes are |
502 // correctly created with allowOverlay = true. | 527 // correctly created with allowOverlay = true. |
503 EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1); | 528 EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1); |
504 gl_->SetCreateImageChromiumFail(false); | 529 gl_->SetCreateImageChromiumFail(false); |
505 drawing_buffer_->MarkContentsChanged(); | 530 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
506 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, | 531 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, |
507 &release_callback3)); | 532 &release_callback3)); |
508 EXPECT_TRUE(texture_mailbox3.is_overlay_candidate()); | 533 EXPECT_TRUE(texture_mailbox3.is_overlay_candidate()); |
509 testing::Mock::VerifyAndClearExpectations(gl_); | 534 testing::Mock::VerifyAndClearExpectations(gl_); |
510 VerifyStateWasRestored(); | 535 VerifyStateWasRestored(); |
511 | 536 |
512 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); | 537 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); |
513 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 538 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
514 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); | 539 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); |
515 | 540 |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 | 691 |
667 drawing_buffer->BeginDestruction(); | 692 drawing_buffer->BeginDestruction(); |
668 } | 693 } |
669 } | 694 } |
670 | 695 |
671 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) { | 696 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) { |
672 cc::TextureMailbox texture_mailbox; | 697 cc::TextureMailbox texture_mailbox; |
673 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 698 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
674 | 699 |
675 // Produce mailboxes. | 700 // Produce mailboxes. |
676 drawing_buffer_->MarkContentsChanged(); | 701 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
677 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 702 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
678 &release_callback)); | 703 &release_callback)); |
679 | 704 |
680 gpu::SyncToken wait_sync_token; | 705 gpu::SyncToken wait_sync_token; |
681 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), | 706 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), |
682 wait_sync_token.GetData()); | 707 wait_sync_token.GetData()); |
683 drawing_buffer_->SetIsHidden(true); | 708 drawing_buffer_->SetIsHidden(true); |
684 release_callback->Run(wait_sync_token, false /* lostResource */); | 709 release_callback->Run(wait_sync_token, false /* lostResource */); |
685 // m_drawingBuffer deletes mailbox immediately when hidden. | 710 // m_drawingBuffer deletes mailbox immediately when hidden. |
686 | 711 |
687 EXPECT_EQ(wait_sync_token, gl_->MostRecentlyWaitedSyncToken()); | 712 EXPECT_EQ(wait_sync_token, gl_->MostRecentlyWaitedSyncToken()); |
688 | 713 |
689 drawing_buffer_->BeginDestruction(); | 714 drawing_buffer_->BeginDestruction(); |
690 } | 715 } |
691 | 716 |
692 } // namespace blink | 717 } // namespace blink |
OLD | NEW |