| 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 "components/test_runner/test_plugin.h" | 5 #include "components/test_runner/test_plugin.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 bool is_visible) { | 236 bool is_visible) { |
| 237 if (clip_rect == rect_) | 237 if (clip_rect == rect_) |
| 238 return; | 238 return; |
| 239 rect_ = clip_rect; | 239 rect_ = clip_rect; |
| 240 | 240 |
| 241 if (rect_.isEmpty()) { | 241 if (rect_.isEmpty()) { |
| 242 texture_mailbox_ = cc::TextureMailbox(); | 242 texture_mailbox_ = cc::TextureMailbox(); |
| 243 } else if (context_) { | 243 } else if (context_) { |
| 244 context_->viewport(0, 0, rect_.width, rect_.height); | 244 context_->viewport(0, 0, rect_.width, rect_.height); |
| 245 | 245 |
| 246 context_->bindTexture(GL_TEXTURE_2D, color_texture_); | 246 gl_->BindTexture(GL_TEXTURE_2D, color_texture_); |
| 247 context_->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 247 context_->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
| 248 context_->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | 248 context_->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
| 249 context_->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | 249 context_->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| 250 context_->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | 250 context_->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
| 251 context_->texImage2D(GL_TEXTURE_2D, | 251 context_->texImage2D(GL_TEXTURE_2D, |
| 252 0, | 252 0, |
| 253 GL_RGBA, | 253 GL_RGBA, |
| 254 rect_.width, | 254 rect_.width, |
| 255 rect_.height, | 255 rect_.height, |
| 256 0, | 256 0, |
| 257 GL_RGBA, | 257 GL_RGBA, |
| 258 GL_UNSIGNED_BYTE, | 258 GL_UNSIGNED_BYTE, |
| 259 0); | 259 0); |
| 260 context_->bindFramebuffer(GL_FRAMEBUFFER, framebuffer_); | 260 gl_->BindFramebuffer(GL_FRAMEBUFFER, framebuffer_); |
| 261 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, | 261 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, |
| 262 GL_TEXTURE_2D, color_texture_, 0); | 262 GL_TEXTURE_2D, color_texture_, 0); |
| 263 | 263 |
| 264 DrawSceneGL(); | 264 DrawSceneGL(); |
| 265 | 265 |
| 266 gpu::Mailbox mailbox; | 266 gpu::Mailbox mailbox; |
| 267 context_->genMailboxCHROMIUM(mailbox.name); | 267 context_->genMailboxCHROMIUM(mailbox.name); |
| 268 context_->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); | 268 context_->produceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
| 269 const blink::WGC3Duint64 fence_sync = context_->insertFenceSyncCHROMIUM(); | 269 const GLuint64 fence_sync = gl_->InsertFenceSyncCHROMIUM(); |
| 270 context_->flush(); | 270 context_->flush(); |
| 271 | 271 |
| 272 gpu::SyncToken sync_token; | 272 gpu::SyncToken sync_token; |
| 273 context_->genSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); | 273 context_->genSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); |
| 274 texture_mailbox_ = cc::TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D); | 274 texture_mailbox_ = cc::TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D); |
| 275 } else { | 275 } else { |
| 276 scoped_ptr<cc::SharedBitmap> bitmap = | 276 scoped_ptr<cc::SharedBitmap> bitmap = |
| 277 delegate_->GetSharedBitmapManager()->AllocateSharedBitmap( | 277 delegate_->GetSharedBitmapManager()->AllocateSharedBitmap( |
| 278 gfx::Rect(rect_).size()); | 278 gfx::Rect(rect_).size()); |
| 279 if (!bitmap) { | 279 if (!bitmap) { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 if (!context_) | 369 if (!context_) |
| 370 return true; | 370 return true; |
| 371 | 371 |
| 372 float color[4]; | 372 float color[4]; |
| 373 PremultiplyAlpha(scene_.background_color, scene_.opacity, color); | 373 PremultiplyAlpha(scene_.background_color, scene_.opacity, color); |
| 374 | 374 |
| 375 color_texture_ = context_->createTexture(); | 375 color_texture_ = context_->createTexture(); |
| 376 framebuffer_ = context_->createFramebuffer(); | 376 framebuffer_ = context_->createFramebuffer(); |
| 377 | 377 |
| 378 context_->viewport(0, 0, rect_.width, rect_.height); | 378 context_->viewport(0, 0, rect_.width, rect_.height); |
| 379 context_->disable(GL_DEPTH_TEST); | 379 gl_->Disable(GL_DEPTH_TEST); |
| 380 context_->disable(GL_SCISSOR_TEST); | 380 gl_->Disable(GL_SCISSOR_TEST); |
| 381 | 381 |
| 382 context_->clearColor(color[0], color[1], color[2], color[3]); | 382 gl_->ClearColor(color[0], color[1], color[2], color[3]); |
| 383 | 383 |
| 384 context_->enable(GL_BLEND); | 384 gl_->Enable(GL_BLEND); |
| 385 context_->blendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); | 385 gl_->BlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); |
| 386 | 386 |
| 387 return scene_.primitive != PrimitiveNone ? InitProgram() && InitPrimitive() | 387 return scene_.primitive != PrimitiveNone ? InitProgram() && InitPrimitive() |
| 388 : true; | 388 : true; |
| 389 } | 389 } |
| 390 | 390 |
| 391 void TestPlugin::DrawSceneGL() { | 391 void TestPlugin::DrawSceneGL() { |
| 392 context_->viewport(0, 0, rect_.width, rect_.height); | 392 context_->viewport(0, 0, rect_.width, rect_.height); |
| 393 context_->clear(GL_COLOR_BUFFER_BIT); | 393 gl_->Clear(GL_COLOR_BUFFER_BIT); |
| 394 | 394 |
| 395 if (scene_.primitive != PrimitiveNone) | 395 if (scene_.primitive != PrimitiveNone) |
| 396 DrawPrimitive(); | 396 DrawPrimitive(); |
| 397 } | 397 } |
| 398 | 398 |
| 399 void TestPlugin::DrawSceneSoftware(void* memory) { | 399 void TestPlugin::DrawSceneSoftware(void* memory) { |
| 400 SkColor background_color = SkColorSetARGB( | 400 SkColor background_color = SkColorSetARGB( |
| 401 static_cast<uint8_t>(scene_.opacity * 255), scene_.background_color[0], | 401 static_cast<uint8_t>(scene_.opacity * 255), scene_.background_color[0], |
| 402 scene_.background_color[1], scene_.background_color[2]); | 402 scene_.background_color[1], scene_.background_color[2]); |
| 403 | 403 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 | 471 |
| 472 bool TestPlugin::InitPrimitive() { | 472 bool TestPlugin::InitPrimitive() { |
| 473 DCHECK_EQ(scene_.primitive, PrimitiveTriangle); | 473 DCHECK_EQ(scene_.primitive, PrimitiveTriangle); |
| 474 | 474 |
| 475 scene_.vbo = context_->createBuffer(); | 475 scene_.vbo = context_->createBuffer(); |
| 476 if (!scene_.vbo) | 476 if (!scene_.vbo) |
| 477 return false; | 477 return false; |
| 478 | 478 |
| 479 const float vertices[] = {0.0f, 0.8f, 0.0f, -0.8f, -0.8f, | 479 const float vertices[] = {0.0f, 0.8f, 0.0f, -0.8f, -0.8f, |
| 480 0.0f, 0.8f, -0.8f, 0.0f}; | 480 0.0f, 0.8f, -0.8f, 0.0f}; |
| 481 context_->bindBuffer(GL_ARRAY_BUFFER, scene_.vbo); | 481 gl_->BindBuffer(GL_ARRAY_BUFFER, scene_.vbo); |
| 482 context_->bufferData(GL_ARRAY_BUFFER, sizeof(vertices), 0, GL_STATIC_DRAW); | 482 gl_->BufferData(GL_ARRAY_BUFFER, sizeof(vertices), 0, GL_STATIC_DRAW); |
| 483 context_->bufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); | 483 gl_->BufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); |
| 484 return true; | 484 return true; |
| 485 } | 485 } |
| 486 | 486 |
| 487 void TestPlugin::DrawPrimitive() { | 487 void TestPlugin::DrawPrimitive() { |
| 488 DCHECK_EQ(scene_.primitive, PrimitiveTriangle); | 488 DCHECK_EQ(scene_.primitive, PrimitiveTriangle); |
| 489 DCHECK(scene_.vbo); | 489 DCHECK(scene_.vbo); |
| 490 DCHECK(scene_.program); | 490 DCHECK(scene_.program); |
| 491 | 491 |
| 492 context_->useProgram(scene_.program); | 492 context_->useProgram(scene_.program); |
| 493 | 493 |
| 494 // Bind primitive color. | 494 // Bind primitive color. |
| 495 float color[4]; | 495 float color[4]; |
| 496 PremultiplyAlpha(scene_.primitive_color, scene_.opacity, color); | 496 PremultiplyAlpha(scene_.primitive_color, scene_.opacity, color); |
| 497 context_->uniform4f( | 497 context_->uniform4f( |
| 498 scene_.color_location, color[0], color[1], color[2], color[3]); | 498 scene_.color_location, color[0], color[1], color[2], color[3]); |
| 499 | 499 |
| 500 // Bind primitive vertices. | 500 // Bind primitive vertices. |
| 501 context_->bindBuffer(GL_ARRAY_BUFFER, scene_.vbo); | 501 gl_->BindBuffer(GL_ARRAY_BUFFER, scene_.vbo); |
| 502 context_->enableVertexAttribArray(scene_.position_location); | 502 gl_->EnableVertexAttribArray(scene_.position_location); |
| 503 context_->vertexAttribPointer( | 503 context_->vertexAttribPointer( |
| 504 scene_.position_location, 3, GL_FLOAT, GL_FALSE, 0, 0); | 504 scene_.position_location, 3, GL_FLOAT, GL_FALSE, 0, 0); |
| 505 context_->drawArrays(GL_TRIANGLES, 0, 3); | 505 gl_->DrawArrays(GL_TRIANGLES, 0, 3); |
| 506 } | 506 } |
| 507 | 507 |
| 508 unsigned TestPlugin::LoadShader(unsigned type, const std::string& source) { | 508 unsigned TestPlugin::LoadShader(unsigned type, const std::string& source) { |
| 509 unsigned shader = context_->createShader(type); | 509 unsigned shader = context_->createShader(type); |
| 510 if (shader) { | 510 if (shader) { |
| 511 context_->shaderSource(shader, source.data()); | 511 context_->shaderSource(shader, source.data()); |
| 512 context_->compileShader(shader); | 512 gl_->CompileShader(shader); |
| 513 | 513 |
| 514 int compiled = 0; | 514 int compiled = 0; |
| 515 context_->getShaderiv(shader, GL_COMPILE_STATUS, &compiled); | 515 context_->getShaderiv(shader, GL_COMPILE_STATUS, &compiled); |
| 516 if (!compiled) { | 516 if (!compiled) { |
| 517 context_->deleteShader(shader); | 517 context_->deleteShader(shader); |
| 518 shader = 0; | 518 shader = 0; |
| 519 } | 519 } |
| 520 } | 520 } |
| 521 return shader; | 521 return shader; |
| 522 } | 522 } |
| 523 | 523 |
| 524 unsigned TestPlugin::LoadProgram(const std::string& vertex_source, | 524 unsigned TestPlugin::LoadProgram(const std::string& vertex_source, |
| 525 const std::string& fragment_source) { | 525 const std::string& fragment_source) { |
| 526 unsigned vertex_shader = LoadShader(GL_VERTEX_SHADER, vertex_source); | 526 unsigned vertex_shader = LoadShader(GL_VERTEX_SHADER, vertex_source); |
| 527 unsigned fragment_shader = LoadShader(GL_FRAGMENT_SHADER, fragment_source); | 527 unsigned fragment_shader = LoadShader(GL_FRAGMENT_SHADER, fragment_source); |
| 528 unsigned program = context_->createProgram(); | 528 unsigned program = context_->createProgram(); |
| 529 if (vertex_shader && fragment_shader && program) { | 529 if (vertex_shader && fragment_shader && program) { |
| 530 context_->attachShader(program, vertex_shader); | 530 gl_->AttachShader(program, vertex_shader); |
| 531 context_->attachShader(program, fragment_shader); | 531 gl_->AttachShader(program, fragment_shader); |
| 532 context_->linkProgram(program); | 532 context_->linkProgram(program); |
| 533 | 533 |
| 534 int linked = 0; | 534 int linked = 0; |
| 535 context_->getProgramiv(program, GL_LINK_STATUS, &linked); | 535 context_->getProgramiv(program, GL_LINK_STATUS, &linked); |
| 536 if (!linked) { | 536 if (!linked) { |
| 537 context_->deleteProgram(program); | 537 context_->deleteProgram(program); |
| 538 program = 0; | 538 program = 0; |
| 539 } | 539 } |
| 540 } | 540 } |
| 541 if (vertex_shader) | 541 if (vertex_shader) |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 return kPluginPersistsMimeType; | 732 return kPluginPersistsMimeType; |
| 733 } | 733 } |
| 734 | 734 |
| 735 bool TestPlugin::IsSupportedMimeType(const blink::WebString& mime_type) { | 735 bool TestPlugin::IsSupportedMimeType(const blink::WebString& mime_type) { |
| 736 return mime_type == TestPlugin::MimeType() || | 736 return mime_type == TestPlugin::MimeType() || |
| 737 mime_type == PluginPersistsMimeType() || | 737 mime_type == PluginPersistsMimeType() || |
| 738 mime_type == CanCreateWithoutRendererMimeType(); | 738 mime_type == CanCreateWithoutRendererMimeType(); |
| 739 } | 739 } |
| 740 | 740 |
| 741 } // namespace test_runner | 741 } // namespace test_runner |
| OLD | NEW |