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

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

Issue 2789773003: Send FrameSwapMessageQueue's messages with a separate IPC (Closed)
Patch Set: c Created 3 years, 9 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_unittest.cc
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index 1b1a7fd33b776835c643298af56570dbd4c2d96e..7a62396bc4a9cde8254d63483babf1e3a982b641 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -182,6 +182,7 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl {
using RenderWidgetHostImpl::is_hidden_;
using RenderWidgetHostImpl::resize_ack_pending_;
using RenderWidgetHostImpl::input_router_;
+ using RenderWidgetHostImpl::queued_messages_;
void OnTouchEventAck(const TouchEventWithLatencyInfo& event,
InputEventAckState ack_result) override {
@@ -215,6 +216,10 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl {
return static_cast<MockInputRouter*>(input_router_.get());
}
+ uint32_t processed_frame_messages_count() {
+ return processed_frame_messages_count_;
+ }
+
protected:
void NotifyNewContentRenderingTimeoutForTesting() override {
new_content_rendering_timeout_fired_ = true;
@@ -224,6 +229,10 @@ class MockRenderWidgetHost : public RenderWidgetHostImpl {
WebInputEvent::Type acked_touch_event_type_;
private:
+ void ProcessSwapMessages(std::vector<IPC::Message> messages) override {
+ processed_frame_messages_count_++;
+ }
+ uint32_t processed_frame_messages_count_ = 0;
DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost);
};
@@ -1974,4 +1983,155 @@ TEST_F(RenderWidgetHostTest, CompositorFrameSinkIdChanges) {
sink_->ClearMessages();
}
+TEST_F(RenderWidgetHostTest, FrameToken_MessageThenFrame) {
+ const uint32_t frame_token = 99;
+ const gfx::Size frame_size(50, 50);
+ const cc::LocalSurfaceId local_surface_id(1,
+ base::UnguessableToken::Create());
+ std::vector<IPC::Message> messages;
+ messages.push_back(ViewHostMsg_DidFirstVisuallyNonEmptyPaint(5));
+
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ host_->OnMessageReceived(
+ ViewHostMsg_FrameSwapMessages(0, frame_token, messages));
+ EXPECT_EQ(1u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+ frame.metadata.frame_token = frame_token;
+ host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(1u, host_->processed_frame_messages_count());
+}
+
+TEST_F(RenderWidgetHostTest, FrameToken_FrameThenMessage) {
+ const uint32_t frame_token = 99;
+ const gfx::Size frame_size(50, 50);
+ const cc::LocalSurfaceId local_surface_id(1,
+ base::UnguessableToken::Create());
+ std::vector<IPC::Message> messages;
+ messages.push_back(ViewHostMsg_DidFirstVisuallyNonEmptyPaint(5));
+
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+ frame.metadata.frame_token = frame_token;
+ host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ host_->OnMessageReceived(
+ ViewHostMsg_FrameSwapMessages(0, frame_token, messages));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(1u, host_->processed_frame_messages_count());
+}
+
+TEST_F(RenderWidgetHostTest, FrameToken_MultipleMessagesThenTokens) {
+ const uint32_t frame_token1 = 99;
+ const uint32_t frame_token2 = 100;
+ const gfx::Size frame_size(50, 50);
+ const cc::LocalSurfaceId local_surface_id(1,
+ base::UnguessableToken::Create());
+ std::vector<IPC::Message> messages1;
+ std::vector<IPC::Message> messages2;
+ messages1.push_back(ViewHostMsg_DidFirstVisuallyNonEmptyPaint(5));
+ messages2.push_back(ViewHostMsg_DidFirstVisuallyNonEmptyPaint(6));
+
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ host_->OnMessageReceived(
+ ViewHostMsg_FrameSwapMessages(0, frame_token1, messages1));
+ EXPECT_EQ(1u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ host_->OnMessageReceived(
+ ViewHostMsg_FrameSwapMessages(0, frame_token2, messages2));
+ EXPECT_EQ(2u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+ frame.metadata.frame_token = frame_token1;
+ host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
+ EXPECT_EQ(1u, host_->queued_messages_.size());
+ EXPECT_EQ(1u, host_->processed_frame_messages_count());
+
+ frame = MakeCompositorFrame(1.f, frame_size);
+ frame.metadata.frame_token = frame_token2;
+ host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(2u, host_->processed_frame_messages_count());
+}
+
+TEST_F(RenderWidgetHostTest, FrameToken_MultipleTokensThenMessages) {
+ const uint32_t frame_token1 = 99;
+ const uint32_t frame_token2 = 100;
+ const gfx::Size frame_size(50, 50);
+ const cc::LocalSurfaceId local_surface_id(1,
+ base::UnguessableToken::Create());
+ std::vector<IPC::Message> messages1;
+ std::vector<IPC::Message> messages2;
+ messages1.push_back(ViewHostMsg_DidFirstVisuallyNonEmptyPaint(5));
+ messages2.push_back(ViewHostMsg_DidFirstVisuallyNonEmptyPaint(6));
+
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+ frame.metadata.frame_token = frame_token1;
+ host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ frame = MakeCompositorFrame(1.f, frame_size);
+ frame.metadata.frame_token = frame_token2;
+ host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ host_->OnMessageReceived(
+ ViewHostMsg_FrameSwapMessages(0, frame_token1, messages1));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(1u, host_->processed_frame_messages_count());
+
+ host_->OnMessageReceived(
+ ViewHostMsg_FrameSwapMessages(0, frame_token2, messages2));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(2u, host_->processed_frame_messages_count());
+}
+
+TEST_F(RenderWidgetHostTest, FrameToken_DroppedFrame) {
+ const uint32_t frame_token1 = 99;
+ const uint32_t frame_token2 = 100;
+ const gfx::Size frame_size(50, 50);
+ const cc::LocalSurfaceId local_surface_id(1,
+ base::UnguessableToken::Create());
+ std::vector<IPC::Message> messages1;
+ std::vector<IPC::Message> messages2;
+ messages1.push_back(ViewHostMsg_DidFirstVisuallyNonEmptyPaint(5));
+ messages2.push_back(ViewHostMsg_DidFirstVisuallyNonEmptyPaint(6));
+
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ host_->OnMessageReceived(
+ ViewHostMsg_FrameSwapMessages(0, frame_token1, messages1));
+ EXPECT_EQ(1u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ host_->OnMessageReceived(
+ ViewHostMsg_FrameSwapMessages(0, frame_token2, messages2));
+ EXPECT_EQ(2u, host_->queued_messages_.size());
+ EXPECT_EQ(0u, host_->processed_frame_messages_count());
+
+ cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+ frame.metadata.frame_token = frame_token2;
+ host_->SubmitCompositorFrame(local_surface_id, std::move(frame));
+ EXPECT_EQ(0u, host_->queued_messages_.size());
+ EXPECT_EQ(1u, host_->processed_frame_messages_count());
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698