OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_aura.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/memory/shared_memory.h" | 9 #include "base/memory/shared_memory.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "cc/output/compositor_frame.h" | 13 #include "cc/output/compositor_frame.h" |
14 #include "cc/output/compositor_frame_metadata.h" | 14 #include "cc/output/compositor_frame_metadata.h" |
15 #include "cc/output/copy_output_request.h" | 15 #include "cc/output/copy_output_request.h" |
| 16 #include "cc/surfaces/surface.h" |
| 17 #include "cc/surfaces/surface_manager.h" |
16 #include "content/browser/browser_thread_impl.h" | 18 #include "content/browser/browser_thread_impl.h" |
17 #include "content/browser/compositor/resize_lock.h" | 19 #include "content/browser/compositor/resize_lock.h" |
18 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
" | 20 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
" |
19 #include "content/browser/renderer_host/overscroll_controller.h" | 21 #include "content/browser/renderer_host/overscroll_controller.h" |
20 #include "content/browser/renderer_host/overscroll_controller_delegate.h" | 22 #include "content/browser/renderer_host/overscroll_controller_delegate.h" |
21 #include "content/browser/renderer_host/render_widget_host_delegate.h" | 23 #include "content/browser/renderer_host/render_widget_host_delegate.h" |
22 #include "content/browser/renderer_host/render_widget_host_impl.h" | 24 #include "content/browser/renderer_host/render_widget_host_impl.h" |
23 #include "content/common/gpu/client/gl_helper.h" | 25 #include "content/common/gpu/client/gl_helper.h" |
24 #include "content/common/gpu/gpu_messages.h" | 26 #include "content/common/gpu/gpu_messages.h" |
25 #include "content/common/host_shared_bitmap_manager.h" | 27 #include "content/common/host_shared_bitmap_manager.h" |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 last_copy_request_->texture_mailbox().sync_point()); | 253 last_copy_request_->texture_mailbox().sync_point()); |
252 gl_helper->ResizeTexture(texture, window()->bounds().size()); | 254 gl_helper->ResizeTexture(texture, window()->bounds().size()); |
253 gl_helper->DeleteTexture(texture); | 255 gl_helper->DeleteTexture(texture); |
254 } | 256 } |
255 } | 257 } |
256 | 258 |
257 cc::DelegatedFrameProvider* frame_provider() const { | 259 cc::DelegatedFrameProvider* frame_provider() const { |
258 return GetDelegatedFrameHost()->FrameProviderForTesting(); | 260 return GetDelegatedFrameHost()->FrameProviderForTesting(); |
259 } | 261 } |
260 | 262 |
| 263 cc::SurfaceId surface_id() const { |
| 264 return GetDelegatedFrameHost()->SurfaceIdForTesting(); |
| 265 } |
| 266 |
| 267 bool HasFrameData() const { |
| 268 return frame_provider() || !surface_id().is_null(); |
| 269 } |
| 270 |
261 bool released_front_lock_active() const { | 271 bool released_front_lock_active() const { |
262 return GetDelegatedFrameHost()->ReleasedFrontLockActiveForTesting(); | 272 return GetDelegatedFrameHost()->ReleasedFrontLockActiveForTesting(); |
263 } | 273 } |
264 | 274 |
265 // A lock that doesn't actually do anything to the compositor, and does not | 275 // A lock that doesn't actually do anything to the compositor, and does not |
266 // time out. | 276 // time out. |
267 class FakeResizeLock : public ResizeLock { | 277 class FakeResizeLock : public ResizeLock { |
268 public: | 278 public: |
269 FakeResizeLock(const gfx::Size new_size, bool defer_compositor_lock) | 279 FakeResizeLock(const gfx::Size new_size, bool defer_compositor_lock) |
270 : ResizeLock(new_size, defer_compositor_lock) {} | 280 : ResizeLock(new_size, defer_compositor_lock) {} |
(...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1340 0, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | 1350 0, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
1341 // No frame ack yet. | 1351 // No frame ack yet. |
1342 EXPECT_EQ(0u, sink_->message_count()); | 1352 EXPECT_EQ(0u, sink_->message_count()); |
1343 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 1353 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
1344 | 1354 |
1345 // Wait for commit, then we should unlock the compositor and send a Resize | 1355 // Wait for commit, then we should unlock the compositor and send a Resize |
1346 // message (and a frame ack) | 1356 // message (and a frame ack) |
1347 ui::DrawWaiterForTest::WaitForCommit( | 1357 ui::DrawWaiterForTest::WaitForCommit( |
1348 root_window->GetHost()->compositor()); | 1358 root_window->GetHost()->compositor()); |
1349 EXPECT_EQ(size3.ToString(), view_->GetRequestedRendererSize().ToString()); | 1359 EXPECT_EQ(size3.ToString(), view_->GetRequestedRendererSize().ToString()); |
| 1360 cc::SurfaceId surface_id = view_->surface_id(); |
| 1361 int swap_index = 0; |
| 1362 int resize_index = 1; |
| 1363 if (!surface_id.is_null()) { |
| 1364 // Frame ack is sent only due to a draw callback with surfaces. |
| 1365 ImageTransportFactory::GetInstance() |
| 1366 ->GetSurfaceManager() |
| 1367 ->GetSurfaceForId(surface_id) |
| 1368 ->RunDrawCallbacks(); |
| 1369 swap_index = 1; |
| 1370 resize_index = 0; |
| 1371 } |
1350 EXPECT_EQ(2u, sink_->message_count()); | 1372 EXPECT_EQ(2u, sink_->message_count()); |
1351 EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID, sink_->GetMessageAt(0)->type()); | 1373 EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID, |
| 1374 sink_->GetMessageAt(swap_index)->type()); |
1352 { | 1375 { |
1353 const IPC::Message* msg = sink_->GetMessageAt(1); | 1376 const IPC::Message* msg = sink_->GetMessageAt(resize_index); |
1354 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); | 1377 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); |
1355 ViewMsg_Resize::Param params; | 1378 ViewMsg_Resize::Param params; |
1356 ViewMsg_Resize::Read(msg, ¶ms); | 1379 ViewMsg_Resize::Read(msg, ¶ms); |
1357 EXPECT_EQ(size3.ToString(), params.a.new_size.ToString()); | 1380 EXPECT_EQ(size3.ToString(), params.a.new_size.ToString()); |
1358 } | 1381 } |
1359 update_params.view_size = size3; | 1382 update_params.view_size = size3; |
1360 widget_host_->OnMessageReceived( | 1383 widget_host_->OnMessageReceived( |
1361 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); | 1384 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); |
1362 sink_->ClearMessages(); | 1385 sink_->ClearMessages(); |
1363 } | 1386 } |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1520 parent_view_->GetNativeView()->GetRootWindow(), | 1543 parent_view_->GetNativeView()->GetRootWindow(), |
1521 gfx::Rect()); | 1544 gfx::Rect()); |
1522 views[i]->SetSize(view_rect.size()); | 1545 views[i]->SetSize(view_rect.size()); |
1523 } | 1546 } |
1524 | 1547 |
1525 // Make each renderer visible, and swap a frame on it, then make it invisible. | 1548 // Make each renderer visible, and swap a frame on it, then make it invisible. |
1526 for (size_t i = 0; i < renderer_count; ++i) { | 1549 for (size_t i = 0; i < renderer_count; ++i) { |
1527 views[i]->WasShown(); | 1550 views[i]->WasShown(); |
1528 views[i]->OnSwapCompositorFrame( | 1551 views[i]->OnSwapCompositorFrame( |
1529 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 1552 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
1530 EXPECT_TRUE(views[i]->frame_provider()); | 1553 EXPECT_TRUE(views[i]->HasFrameData()); |
1531 views[i]->WasHidden(); | 1554 views[i]->WasHidden(); |
1532 } | 1555 } |
1533 | 1556 |
1534 // There should be max_renderer_frames with a frame in it, and one without it. | 1557 // There should be max_renderer_frames with a frame in it, and one without it. |
1535 // Since the logic is LRU eviction, the first one should be without. | 1558 // Since the logic is LRU eviction, the first one should be without. |
1536 EXPECT_FALSE(views[0]->frame_provider()); | 1559 EXPECT_FALSE(views[0]->HasFrameData()); |
1537 for (size_t i = 1; i < renderer_count; ++i) | 1560 for (size_t i = 1; i < renderer_count; ++i) |
1538 EXPECT_TRUE(views[i]->frame_provider()); | 1561 EXPECT_TRUE(views[i]->HasFrameData()); |
1539 | 1562 |
1540 // LRU renderer is [0], make it visible, it shouldn't evict anything yet. | 1563 // LRU renderer is [0], make it visible, it shouldn't evict anything yet. |
1541 views[0]->WasShown(); | 1564 views[0]->WasShown(); |
1542 EXPECT_FALSE(views[0]->frame_provider()); | 1565 EXPECT_FALSE(views[0]->HasFrameData()); |
1543 EXPECT_TRUE(views[1]->frame_provider()); | 1566 EXPECT_TRUE(views[1]->HasFrameData()); |
1544 // Since [0] doesn't have a frame, it should be waiting for the renderer to | 1567 // Since [0] doesn't have a frame, it should be waiting for the renderer to |
1545 // give it one. | 1568 // give it one. |
1546 EXPECT_TRUE(views[0]->released_front_lock_active()); | 1569 EXPECT_TRUE(views[0]->released_front_lock_active()); |
1547 | 1570 |
1548 // Swap a frame on it, it should evict the next LRU [1]. | 1571 // Swap a frame on it, it should evict the next LRU [1]. |
1549 views[0]->OnSwapCompositorFrame( | 1572 views[0]->OnSwapCompositorFrame( |
1550 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 1573 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
1551 EXPECT_TRUE(views[0]->frame_provider()); | 1574 EXPECT_TRUE(views[0]->HasFrameData()); |
1552 EXPECT_FALSE(views[1]->frame_provider()); | 1575 EXPECT_FALSE(views[1]->HasFrameData()); |
1553 // Now that [0] got a frame, it shouldn't be waiting any more. | 1576 // Now that [0] got a frame, it shouldn't be waiting any more. |
1554 EXPECT_FALSE(views[0]->released_front_lock_active()); | 1577 EXPECT_FALSE(views[0]->released_front_lock_active()); |
1555 views[0]->WasHidden(); | 1578 views[0]->WasHidden(); |
1556 | 1579 |
1557 // LRU renderer is [1], still hidden. Swap a frame on it, it should evict | 1580 // LRU renderer is [1], still hidden. Swap a frame on it, it should evict |
1558 // the next LRU [2]. | 1581 // the next LRU [2]. |
1559 views[1]->OnSwapCompositorFrame( | 1582 views[1]->OnSwapCompositorFrame( |
1560 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 1583 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
1561 EXPECT_TRUE(views[0]->frame_provider()); | 1584 EXPECT_TRUE(views[0]->HasFrameData()); |
1562 EXPECT_TRUE(views[1]->frame_provider()); | 1585 EXPECT_TRUE(views[1]->HasFrameData()); |
1563 EXPECT_FALSE(views[2]->frame_provider()); | 1586 EXPECT_FALSE(views[2]->HasFrameData()); |
1564 for (size_t i = 3; i < renderer_count; ++i) | 1587 for (size_t i = 3; i < renderer_count; ++i) |
1565 EXPECT_TRUE(views[i]->frame_provider()); | 1588 EXPECT_TRUE(views[i]->HasFrameData()); |
1566 | 1589 |
1567 // Make all renderers but [0] visible and swap a frame on them, keep [0] | 1590 // Make all renderers but [0] visible and swap a frame on them, keep [0] |
1568 // hidden, it becomes the LRU. | 1591 // hidden, it becomes the LRU. |
1569 for (size_t i = 1; i < renderer_count; ++i) { | 1592 for (size_t i = 1; i < renderer_count; ++i) { |
1570 views[i]->WasShown(); | 1593 views[i]->WasShown(); |
1571 // The renderers who don't have a frame should be waiting. The ones that | 1594 // The renderers who don't have a frame should be waiting. The ones that |
1572 // have a frame should not. | 1595 // have a frame should not. |
1573 // In practice, [1] has a frame, but anything after has its frame evicted. | 1596 // In practice, [1] has a frame, but anything after has its frame evicted. |
1574 EXPECT_EQ(!views[i]->frame_provider(), | 1597 EXPECT_EQ(!views[i]->HasFrameData(), |
1575 views[i]->released_front_lock_active()); | 1598 views[i]->released_front_lock_active()); |
1576 views[i]->OnSwapCompositorFrame( | 1599 views[i]->OnSwapCompositorFrame( |
1577 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 1600 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
1578 // Now everyone has a frame. | 1601 // Now everyone has a frame. |
1579 EXPECT_FALSE(views[i]->released_front_lock_active()); | 1602 EXPECT_FALSE(views[i]->released_front_lock_active()); |
1580 EXPECT_TRUE(views[i]->frame_provider()); | 1603 EXPECT_TRUE(views[i]->HasFrameData()); |
1581 } | 1604 } |
1582 EXPECT_FALSE(views[0]->frame_provider()); | 1605 EXPECT_FALSE(views[0]->HasFrameData()); |
1583 | 1606 |
1584 // Swap a frame on [0], it should be evicted immediately. | 1607 // Swap a frame on [0], it should be evicted immediately. |
1585 views[0]->OnSwapCompositorFrame( | 1608 views[0]->OnSwapCompositorFrame( |
1586 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 1609 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
1587 EXPECT_FALSE(views[0]->frame_provider()); | 1610 EXPECT_FALSE(views[0]->HasFrameData()); |
1588 | 1611 |
1589 // Make [0] visible, and swap a frame on it. Nothing should be evicted | 1612 // Make [0] visible, and swap a frame on it. Nothing should be evicted |
1590 // although we're above the limit. | 1613 // although we're above the limit. |
1591 views[0]->WasShown(); | 1614 views[0]->WasShown(); |
1592 // We don't have a frame, wait. | 1615 // We don't have a frame, wait. |
1593 EXPECT_TRUE(views[0]->released_front_lock_active()); | 1616 EXPECT_TRUE(views[0]->released_front_lock_active()); |
1594 views[0]->OnSwapCompositorFrame( | 1617 views[0]->OnSwapCompositorFrame( |
1595 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 1618 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
1596 EXPECT_FALSE(views[0]->released_front_lock_active()); | 1619 EXPECT_FALSE(views[0]->released_front_lock_active()); |
1597 for (size_t i = 0; i < renderer_count; ++i) | 1620 for (size_t i = 0; i < renderer_count; ++i) |
1598 EXPECT_TRUE(views[i]->frame_provider()); | 1621 EXPECT_TRUE(views[i]->HasFrameData()); |
1599 | 1622 |
1600 // Make [0] hidden, it should evict its frame. | 1623 // Make [0] hidden, it should evict its frame. |
1601 views[0]->WasHidden(); | 1624 views[0]->WasHidden(); |
1602 EXPECT_FALSE(views[0]->frame_provider()); | 1625 EXPECT_FALSE(views[0]->HasFrameData()); |
1603 | 1626 |
1604 // Make [0] visible, don't give it a frame, it should be waiting. | 1627 // Make [0] visible, don't give it a frame, it should be waiting. |
1605 views[0]->WasShown(); | 1628 views[0]->WasShown(); |
1606 EXPECT_TRUE(views[0]->released_front_lock_active()); | 1629 EXPECT_TRUE(views[0]->released_front_lock_active()); |
1607 // Make [0] hidden, it should stop waiting. | 1630 // Make [0] hidden, it should stop waiting. |
1608 views[0]->WasHidden(); | 1631 views[0]->WasHidden(); |
1609 EXPECT_FALSE(views[0]->released_front_lock_active()); | 1632 EXPECT_FALSE(views[0]->released_front_lock_active()); |
1610 | 1633 |
1611 // Make [1] hidden, resize it. It should drop its frame. | 1634 // Make [1] hidden, resize it. It should drop its frame. |
1612 views[1]->WasHidden(); | 1635 views[1]->WasHidden(); |
1613 EXPECT_TRUE(views[1]->frame_provider()); | 1636 EXPECT_TRUE(views[1]->HasFrameData()); |
1614 gfx::Size size2(200, 200); | 1637 gfx::Size size2(200, 200); |
1615 views[1]->SetSize(size2); | 1638 views[1]->SetSize(size2); |
1616 EXPECT_FALSE(views[1]->frame_provider()); | 1639 EXPECT_FALSE(views[1]->HasFrameData()); |
1617 // Show it, it should block until we give it a frame. | 1640 // Show it, it should block until we give it a frame. |
1618 views[1]->WasShown(); | 1641 views[1]->WasShown(); |
1619 EXPECT_TRUE(views[1]->released_front_lock_active()); | 1642 EXPECT_TRUE(views[1]->released_front_lock_active()); |
1620 views[1]->OnSwapCompositorFrame( | 1643 views[1]->OnSwapCompositorFrame( |
1621 1, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | 1644 1, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
1622 EXPECT_FALSE(views[1]->released_front_lock_active()); | 1645 EXPECT_FALSE(views[1]->released_front_lock_active()); |
1623 | 1646 |
1624 for (size_t i = 0; i < renderer_count - 1; ++i) | 1647 for (size_t i = 0; i < renderer_count - 1; ++i) |
1625 views[i]->WasHidden(); | 1648 views[i]->WasHidden(); |
1626 | 1649 |
1627 // Allocate enough bitmaps so that two frames (proportionally) would be | 1650 // Allocate enough bitmaps so that two frames (proportionally) would be |
1628 // enough hit the handle limit. | 1651 // enough hit the handle limit. |
1629 int handles_per_frame = 5; | 1652 int handles_per_frame = 5; |
1630 RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2); | 1653 RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2); |
1631 | 1654 |
1632 for (size_t i = 0; i < (renderer_count - 1) * handles_per_frame; i++) { | 1655 for (size_t i = 0; i < (renderer_count - 1) * handles_per_frame; i++) { |
1633 HostSharedBitmapManager::current()->ChildAllocatedSharedBitmap( | 1656 HostSharedBitmapManager::current()->ChildAllocatedSharedBitmap( |
1634 1, | 1657 1, |
1635 base::SharedMemory::NULLHandle(), | 1658 base::SharedMemory::NULLHandle(), |
1636 base::GetCurrentProcessHandle(), | 1659 base::GetCurrentProcessHandle(), |
1637 cc::SharedBitmap::GenerateId()); | 1660 cc::SharedBitmap::GenerateId()); |
1638 } | 1661 } |
1639 | 1662 |
1640 // Hiding this last bitmap should evict all but two frames. | 1663 // Hiding this last bitmap should evict all but two frames. |
1641 views[renderer_count - 1]->WasHidden(); | 1664 views[renderer_count - 1]->WasHidden(); |
1642 for (size_t i = 0; i < renderer_count; ++i) { | 1665 for (size_t i = 0; i < renderer_count; ++i) { |
1643 if (i + 2 < renderer_count) | 1666 if (i + 2 < renderer_count) |
1644 EXPECT_FALSE(views[i]->frame_provider()); | 1667 EXPECT_FALSE(views[i]->HasFrameData()); |
1645 else | 1668 else |
1646 EXPECT_TRUE(views[i]->frame_provider()); | 1669 EXPECT_TRUE(views[i]->HasFrameData()); |
1647 } | 1670 } |
1648 HostSharedBitmapManager::current()->ProcessRemoved( | 1671 HostSharedBitmapManager::current()->ProcessRemoved( |
1649 base::GetCurrentProcessHandle()); | 1672 base::GetCurrentProcessHandle()); |
1650 RendererFrameManager::GetInstance()->set_max_handles( | 1673 RendererFrameManager::GetInstance()->set_max_handles( |
1651 base::SharedMemory::GetHandleLimit()); | 1674 base::SharedMemory::GetHandleLimit()); |
1652 | 1675 |
1653 for (size_t i = 0; i < renderer_count; ++i) { | 1676 for (size_t i = 0; i < renderer_count; ++i) { |
1654 views[i]->Destroy(); | 1677 views[i]->Destroy(); |
1655 delete hosts[i]; | 1678 delete hosts[i]; |
1656 } | 1679 } |
(...skipping 26 matching lines...) Expand all Loading... |
1683 gfx::Rect()); | 1706 gfx::Rect()); |
1684 views[i]->SetSize(view_rect.size()); | 1707 views[i]->SetSize(view_rect.size()); |
1685 } | 1708 } |
1686 | 1709 |
1687 // Make each renderer visible and swap a frame on it. No eviction should | 1710 // Make each renderer visible and swap a frame on it. No eviction should |
1688 // occur because all frames are visible. | 1711 // occur because all frames are visible. |
1689 for (size_t i = 0; i < renderer_count; ++i) { | 1712 for (size_t i = 0; i < renderer_count; ++i) { |
1690 views[i]->WasShown(); | 1713 views[i]->WasShown(); |
1691 views[i]->OnSwapCompositorFrame( | 1714 views[i]->OnSwapCompositorFrame( |
1692 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 1715 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
1693 EXPECT_TRUE(views[i]->frame_provider()); | 1716 EXPECT_TRUE(views[i]->HasFrameData()); |
1694 } | 1717 } |
1695 | 1718 |
1696 // If we hide [0], then [0] should be evicted. | 1719 // If we hide [0], then [0] should be evicted. |
1697 views[0]->WasHidden(); | 1720 views[0]->WasHidden(); |
1698 EXPECT_FALSE(views[0]->frame_provider()); | 1721 EXPECT_FALSE(views[0]->HasFrameData()); |
1699 | 1722 |
1700 // If we lock [0] before hiding it, then [0] should not be evicted. | 1723 // If we lock [0] before hiding it, then [0] should not be evicted. |
1701 views[0]->WasShown(); | 1724 views[0]->WasShown(); |
1702 views[0]->OnSwapCompositorFrame( | 1725 views[0]->OnSwapCompositorFrame( |
1703 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 1726 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
1704 EXPECT_TRUE(views[0]->frame_provider()); | 1727 EXPECT_TRUE(views[0]->HasFrameData()); |
1705 views[0]->GetDelegatedFrameHost()->LockResources(); | 1728 views[0]->GetDelegatedFrameHost()->LockResources(); |
1706 views[0]->WasHidden(); | 1729 views[0]->WasHidden(); |
1707 EXPECT_TRUE(views[0]->frame_provider()); | 1730 EXPECT_TRUE(views[0]->HasFrameData()); |
1708 | 1731 |
1709 // If we unlock [0] now, then [0] should be evicted. | 1732 // If we unlock [0] now, then [0] should be evicted. |
1710 views[0]->GetDelegatedFrameHost()->UnlockResources(); | 1733 views[0]->GetDelegatedFrameHost()->UnlockResources(); |
1711 EXPECT_FALSE(views[0]->frame_provider()); | 1734 EXPECT_FALSE(views[0]->HasFrameData()); |
1712 | 1735 |
1713 for (size_t i = 0; i < renderer_count; ++i) { | 1736 for (size_t i = 0; i < renderer_count; ++i) { |
1714 views[i]->Destroy(); | 1737 views[i]->Destroy(); |
1715 delete hosts[i]; | 1738 delete hosts[i]; |
1716 } | 1739 } |
1717 } | 1740 } |
1718 | 1741 |
1719 TEST_F(RenderWidgetHostViewAuraTest, SoftwareDPIChange) { | 1742 TEST_F(RenderWidgetHostViewAuraTest, SoftwareDPIChange) { |
1720 gfx::Rect view_rect(100, 100); | 1743 gfx::Rect view_rect(100, 100); |
1721 gfx::Size frame_size(100, 100); | 1744 gfx::Size frame_size(100, 100); |
1722 | 1745 |
1723 view_->InitAsChild(NULL); | 1746 view_->InitAsChild(NULL); |
1724 aura::client::ParentWindowWithContext( | 1747 aura::client::ParentWindowWithContext( |
1725 view_->GetNativeView(), | 1748 view_->GetNativeView(), |
1726 parent_view_->GetNativeView()->GetRootWindow(), | 1749 parent_view_->GetNativeView()->GetRootWindow(), |
1727 gfx::Rect()); | 1750 gfx::Rect()); |
1728 view_->SetSize(view_rect.size()); | 1751 view_->SetSize(view_rect.size()); |
1729 view_->WasShown(); | 1752 view_->WasShown(); |
1730 | 1753 |
1731 // With a 1x DPI UI and 1x DPI Renderer. | 1754 // With a 1x DPI UI and 1x DPI Renderer. |
1732 view_->OnSwapCompositorFrame( | 1755 view_->OnSwapCompositorFrame( |
1733 1, MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 1756 1, MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
1734 | 1757 |
1735 // Save the frame provider. | 1758 // Save the frame provider. |
1736 scoped_refptr<cc::DelegatedFrameProvider> frame_provider = | 1759 scoped_refptr<cc::DelegatedFrameProvider> frame_provider = |
1737 view_->frame_provider(); | 1760 view_->frame_provider(); |
| 1761 cc::SurfaceId surface_id = view_->surface_id(); |
1738 | 1762 |
1739 // This frame will have the same number of physical pixels, but has a new | 1763 // This frame will have the same number of physical pixels, but has a new |
1740 // scale on it. | 1764 // scale on it. |
1741 view_->OnSwapCompositorFrame( | 1765 view_->OnSwapCompositorFrame( |
1742 1, MakeDelegatedFrame(2.f, frame_size, gfx::Rect(frame_size))); | 1766 1, MakeDelegatedFrame(2.f, frame_size, gfx::Rect(frame_size))); |
1743 | 1767 |
1744 // When we get a new frame with the same frame size in physical pixels, but a | 1768 // When we get a new frame with the same frame size in physical pixels, but a |
1745 // different scale, we should generate a new frame provider, as the final | 1769 // different scale, we should generate a new frame provider, as the final |
1746 // result will need to be scaled differently to the screen. | 1770 // result will need to be scaled differently to the screen. |
1747 EXPECT_NE(frame_provider.get(), view_->frame_provider()); | 1771 if (frame_provider.get()) |
| 1772 EXPECT_NE(frame_provider.get(), view_->frame_provider()); |
| 1773 else |
| 1774 EXPECT_NE(surface_id, view_->surface_id()); |
1748 } | 1775 } |
1749 | 1776 |
1750 class RenderWidgetHostViewAuraCopyRequestTest | 1777 class RenderWidgetHostViewAuraCopyRequestTest |
1751 : public RenderWidgetHostViewAuraShutdownTest { | 1778 : public RenderWidgetHostViewAuraShutdownTest { |
1752 public: | 1779 public: |
1753 RenderWidgetHostViewAuraCopyRequestTest() | 1780 RenderWidgetHostViewAuraCopyRequestTest() |
1754 : callback_count_(0), result_(false) {} | 1781 : callback_count_(0), result_(false) {} |
1755 | 1782 |
1756 void CallbackMethod(const base::Closure& quit_closure, bool result) { | 1783 void CallbackMethod(const base::Closure& quit_closure, bool result) { |
1757 result_ = result; | 1784 result_ = result; |
(...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2778 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->completed_mode()); | 2805 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->completed_mode()); |
2779 | 2806 |
2780 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, | 2807 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, |
2781 blink::WebGestureDeviceTouchscreen); | 2808 blink::WebGestureDeviceTouchscreen); |
2782 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); | 2809 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); |
2783 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->completed_mode()); | 2810 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->completed_mode()); |
2784 EXPECT_EQ(3U, sink_->message_count()); | 2811 EXPECT_EQ(3U, sink_->message_count()); |
2785 } | 2812 } |
2786 | 2813 |
2787 } // namespace content | 2814 } // namespace content |
OLD | NEW |