| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "gpu/ipc/service/direct_composition_surface_win.h" | 5 #include "gpu/ipc/service/direct_composition_surface_win.h" |
| 6 #include "base/memory/weak_ptr.h" | 6 #include "base/memory/weak_ptr.h" |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/synchronization/waitable_event.h" | 8 #include "base/synchronization/waitable_event.h" |
| 9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" |
| 10 #include "base/win/scoped_gdi_object.h" | 10 #include "base/win/scoped_gdi_object.h" |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 gl::QueryD3D11DeviceObjectFromANGLE(); | 302 gl::QueryD3D11DeviceObjectFromANGLE(); |
| 303 | 303 |
| 304 gfx::Size texture_size(50, 50); | 304 gfx::Size texture_size(50, 50); |
| 305 base::win::ScopedComPtr<ID3D11Texture2D> texture = | 305 base::win::ScopedComPtr<ID3D11Texture2D> texture = |
| 306 CreateNV12Texture(d3d11_device, texture_size); | 306 CreateNV12Texture(d3d11_device, texture_size); |
| 307 | 307 |
| 308 scoped_refptr<gl::GLImageDXGI> image_dxgi( | 308 scoped_refptr<gl::GLImageDXGI> image_dxgi( |
| 309 new gl::GLImageDXGI(texture_size, nullptr)); | 309 new gl::GLImageDXGI(texture_size, nullptr)); |
| 310 image_dxgi->SetTexture(texture, 0); | 310 image_dxgi->SetTexture(texture, 0); |
| 311 | 311 |
| 312 ui::DCRendererLayerParams params(false, gfx::Rect(), 1, gfx::Transform(), | 312 ui::DCRendererLayerParams params( |
| 313 image_dxgi.get(), | 313 false, gfx::Rect(), 1, gfx::Transform(), |
| 314 gfx::RectF(gfx::Rect(texture_size)), | 314 std::vector<scoped_refptr<gl::GLImage>>{image_dxgi}, |
| 315 gfx::Rect(window_size), 0, 0, 1.0, 0); | 315 gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(window_size), 0, 0, 1.0, |
| 316 0); |
| 316 surface->ScheduleDCLayer(params); | 317 surface->ScheduleDCLayer(params); |
| 317 | 318 |
| 318 base::win::ScopedComPtr<IDXGISwapChain1> swap_chain = | 319 base::win::ScopedComPtr<IDXGISwapChain1> swap_chain = |
| 319 surface->GetLayerSwapChainForTesting(1); | 320 surface->GetLayerSwapChainForTesting(1); |
| 320 ASSERT_FALSE(swap_chain); | 321 ASSERT_FALSE(swap_chain); |
| 321 | 322 |
| 322 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers()); | 323 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers()); |
| 323 | 324 |
| 324 swap_chain = surface->GetLayerSwapChainForTesting(1); | 325 swap_chain = surface->GetLayerSwapChainForTesting(1); |
| 325 ASSERT_TRUE(swap_chain); | 326 ASSERT_TRUE(swap_chain); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 336 | 337 |
| 337 base::win::ScopedComPtr<IDXGISwapChain1> swap_chain2 = | 338 base::win::ScopedComPtr<IDXGISwapChain1> swap_chain2 = |
| 338 surface->GetLayerSwapChainForTesting(1); | 339 surface->GetLayerSwapChainForTesting(1); |
| 339 EXPECT_EQ(swap_chain2, swap_chain); | 340 EXPECT_EQ(swap_chain2, swap_chain); |
| 340 | 341 |
| 341 // It's the same image, so it should have the same swapchain. | 342 // It's the same image, so it should have the same swapchain. |
| 342 EXPECT_TRUE(SUCCEEDED(swap_chain->GetLastPresentCount(&last_present_count))); | 343 EXPECT_TRUE(SUCCEEDED(swap_chain->GetLastPresentCount(&last_present_count))); |
| 343 EXPECT_EQ(2u, last_present_count); | 344 EXPECT_EQ(2u, last_present_count); |
| 344 | 345 |
| 345 // The size of the swapchain changed, so it should be recreated. | 346 // The size of the swapchain changed, so it should be recreated. |
| 346 ui::DCRendererLayerParams params2(false, gfx::Rect(), 1, gfx::Transform(), | 347 ui::DCRendererLayerParams params2( |
| 347 image_dxgi.get(), | 348 false, gfx::Rect(), 1, gfx::Transform(), |
| 348 gfx::RectF(gfx::Rect(texture_size)), | 349 std::vector<scoped_refptr<gl::GLImage>>{image_dxgi}, |
| 349 gfx::Rect(0, 0, 25, 25), 0, 0, 1.0, 0); | 350 gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(0, 0, 25, 25), 0, 0, 1.0, |
| 351 0); |
| 350 surface->ScheduleDCLayer(params2); | 352 surface->ScheduleDCLayer(params2); |
| 351 | 353 |
| 352 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers()); | 354 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface->SwapBuffers()); |
| 353 | 355 |
| 354 base::win::ScopedComPtr<IDXGISwapChain1> swap_chain3 = | 356 base::win::ScopedComPtr<IDXGISwapChain1> swap_chain3 = |
| 355 surface->GetLayerSwapChainForTesting(1); | 357 surface->GetLayerSwapChainForTesting(1); |
| 356 EXPECT_NE(swap_chain2, swap_chain3); | 358 EXPECT_NE(swap_chain2, swap_chain3); |
| 357 | 359 |
| 358 context = nullptr; | 360 context = nullptr; |
| 359 DestroySurface(std::move(surface)); | 361 DestroySurface(std::move(surface)); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 gl::QueryD3D11DeviceObjectFromANGLE(); | 478 gl::QueryD3D11DeviceObjectFromANGLE(); |
| 477 | 479 |
| 478 gfx::Size texture_size(50, 50); | 480 gfx::Size texture_size(50, 50); |
| 479 base::win::ScopedComPtr<ID3D11Texture2D> texture = | 481 base::win::ScopedComPtr<ID3D11Texture2D> texture = |
| 480 CreateNV12Texture(d3d11_device, texture_size); | 482 CreateNV12Texture(d3d11_device, texture_size); |
| 481 | 483 |
| 482 scoped_refptr<gl::GLImageDXGI> image_dxgi( | 484 scoped_refptr<gl::GLImageDXGI> image_dxgi( |
| 483 new gl::GLImageDXGI(texture_size, nullptr)); | 485 new gl::GLImageDXGI(texture_size, nullptr)); |
| 484 image_dxgi->SetTexture(texture, 0); | 486 image_dxgi->SetTexture(texture, 0); |
| 485 | 487 |
| 486 ui::DCRendererLayerParams params(false, gfx::Rect(), 1, gfx::Transform(), | 488 ui::DCRendererLayerParams params( |
| 487 image_dxgi.get(), | 489 false, gfx::Rect(), 1, gfx::Transform(), |
| 488 gfx::RectF(gfx::Rect(texture_size)), | 490 std::vector<scoped_refptr<gl::GLImage>>{image_dxgi}, |
| 489 gfx::Rect(window_size), 0, 0, 1.0, 0); | 491 gfx::RectF(gfx::Rect(texture_size)), gfx::Rect(window_size), 0, 0, 1.0, |
| 492 0); |
| 490 surface_->ScheduleDCLayer(params); | 493 surface_->ScheduleDCLayer(params); |
| 491 | 494 |
| 492 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface_->SwapBuffers()); | 495 EXPECT_EQ(gfx::SwapResult::SWAP_ACK, surface_->SwapBuffers()); |
| 493 Sleep(1000); | 496 Sleep(1000); |
| 494 | 497 |
| 495 SkColor expected_color = SkColorSetRGB(0xff, 0xb7, 0xff); | 498 SkColor expected_color = SkColorSetRGB(0xff, 0xb7, 0xff); |
| 496 SkColor actual_color = | 499 SkColor actual_color = |
| 497 ReadBackWindowPixel(window_.hwnd(), gfx::Point(75, 75)); | 500 ReadBackWindowPixel(window_.hwnd(), gfx::Point(75, 75)); |
| 498 EXPECT_TRUE(AreColorsSimilar(expected_color, actual_color)) | 501 EXPECT_TRUE(AreColorsSimilar(expected_color, actual_color)) |
| 499 << std::hex << "Expected " << expected_color << " Actual " | 502 << std::hex << "Expected " << expected_color << " Actual " |
| 500 << actual_color; | 503 << actual_color; |
| 501 | 504 |
| 502 context = nullptr; | 505 context = nullptr; |
| 503 DestroySurface(std::move(surface_)); | 506 DestroySurface(std::move(surface_)); |
| 504 } | 507 } |
| 505 | 508 |
| 506 } // namespace | 509 } // namespace |
| 507 } // namespace gpu | 510 } // namespace gpu |
| OLD | NEW |