| Index: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
|
| index 63bdc873d98c1bb3303731e2b10f8af6cfd789da..a7359517455cc4d348c459212248c321a3781960 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
|
| @@ -13,6 +13,8 @@
|
| #include "cc/output/compositor_frame.h"
|
| #include "cc/output/compositor_frame_metadata.h"
|
| #include "cc/output/copy_output_request.h"
|
| +#include "cc/surfaces/surface.h"
|
| +#include "cc/surfaces/surface_manager.h"
|
| #include "content/browser/browser_thread_impl.h"
|
| #include "content/browser/compositor/resize_lock.h"
|
| #include "content/browser/compositor/test/no_transport_image_transport_factory.h"
|
| @@ -258,6 +260,14 @@ class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura {
|
| return GetDelegatedFrameHost()->FrameProviderForTesting();
|
| }
|
|
|
| + cc::SurfaceId surface_id() const {
|
| + return GetDelegatedFrameHost()->SurfaceIdForTesting();
|
| + }
|
| +
|
| + bool HasFrameData() const {
|
| + return frame_provider() || !surface_id().is_null();
|
| + }
|
| +
|
| bool released_front_lock_active() const {
|
| return GetDelegatedFrameHost()->ReleasedFrontLockActiveForTesting();
|
| }
|
| @@ -1347,10 +1357,23 @@ TEST_F(RenderWidgetHostViewAuraTest, Resize) {
|
| ui::DrawWaiterForTest::WaitForCommit(
|
| root_window->GetHost()->compositor());
|
| EXPECT_EQ(size3.ToString(), view_->GetRequestedRendererSize().ToString());
|
| + cc::SurfaceId surface_id = view_->surface_id();
|
| + int swap_index = 0;
|
| + int resize_index = 1;
|
| + if (!surface_id.is_null()) {
|
| + // Frame ack is sent only due to a draw callback with surfaces.
|
| + ImageTransportFactory::GetInstance()
|
| + ->GetSurfaceManager()
|
| + ->GetSurfaceForId(surface_id)
|
| + ->RunDrawCallbacks();
|
| + swap_index = 1;
|
| + resize_index = 0;
|
| + }
|
| EXPECT_EQ(2u, sink_->message_count());
|
| - EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID, sink_->GetMessageAt(0)->type());
|
| + EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID,
|
| + sink_->GetMessageAt(swap_index)->type());
|
| {
|
| - const IPC::Message* msg = sink_->GetMessageAt(1);
|
| + const IPC::Message* msg = sink_->GetMessageAt(resize_index);
|
| EXPECT_EQ(ViewMsg_Resize::ID, msg->type());
|
| ViewMsg_Resize::Param params;
|
| ViewMsg_Resize::Read(msg, ¶ms);
|
| @@ -1527,20 +1550,20 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
|
| views[i]->WasShown();
|
| views[i]->OnSwapCompositorFrame(
|
| 1, MakeDelegatedFrame(1.f, frame_size, view_rect));
|
| - EXPECT_TRUE(views[i]->frame_provider());
|
| + EXPECT_TRUE(views[i]->HasFrameData());
|
| views[i]->WasHidden();
|
| }
|
|
|
| // There should be max_renderer_frames with a frame in it, and one without it.
|
| // Since the logic is LRU eviction, the first one should be without.
|
| - EXPECT_FALSE(views[0]->frame_provider());
|
| + EXPECT_FALSE(views[0]->HasFrameData());
|
| for (size_t i = 1; i < renderer_count; ++i)
|
| - EXPECT_TRUE(views[i]->frame_provider());
|
| + EXPECT_TRUE(views[i]->HasFrameData());
|
|
|
| // LRU renderer is [0], make it visible, it shouldn't evict anything yet.
|
| views[0]->WasShown();
|
| - EXPECT_FALSE(views[0]->frame_provider());
|
| - EXPECT_TRUE(views[1]->frame_provider());
|
| + EXPECT_FALSE(views[0]->HasFrameData());
|
| + EXPECT_TRUE(views[1]->HasFrameData());
|
| // Since [0] doesn't have a frame, it should be waiting for the renderer to
|
| // give it one.
|
| EXPECT_TRUE(views[0]->released_front_lock_active());
|
| @@ -1548,8 +1571,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
|
| // Swap a frame on it, it should evict the next LRU [1].
|
| views[0]->OnSwapCompositorFrame(
|
| 1, MakeDelegatedFrame(1.f, frame_size, view_rect));
|
| - EXPECT_TRUE(views[0]->frame_provider());
|
| - EXPECT_FALSE(views[1]->frame_provider());
|
| + EXPECT_TRUE(views[0]->HasFrameData());
|
| + EXPECT_FALSE(views[1]->HasFrameData());
|
| // Now that [0] got a frame, it shouldn't be waiting any more.
|
| EXPECT_FALSE(views[0]->released_front_lock_active());
|
| views[0]->WasHidden();
|
| @@ -1558,11 +1581,11 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
|
| // the next LRU [2].
|
| views[1]->OnSwapCompositorFrame(
|
| 1, MakeDelegatedFrame(1.f, frame_size, view_rect));
|
| - EXPECT_TRUE(views[0]->frame_provider());
|
| - EXPECT_TRUE(views[1]->frame_provider());
|
| - EXPECT_FALSE(views[2]->frame_provider());
|
| + EXPECT_TRUE(views[0]->HasFrameData());
|
| + EXPECT_TRUE(views[1]->HasFrameData());
|
| + EXPECT_FALSE(views[2]->HasFrameData());
|
| for (size_t i = 3; i < renderer_count; ++i)
|
| - EXPECT_TRUE(views[i]->frame_provider());
|
| + EXPECT_TRUE(views[i]->HasFrameData());
|
|
|
| // Make all renderers but [0] visible and swap a frame on them, keep [0]
|
| // hidden, it becomes the LRU.
|
| @@ -1571,20 +1594,20 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
|
| // The renderers who don't have a frame should be waiting. The ones that
|
| // have a frame should not.
|
| // In practice, [1] has a frame, but anything after has its frame evicted.
|
| - EXPECT_EQ(!views[i]->frame_provider(),
|
| + EXPECT_EQ(!views[i]->HasFrameData(),
|
| views[i]->released_front_lock_active());
|
| views[i]->OnSwapCompositorFrame(
|
| 1, MakeDelegatedFrame(1.f, frame_size, view_rect));
|
| // Now everyone has a frame.
|
| EXPECT_FALSE(views[i]->released_front_lock_active());
|
| - EXPECT_TRUE(views[i]->frame_provider());
|
| + EXPECT_TRUE(views[i]->HasFrameData());
|
| }
|
| - EXPECT_FALSE(views[0]->frame_provider());
|
| + EXPECT_FALSE(views[0]->HasFrameData());
|
|
|
| // Swap a frame on [0], it should be evicted immediately.
|
| views[0]->OnSwapCompositorFrame(
|
| 1, MakeDelegatedFrame(1.f, frame_size, view_rect));
|
| - EXPECT_FALSE(views[0]->frame_provider());
|
| + EXPECT_FALSE(views[0]->HasFrameData());
|
|
|
| // Make [0] visible, and swap a frame on it. Nothing should be evicted
|
| // although we're above the limit.
|
| @@ -1595,11 +1618,11 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
|
| 1, MakeDelegatedFrame(1.f, frame_size, view_rect));
|
| EXPECT_FALSE(views[0]->released_front_lock_active());
|
| for (size_t i = 0; i < renderer_count; ++i)
|
| - EXPECT_TRUE(views[i]->frame_provider());
|
| + EXPECT_TRUE(views[i]->HasFrameData());
|
|
|
| // Make [0] hidden, it should evict its frame.
|
| views[0]->WasHidden();
|
| - EXPECT_FALSE(views[0]->frame_provider());
|
| + EXPECT_FALSE(views[0]->HasFrameData());
|
|
|
| // Make [0] visible, don't give it a frame, it should be waiting.
|
| views[0]->WasShown();
|
| @@ -1610,10 +1633,10 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
|
|
|
| // Make [1] hidden, resize it. It should drop its frame.
|
| views[1]->WasHidden();
|
| - EXPECT_TRUE(views[1]->frame_provider());
|
| + EXPECT_TRUE(views[1]->HasFrameData());
|
| gfx::Size size2(200, 200);
|
| views[1]->SetSize(size2);
|
| - EXPECT_FALSE(views[1]->frame_provider());
|
| + EXPECT_FALSE(views[1]->HasFrameData());
|
| // Show it, it should block until we give it a frame.
|
| views[1]->WasShown();
|
| EXPECT_TRUE(views[1]->released_front_lock_active());
|
| @@ -1641,9 +1664,9 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
|
| views[renderer_count - 1]->WasHidden();
|
| for (size_t i = 0; i < renderer_count; ++i) {
|
| if (i + 2 < renderer_count)
|
| - EXPECT_FALSE(views[i]->frame_provider());
|
| + EXPECT_FALSE(views[i]->HasFrameData());
|
| else
|
| - EXPECT_TRUE(views[i]->frame_provider());
|
| + EXPECT_TRUE(views[i]->HasFrameData());
|
| }
|
| HostSharedBitmapManager::current()->ProcessRemoved(
|
| base::GetCurrentProcessHandle());
|
| @@ -1690,25 +1713,25 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFramesWithLocking) {
|
| views[i]->WasShown();
|
| views[i]->OnSwapCompositorFrame(
|
| 1, MakeDelegatedFrame(1.f, frame_size, view_rect));
|
| - EXPECT_TRUE(views[i]->frame_provider());
|
| + EXPECT_TRUE(views[i]->HasFrameData());
|
| }
|
|
|
| // If we hide [0], then [0] should be evicted.
|
| views[0]->WasHidden();
|
| - EXPECT_FALSE(views[0]->frame_provider());
|
| + EXPECT_FALSE(views[0]->HasFrameData());
|
|
|
| // If we lock [0] before hiding it, then [0] should not be evicted.
|
| views[0]->WasShown();
|
| views[0]->OnSwapCompositorFrame(
|
| 1, MakeDelegatedFrame(1.f, frame_size, view_rect));
|
| - EXPECT_TRUE(views[0]->frame_provider());
|
| + EXPECT_TRUE(views[0]->HasFrameData());
|
| views[0]->GetDelegatedFrameHost()->LockResources();
|
| views[0]->WasHidden();
|
| - EXPECT_TRUE(views[0]->frame_provider());
|
| + EXPECT_TRUE(views[0]->HasFrameData());
|
|
|
| // If we unlock [0] now, then [0] should be evicted.
|
| views[0]->GetDelegatedFrameHost()->UnlockResources();
|
| - EXPECT_FALSE(views[0]->frame_provider());
|
| + EXPECT_FALSE(views[0]->HasFrameData());
|
|
|
| for (size_t i = 0; i < renderer_count; ++i) {
|
| views[i]->Destroy();
|
| @@ -1735,6 +1758,7 @@ TEST_F(RenderWidgetHostViewAuraTest, SoftwareDPIChange) {
|
| // Save the frame provider.
|
| scoped_refptr<cc::DelegatedFrameProvider> frame_provider =
|
| view_->frame_provider();
|
| + cc::SurfaceId surface_id = view_->surface_id();
|
|
|
| // This frame will have the same number of physical pixels, but has a new
|
| // scale on it.
|
| @@ -1744,7 +1768,10 @@ TEST_F(RenderWidgetHostViewAuraTest, SoftwareDPIChange) {
|
| // When we get a new frame with the same frame size in physical pixels, but a
|
| // different scale, we should generate a new frame provider, as the final
|
| // result will need to be scaled differently to the screen.
|
| - EXPECT_NE(frame_provider.get(), view_->frame_provider());
|
| + if (frame_provider.get())
|
| + EXPECT_NE(frame_provider.get(), view_->frame_provider());
|
| + else
|
| + EXPECT_NE(surface_id, view_->surface_id());
|
| }
|
|
|
| class RenderWidgetHostViewAuraCopyRequestTest
|
|
|