Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc

Issue 299443003: Restore resize throttling on Chrome OS (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, test fix Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 fc2ee89021e815184a7be8689ba53ada02a8b90d..cbf3b1061ea3f4ff157c3dd6e1b71f2c069e13b6 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
@@ -954,6 +954,92 @@ TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) {
view_->window_->RemoveObserver(&observer);
}
+TEST_F(RenderWidgetHostViewAuraTest, Resize) {
+ gfx::Size size1(100, 100);
+ gfx::Size size2(200, 200);
+ gfx::Size size3(300, 300);
+
+ aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow();
+ view_->InitAsChild(NULL);
+ aura::client::ParentWindowWithContext(
+ view_->GetNativeView(), root_window, gfx::Rect(size1));
+ view_->WasShown();
+ view_->SetSize(size1);
+ view_->OnSwapCompositorFrame(
+ 0, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1)));
+ ui::DrawWaiterForTest::WaitForCommit(
+ root_window->GetHost()->compositor());
+ ViewHostMsg_UpdateRect_Params update_params;
+ update_params.view_size = size1;
+ update_params.scale_factor = 1.f;
+ update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK;
+ widget_host_->OnMessageReceived(
+ ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
+ sink_->ClearMessages();
+ // Resize logic is idle (no pending resize, no pending commit).
+ EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString());
+
+ // Resize renderer, should produce a Resize message
+ view_->SetSize(size2);
+ EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
+ EXPECT_EQ(1u, sink_->message_count());
+ {
+ const IPC::Message* msg = sink_->GetMessageAt(0);
+ EXPECT_EQ(ViewMsg_Resize::ID, msg->type());
+ ViewMsg_Resize::Param params;
+ ViewMsg_Resize::Read(msg, &params);
+ EXPECT_EQ(size2.ToString(), params.a.new_size.ToString());
+ }
+ // Send resize ack to observe new Resize messages.
+ update_params.view_size = size2;
+ widget_host_->OnMessageReceived(
+ ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
+ sink_->ClearMessages();
+
+ // Resize renderer again, before receiving a frame. Should not produce a
+ // Resize message.
+ view_->SetSize(size3);
+ EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
+ EXPECT_EQ(0u, sink_->message_count());
+
+ // Receive a frame of the new size, should be skipped and not produce a Resize
+ // message.
+ view_->OnSwapCompositorFrame(
+ 0, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3)));
+ // Expect the frame ack;
+ EXPECT_EQ(1u, sink_->message_count());
+ EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID, sink_->GetMessageAt(0)->type());
+ sink_->ClearMessages();
+ EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
+
+ // Receive a frame of the correct size, should not be skipped and, and should
+ // produce a Resize message after the commit.
+ view_->OnSwapCompositorFrame(
+ 0, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
+ // No frame ack yet.
+ EXPECT_EQ(0u, sink_->message_count());
+ EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
+
+ // Wait for commit, then we should unlock the compositor and send a Resize
+ // message (and a frame ack)
+ ui::DrawWaiterForTest::WaitForCommit(
+ root_window->GetHost()->compositor());
+ EXPECT_EQ(size3.ToString(), view_->GetRequestedRendererSize().ToString());
+ EXPECT_EQ(2u, sink_->message_count());
+ EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID, sink_->GetMessageAt(0)->type());
+ {
+ const IPC::Message* msg = sink_->GetMessageAt(1);
+ EXPECT_EQ(ViewMsg_Resize::ID, msg->type());
+ ViewMsg_Resize::Param params;
+ ViewMsg_Resize::Read(msg, &params);
+ EXPECT_EQ(size3.ToString(), params.a.new_size.ToString());
+ }
+ update_params.view_size = size3;
+ widget_host_->OnMessageReceived(
+ ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
+ sink_->ClearMessages();
+}
+
// Skipped frames should not drop their damage.
TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) {
gfx::Rect view_rect(100, 100);

Powered by Google App Engine
This is Rietveld 408576698