Chromium Code Reviews| 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/test_web_graphics_context_3d.h" | 5 #include "cc/test/test_web_graphics_context_3d.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "cc/test/test_context_support.h" | 14 #include "cc/test/test_context_support.h" |
| 15 #include "gpu/GLES2/gl2extchromium.h" | 15 #include "gpu/GLES2/gl2extchromium.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | |
| 16 #include "third_party/khronos/GLES2/gl2ext.h" | 17 #include "third_party/khronos/GLES2/gl2ext.h" |
| 17 | 18 |
| 18 using WebKit::WGC3Dboolean; | 19 using WebKit::WGC3Dboolean; |
| 19 using WebKit::WGC3Dchar; | 20 using WebKit::WGC3Dchar; |
| 20 using WebKit::WGC3Denum; | 21 using WebKit::WGC3Denum; |
| 21 using WebKit::WGC3Dint; | 22 using WebKit::WGC3Dint; |
| 22 using WebKit::WGC3Dsizei; | 23 using WebKit::WGC3Dsizei; |
| 23 using WebKit::WGC3Dsizeiptr; | 24 using WebKit::WGC3Dsizeiptr; |
| 24 using WebKit::WGC3Duint; | 25 using WebKit::WGC3Duint; |
| 25 using WebKit::WebGLId; | 26 using WebKit::WebGLId; |
| 26 using WebKit::WebGraphicsContext3D; | 27 using WebKit::WebGraphicsContext3D; |
| 27 | 28 |
| 28 namespace cc { | 29 namespace cc { |
| 29 | 30 |
| 30 static const WebGLId kFramebufferId = 1; | 31 static const WebGLId kFramebufferId = 1; |
| 31 static const WebGLId kProgramId = 2; | 32 static const WebGLId kRenderbufferId = 2; |
| 32 static const WebGLId kRenderbufferId = 3; | |
| 33 static const WebGLId kShaderId = 4; | |
| 34 | 33 |
| 35 static unsigned s_context_id = 1; | 34 static unsigned s_context_id = 1; |
| 36 | 35 |
| 37 const WebGLId TestWebGraphicsContext3D::kExternalTextureId = 1337; | 36 const WebGLId TestWebGraphicsContext3D::kExternalTextureId = 1337; |
| 38 | 37 |
| 39 static base::LazyInstance<base::Lock>::Leaky | 38 static base::LazyInstance<base::Lock>::Leaky |
| 40 g_shared_namespace_lock = LAZY_INSTANCE_INITIALIZER; | 39 g_shared_namespace_lock = LAZY_INSTANCE_INITIALIZER; |
| 41 | 40 |
| 42 TestWebGraphicsContext3D::Namespace* | 41 TestWebGraphicsContext3D::Namespace* |
| 43 TestWebGraphicsContext3D::shared_namespace_ = NULL; | 42 TestWebGraphicsContext3D::shared_namespace_ = NULL; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 64 context_id_(s_context_id++), | 63 context_id_(s_context_id++), |
| 65 times_make_current_succeeds_(-1), | 64 times_make_current_succeeds_(-1), |
| 66 times_bind_texture_succeeds_(-1), | 65 times_bind_texture_succeeds_(-1), |
| 67 times_end_query_succeeds_(-1), | 66 times_end_query_succeeds_(-1), |
| 68 times_gen_mailbox_succeeds_(-1), | 67 times_gen_mailbox_succeeds_(-1), |
| 69 context_lost_(false), | 68 context_lost_(false), |
| 70 times_map_image_chromium_succeeds_(-1), | 69 times_map_image_chromium_succeeds_(-1), |
| 71 times_map_buffer_chromium_succeeds_(-1), | 70 times_map_buffer_chromium_succeeds_(-1), |
| 72 context_lost_callback_(NULL), | 71 context_lost_callback_(NULL), |
| 73 swap_buffers_callback_(NULL), | 72 swap_buffers_callback_(NULL), |
| 73 next_program_id_(1000), | |
| 74 next_shader_id_(2000), | |
| 74 max_texture_size_(2048), | 75 max_texture_size_(2048), |
| 76 reshape_called_(false), | |
| 75 width_(0), | 77 width_(0), |
| 76 height_(0), | 78 height_(0), |
| 79 scale_factor_(-1.f), | |
| 77 test_support_(NULL), | 80 test_support_(NULL), |
| 81 last_update_type_(NoUpdate), | |
| 78 bound_buffer_(0), | 82 bound_buffer_(0), |
| 79 weak_ptr_factory_(this) { | 83 weak_ptr_factory_(this) { |
| 80 CreateNamespace(); | 84 CreateNamespace(); |
| 81 test_capabilities_.swapbuffers_complete_callback = true; | 85 test_capabilities_.swapbuffers_complete_callback = true; |
| 82 } | 86 } |
| 83 | 87 |
| 84 TestWebGraphicsContext3D::~TestWebGraphicsContext3D() { | 88 TestWebGraphicsContext3D::~TestWebGraphicsContext3D() { |
| 85 base::AutoLock lock(g_shared_namespace_lock.Get()); | 89 base::AutoLock lock(g_shared_namespace_lock.Get()); |
| 86 namespace_ = NULL; | 90 namespace_ = NULL; |
| 87 } | 91 } |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 106 loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, | 110 loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
| 107 GL_INNOCENT_CONTEXT_RESET_ARB); | 111 GL_INNOCENT_CONTEXT_RESET_ARB); |
| 108 } | 112 } |
| 109 --times_make_current_succeeds_; | 113 --times_make_current_succeeds_; |
| 110 } | 114 } |
| 111 return !context_lost_; | 115 return !context_lost_; |
| 112 } | 116 } |
| 113 | 117 |
| 114 void TestWebGraphicsContext3D::reshapeWithScaleFactor( | 118 void TestWebGraphicsContext3D::reshapeWithScaleFactor( |
| 115 int width, int height, float scale_factor) { | 119 int width, int height, float scale_factor) { |
| 120 reshape_called_ = true; | |
| 116 width_ = width; | 121 width_ = width; |
| 117 height_ = height; | 122 height_ = height; |
| 123 scale_factor_ = scale_factor; | |
| 118 } | 124 } |
| 119 | 125 |
| 120 bool TestWebGraphicsContext3D::isContextLost() { | 126 bool TestWebGraphicsContext3D::isContextLost() { |
| 121 return context_lost_; | 127 return context_lost_; |
| 122 } | 128 } |
| 123 | 129 |
| 124 WGC3Denum TestWebGraphicsContext3D::getGraphicsResetStatusARB() { | 130 WGC3Denum TestWebGraphicsContext3D::getGraphicsResetStatusARB() { |
| 125 return context_lost_ ? GL_UNKNOWN_CONTEXT_RESET_ARB : GL_NO_ERROR; | 131 return context_lost_ ? GL_UNKNOWN_CONTEXT_RESET_ARB : GL_NO_ERROR; |
| 126 } | 132 } |
| 127 | 133 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 278 } | 284 } |
| 279 | 285 |
| 280 void TestWebGraphicsContext3D::deleteRenderbuffer(WebGLId id) { | 286 void TestWebGraphicsContext3D::deleteRenderbuffer(WebGLId id) { |
| 281 deleteRenderbuffers(1, &id); | 287 deleteRenderbuffers(1, &id); |
| 282 } | 288 } |
| 283 | 289 |
| 284 void TestWebGraphicsContext3D::deleteTexture(WebGLId id) { | 290 void TestWebGraphicsContext3D::deleteTexture(WebGLId id) { |
| 285 deleteTextures(1, &id); | 291 deleteTextures(1, &id); |
| 286 } | 292 } |
| 287 | 293 |
| 288 WebGLId TestWebGraphicsContext3D::createProgram() { | 294 unsigned TestWebGraphicsContext3D::createProgram() { |
| 289 return kProgramId | context_id_ << 16; | 295 unsigned program = next_program_id_++ | context_id_ << 16; |
| 296 program_set_.insert(program); | |
| 297 return program; | |
| 290 } | 298 } |
| 291 | 299 |
| 292 WebGLId TestWebGraphicsContext3D::createShader(WGC3Denum) { | 300 WebGLId TestWebGraphicsContext3D::createShader(WGC3Denum) { |
| 293 return kShaderId | context_id_ << 16; | 301 unsigned shader = next_shader_id_++ | context_id_ << 16; |
| 302 shader_set_.insert(shader); | |
| 303 return shader; | |
| 294 } | 304 } |
| 295 | 305 |
| 296 WebGLId TestWebGraphicsContext3D::createExternalTexture() { | 306 WebGLId TestWebGraphicsContext3D::createExternalTexture() { |
| 297 base::AutoLock lock(namespace_->lock); | 307 base::AutoLock lock(namespace_->lock); |
| 298 namespace_->textures.Append(kExternalTextureId, new TestTexture()); | 308 namespace_->textures.Append(kExternalTextureId, new TestTexture()); |
| 299 return kExternalTextureId; | 309 return kExternalTextureId; |
| 300 } | 310 } |
| 301 | 311 |
| 302 void TestWebGraphicsContext3D::deleteProgram(WebGLId id) { | 312 void TestWebGraphicsContext3D::deleteProgram(WebGLId id) { |
| 303 DCHECK_EQ(kProgramId | context_id_ << 16, id); | 313 if (!program_set_.count(id)) |
| 314 ADD_FAILURE() << "deleteProgram called on unknown program " << id; | |
| 315 program_set_.erase(id); | |
| 304 } | 316 } |
| 305 | 317 |
| 306 void TestWebGraphicsContext3D::deleteShader(WebGLId id) { | 318 void TestWebGraphicsContext3D::deleteShader(WebGLId id) { |
| 307 DCHECK_EQ(kShaderId | context_id_ << 16, id); | 319 if (!shader_set_.count(id)) |
| 320 ADD_FAILURE() << "deleteShader called on unknown shader " << id; | |
| 321 shader_set_.erase(id); | |
| 308 } | 322 } |
| 309 | 323 |
| 310 void TestWebGraphicsContext3D::attachShader(WebGLId program, WebGLId shader) { | 324 void TestWebGraphicsContext3D::attachShader(WebGLId program, WebGLId shader) { |
| 311 DCHECK_EQ(kProgramId | context_id_ << 16, program); | 325 if (!program_set_.count(program)) |
| 312 DCHECK_EQ(kShaderId | context_id_ << 16, shader); | 326 ADD_FAILURE() << "attachShader called with unknown program " << program; |
| 327 if (!shader_set_.count(shader)) | |
| 328 ADD_FAILURE() << "attachShader called with unknown shader " << shader; | |
| 313 } | 329 } |
| 314 | 330 |
| 315 void TestWebGraphicsContext3D::useProgram(WebGLId program) { | 331 void TestWebGraphicsContext3D::useProgram(WebGLId program) { |
| 316 if (!program) | 332 if (!program) |
| 317 return; | 333 return; |
| 318 DCHECK_EQ(kProgramId | context_id_ << 16, program); | 334 if (!program_set_.count(program)) |
| 335 ADD_FAILURE() << "useProgram called on unknown program " << program; | |
| 319 } | 336 } |
| 320 | 337 |
| 321 void TestWebGraphicsContext3D::bindFramebuffer( | 338 void TestWebGraphicsContext3D::bindFramebuffer( |
| 322 WGC3Denum target, WebGLId framebuffer) { | 339 WGC3Denum target, WebGLId framebuffer) { |
| 323 if (!framebuffer) | 340 if (!framebuffer) |
| 324 return; | 341 return; |
| 325 DCHECK_EQ(kFramebufferId | context_id_ << 16, framebuffer); | 342 DCHECK_EQ(kFramebufferId | context_id_ << 16, framebuffer); |
| 326 } | 343 } |
| 327 | 344 |
| 328 void TestWebGraphicsContext3D::bindRenderbuffer( | 345 void TestWebGraphicsContext3D::bindRenderbuffer( |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 425 shared_contexts_.clear(); | 442 shared_contexts_.clear(); |
| 426 } | 443 } |
| 427 | 444 |
| 428 void TestWebGraphicsContext3D::setSwapBuffersCompleteCallbackCHROMIUM( | 445 void TestWebGraphicsContext3D::setSwapBuffersCompleteCallbackCHROMIUM( |
| 429 WebGraphicsSwapBuffersCompleteCallbackCHROMIUM* callback) { | 446 WebGraphicsSwapBuffersCompleteCallbackCHROMIUM* callback) { |
| 430 if (test_capabilities_.swapbuffers_complete_callback) | 447 if (test_capabilities_.swapbuffers_complete_callback) |
| 431 swap_buffers_callback_ = callback; | 448 swap_buffers_callback_ = callback; |
| 432 } | 449 } |
| 433 | 450 |
| 434 void TestWebGraphicsContext3D::prepareTexture() { | 451 void TestWebGraphicsContext3D::prepareTexture() { |
| 452 update_rect_ = gfx::Rect(width_, height_); | |
| 453 last_update_type_ = PrepareTexture; | |
| 454 | |
| 435 // TODO(jamesr): This should implemented as ContextSupport::SwapBuffers(). | 455 // TODO(jamesr): This should implemented as ContextSupport::SwapBuffers(). |
| 436 if (swap_buffers_callback_) { | 456 if (swap_buffers_callback_) { |
| 437 base::MessageLoop::current()->PostTask( | 457 base::MessageLoop::current()->PostTask( |
| 438 FROM_HERE, base::Bind(&TestWebGraphicsContext3D::SwapBuffersComplete, | 458 FROM_HERE, base::Bind(&TestWebGraphicsContext3D::SwapBuffersComplete, |
| 439 weak_ptr_factory_.GetWeakPtr())); | 459 weak_ptr_factory_.GetWeakPtr())); |
| 440 } | 460 } |
| 441 test_support_->CallAllSyncPointCallbacks(); | 461 test_support_->CallAllSyncPointCallbacks(); |
| 442 } | 462 } |
| 443 | 463 |
| 464 void TestWebGraphicsContext3D::postSubBufferCHROMIUM( | |
| 465 int x, int y, int width, int height) { | |
| 466 update_rect_ = gfx::Rect(x, y, width, height); | |
| 467 last_update_type_ = PostSubBuffer; | |
| 468 } | |
| 469 | |
| 470 void TestWebGraphicsContext3D::enable(GLenum cap) {} | |
|
danakj
2013/10/31 18:20:02
why override these and do nothing? remove these?
| |
| 471 void TestWebGraphicsContext3D::disable(GLenum cap) {} | |
| 472 | |
| 444 void TestWebGraphicsContext3D::finish() { | 473 void TestWebGraphicsContext3D::finish() { |
| 445 test_support_->CallAllSyncPointCallbacks(); | 474 test_support_->CallAllSyncPointCallbacks(); |
| 446 } | 475 } |
| 447 | 476 |
| 448 void TestWebGraphicsContext3D::flush() { | 477 void TestWebGraphicsContext3D::flush() { |
| 449 test_support_->CallAllSyncPointCallbacks(); | 478 test_support_->CallAllSyncPointCallbacks(); |
| 450 } | 479 } |
| 451 | 480 |
| 452 void TestWebGraphicsContext3D::SwapBuffersComplete() { | 481 void TestWebGraphicsContext3D::SwapBuffersComplete() { |
| 453 if (swap_buffers_callback_) | 482 if (swap_buffers_callback_) |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 656 | 685 |
| 657 TestWebGraphicsContext3D::Buffer::Buffer() : target(0), size(0) {} | 686 TestWebGraphicsContext3D::Buffer::Buffer() : target(0), size(0) {} |
| 658 | 687 |
| 659 TestWebGraphicsContext3D::Buffer::~Buffer() {} | 688 TestWebGraphicsContext3D::Buffer::~Buffer() {} |
| 660 | 689 |
| 661 TestWebGraphicsContext3D::Image::Image() {} | 690 TestWebGraphicsContext3D::Image::Image() {} |
| 662 | 691 |
| 663 TestWebGraphicsContext3D::Image::~Image() {} | 692 TestWebGraphicsContext3D::Image::~Image() {} |
| 664 | 693 |
| 665 } // namespace cc | 694 } // namespace cc |
| OLD | NEW |