OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/test/layer_tree_pixel_test.h" | 5 #include "cc/test/layer_tree_pixel_test.h" |
6 | 6 |
7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
8 #include "cc/layers/solid_color_layer.h" | 8 #include "cc/layers/solid_color_layer.h" |
9 #include "cc/layers/texture_layer.h" | 9 #include "cc/layers/texture_layer.h" |
10 #include "cc/output/copy_output_request.h" | 10 #include "cc/output/copy_output_request.h" |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 layer->SetAnchorPoint(gfx::PointF()); | 118 layer->SetAnchorPoint(gfx::PointF()); |
119 layer->SetBounds(rect.size()); | 119 layer->SetBounds(rect.size()); |
120 layer->SetPosition(rect.origin()); | 120 layer->SetPosition(rect.origin()); |
121 layer->SetBackgroundColor(color); | 121 layer->SetBackgroundColor(color); |
122 return layer; | 122 return layer; |
123 } | 123 } |
124 | 124 |
125 void LayerTreePixelTest::EndTest() { | 125 void LayerTreePixelTest::EndTest() { |
126 // Drop TextureMailboxes on the main thread so that they can be cleaned up and | 126 // Drop TextureMailboxes on the main thread so that they can be cleaned up and |
127 // the pending callbacks will fire. | 127 // the pending callbacks will fire. |
128 for (size_t i = 0; i < texture_layers_.size(); ++i) | 128 for (size_t i = 0; i < texture_layers_.size(); ++i) { |
129 texture_layers_[i]->SetTextureMailbox(TextureMailbox()); | 129 texture_layers_[i]->SetTextureMailbox(TextureMailbox(), |
| 130 ScopedReleaseCallback()); |
| 131 } |
130 | 132 |
131 TryEndTest(); | 133 TryEndTest(); |
132 } | 134 } |
133 | 135 |
134 void LayerTreePixelTest::TryEndTest() { | 136 void LayerTreePixelTest::TryEndTest() { |
135 if (!result_bitmap_) | 137 if (!result_bitmap_) |
136 return; | 138 return; |
137 if (pending_texture_mailbox_callbacks_) | 139 if (pending_texture_mailbox_callbacks_) |
138 return; | 140 return; |
139 LayerTreeTest::EndTest(); | 141 LayerTreeTest::EndTest(); |
(...skipping 27 matching lines...) Expand all Loading... |
167 return layer; | 169 return layer; |
168 } | 170 } |
169 | 171 |
170 scoped_refptr<TextureLayer> LayerTreePixelTest::CreateTextureLayer( | 172 scoped_refptr<TextureLayer> LayerTreePixelTest::CreateTextureLayer( |
171 gfx::Rect rect, const SkBitmap& bitmap) { | 173 gfx::Rect rect, const SkBitmap& bitmap) { |
172 scoped_refptr<TextureLayer> layer = TextureLayer::CreateForMailbox(NULL); | 174 scoped_refptr<TextureLayer> layer = TextureLayer::CreateForMailbox(NULL); |
173 layer->SetIsDrawable(true); | 175 layer->SetIsDrawable(true); |
174 layer->SetAnchorPoint(gfx::PointF()); | 176 layer->SetAnchorPoint(gfx::PointF()); |
175 layer->SetBounds(rect.size()); | 177 layer->SetBounds(rect.size()); |
176 layer->SetPosition(rect.origin()); | 178 layer->SetPosition(rect.origin()); |
177 layer->SetTextureMailbox(CopyBitmapToTextureMailboxAsTexture(bitmap)); | 179 |
| 180 TextureMailbox texture_mailbox; |
| 181 ScopedReleaseCallback release_callback; |
| 182 CopyBitmapToTextureMailboxAsTexture( |
| 183 bitmap, &texture_mailbox, &release_callback); |
| 184 layer->SetTextureMailbox(texture_mailbox, release_callback.Pass()); |
178 | 185 |
179 texture_layers_.push_back(layer); | 186 texture_layers_.push_back(layer); |
180 pending_texture_mailbox_callbacks_++; | 187 pending_texture_mailbox_callbacks_++; |
181 return layer; | 188 return layer; |
182 } | 189 } |
183 | 190 |
184 void LayerTreePixelTest::RunPixelTest( | 191 void LayerTreePixelTest::RunPixelTest( |
185 PixelTestType test_type, | 192 PixelTestType test_type, |
186 scoped_refptr<Layer> content_root, | 193 scoped_refptr<Layer> content_root, |
187 base::FilePath file_name) { | 194 base::FilePath file_name) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 uint32 texture, | 301 uint32 texture, |
295 uint32 sync_point, | 302 uint32 sync_point, |
296 bool lost_resource) { | 303 bool lost_resource) { |
297 if (sync_point) | 304 if (sync_point) |
298 context3d->waitSyncPoint(sync_point); | 305 context3d->waitSyncPoint(sync_point); |
299 context3d->deleteTexture(texture); | 306 context3d->deleteTexture(texture); |
300 pending_texture_mailbox_callbacks_--; | 307 pending_texture_mailbox_callbacks_--; |
301 TryEndTest(); | 308 TryEndTest(); |
302 } | 309 } |
303 | 310 |
304 TextureMailbox LayerTreePixelTest::CopyBitmapToTextureMailboxAsTexture( | 311 void LayerTreePixelTest::CopyBitmapToTextureMailboxAsTexture( |
305 const SkBitmap& bitmap) { | 312 const SkBitmap& bitmap, |
| 313 TextureMailbox* texture_mailbox, |
| 314 ScopedReleaseCallback* release_callback) { |
306 DCHECK_GT(bitmap.width(), 0); | 315 DCHECK_GT(bitmap.width(), 0); |
307 DCHECK_GT(bitmap.height(), 0); | 316 DCHECK_GT(bitmap.height(), 0); |
308 | 317 |
309 CHECK(gfx::InitializeGLBindings(gfx::kGLImplementationOSMesaGL)); | 318 CHECK(gfx::InitializeGLBindings(gfx::kGLImplementationOSMesaGL)); |
310 | 319 |
311 using webkit::gpu::WebGraphicsContext3DInProcessCommandBufferImpl; | 320 using webkit::gpu::WebGraphicsContext3DInProcessCommandBufferImpl; |
312 scoped_ptr<WebKit::WebGraphicsContext3D> context3d( | 321 scoped_ptr<WebKit::WebGraphicsContext3D> context3d( |
313 WebGraphicsContext3DInProcessCommandBufferImpl::CreateOffscreenContext( | 322 WebGraphicsContext3DInProcessCommandBufferImpl::CreateOffscreenContext( |
314 WebKit::WebGraphicsContext3D::Attributes())); | 323 WebKit::WebGraphicsContext3D::Attributes())); |
315 | 324 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 GL_UNSIGNED_BYTE, | 366 GL_UNSIGNED_BYTE, |
358 gl_pixels.get()); | 367 gl_pixels.get()); |
359 } | 368 } |
360 | 369 |
361 gpu::Mailbox mailbox; | 370 gpu::Mailbox mailbox; |
362 context3d->genMailboxCHROMIUM(mailbox.name); | 371 context3d->genMailboxCHROMIUM(mailbox.name); |
363 context3d->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); | 372 context3d->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
364 context3d->bindTexture(GL_TEXTURE_2D, 0); | 373 context3d->bindTexture(GL_TEXTURE_2D, 0); |
365 uint32 sync_point = context3d->insertSyncPoint(); | 374 uint32 sync_point = context3d->insertSyncPoint(); |
366 | 375 |
367 return TextureMailbox( | 376 *texture_mailbox = TextureMailbox(mailbox, sync_point); |
368 mailbox, | 377 *release_callback = ScopedReleaseCallback( |
369 base::Bind(&LayerTreePixelTest::ReleaseTextureMailbox, | 378 base::Bind(&LayerTreePixelTest::ReleaseTextureMailbox, |
370 base::Unretained(this), | 379 base::Unretained(this), |
371 base::Passed(&context3d), | 380 base::Passed(&context3d), |
372 texture_id), | 381 texture_id)); |
373 sync_point); | |
374 } | 382 } |
375 | 383 |
376 } // namespace cc | 384 } // namespace cc |
OLD | NEW |