Index: content/renderer/gpu/queue_message_swap_promise_unittest.cc |
diff --git a/content/renderer/gpu/queue_message_swap_promise_unittest.cc b/content/renderer/gpu/queue_message_swap_promise_unittest.cc |
index 18d3b2cc1c76cb9917f43f356d67924e58e8aba1..a02cc382bb063ee563707a83e1d666e4e9229d11 100644 |
--- a/content/renderer/gpu/queue_message_swap_promise_unittest.cc |
+++ b/content/renderer/gpu/queue_message_swap_promise_unittest.cc |
@@ -13,6 +13,7 @@ |
#include "base/memory/ptr_util.h" |
#include "base/test/scoped_task_environment.h" |
#include "cc/output/swap_promise.h" |
+#include "content/common/view_messages.h" |
#include "content/renderer/gpu/frame_swap_message_queue.h" |
#include "content/renderer/gpu/render_widget_compositor.h" |
#include "content/renderer/render_widget.h" |
@@ -39,16 +40,34 @@ class TestSyncMessageFilter : public IPC::SyncMessageFilter { |
TestSyncMessageFilter() : IPC::SyncMessageFilter(nullptr) {} |
bool Send(IPC::Message* message) override { |
- messages_.push_back(base::WrapUnique(message)); |
+ if (message->type() == ViewHostMsg_FrameSwapMessages::ID) { |
+ ViewHostMsg_FrameSwapMessages::Param param; |
+ ViewHostMsg_FrameSwapMessages::Read(message, ¶m); |
+ std::vector<IPC::Message> messages = std::get<1>(param); |
+ last_swap_messages_.clear(); |
+ for (const IPC::Message& message : messages) { |
+ last_swap_messages_.push_back(base::MakeUnique<IPC::Message>(message)); |
+ } |
+ delete message; |
+ } else { |
+ direct_send_messages_.push_back(base::WrapUnique(message)); |
+ } |
return true; |
} |
- std::vector<std::unique_ptr<IPC::Message>>& messages() { return messages_; } |
+ std::vector<std::unique_ptr<IPC::Message>>& last_swap_messages() { |
+ return last_swap_messages_; |
+ } |
+ |
+ const std::vector<std::unique_ptr<IPC::Message>>& direct_send_messages() { |
+ return direct_send_messages_; |
+ } |
private: |
~TestSyncMessageFilter() override {} |
- std::vector<std::unique_ptr<IPC::Message>> messages_; |
+ std::vector<std::unique_ptr<IPC::Message>> direct_send_messages_; |
+ std::vector<std::unique_ptr<IPC::Message>> last_swap_messages_; |
DISALLOW_COPY_AND_ASSIGN(TestSyncMessageFilter); |
}; |
@@ -61,7 +80,7 @@ struct QueueMessageData { |
class QueueMessageSwapPromiseTest : public testing::Test { |
public: |
QueueMessageSwapPromiseTest() |
- : frame_swap_message_queue_(new FrameSwapMessageQueue()), |
+ : frame_swap_message_queue_(new FrameSwapMessageQueue(0)), |
sync_message_filter_(new TestSyncMessageFilter()) {} |
~QueueMessageSwapPromiseTest() override {} |
@@ -76,7 +95,11 @@ class QueueMessageSwapPromiseTest : public testing::Test { |
} |
const std::vector<std::unique_ptr<IPC::Message>>& DirectSendMessages() { |
- return sync_message_filter_->messages(); |
+ return sync_message_filter_->direct_send_messages(); |
+ } |
+ |
+ std::vector<std::unique_ptr<IPC::Message>>& LastSwapMessages() { |
+ return sync_message_filter_->last_swap_messages(); |
} |
std::vector<std::unique_ptr<IPC::Message>>& NextSwapMessages() { |
@@ -100,6 +123,10 @@ class QueueMessageSwapPromiseTest : public testing::Test { |
return false; |
} |
+ bool LastSwapHasMessage(const IPC::Message& message) { |
+ return ContainsMessage(LastSwapMessages(), message); |
+ } |
+ |
bool NextSwapHasMessage(const IPC::Message& message) { |
return ContainsMessage(NextSwapMessages(), message); |
} |
@@ -118,7 +145,7 @@ class QueueMessageSwapPromiseTest : public testing::Test { |
for (const auto& promise : promises_) { |
if (promise.get()) { |
promise->DidActivate(); |
- promise->WillSwap(NULL); |
+ promise->WillSwap(&dummy_metadata_); |
promise->DidSwap(); |
} |
} |
@@ -133,6 +160,7 @@ class QueueMessageSwapPromiseTest : public testing::Test { |
scoped_refptr<TestSyncMessageFilter> sync_message_filter_; |
std::vector<IPC::Message> messages_; |
std::vector<std::unique_ptr<cc::SwapPromise>> promises_; |
+ cc::CompositorFrameMetadata dummy_metadata_; |
private: |
std::vector<std::unique_ptr<IPC::Message>> next_swap_messages_; |
@@ -149,13 +177,12 @@ TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicySchedulesMessageForNextSwap) { |
ASSERT_TRUE(promises_[0].get()); |
promises_[0]->DidActivate(); |
- promises_[0]->WillSwap(NULL); |
+ promises_[0]->WillSwap(&dummy_metadata_); |
promises_[0]->DidSwap(); |
EXPECT_TRUE(DirectSendMessages().empty()); |
- EXPECT_FALSE(frame_swap_message_queue_->Empty()); |
- // frame_swap_message_queue_->WillSwap(1); |
- EXPECT_TRUE(NextSwapHasMessage(messages_[0])); |
+ EXPECT_TRUE(frame_swap_message_queue_->Empty()); |
+ EXPECT_TRUE(LastSwapHasMessage(messages_[0])); |
} |
TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicyNeedsAtMostOnePromise) { |
@@ -181,7 +208,7 @@ TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicySendsMessageOnNoUpdate) { |
promises_[0]->DidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE); |
EXPECT_TRUE(ContainsMessage(DirectSendMessages(), messages_[0])); |
- EXPECT_TRUE(NextSwapMessages().empty()); |
+ EXPECT_TRUE(LastSwapMessages().empty()); |
EXPECT_TRUE(frame_swap_message_queue_->Empty()); |
} |
@@ -194,7 +221,7 @@ TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicySendsMessageOnSwapFails) { |
promises_[0]->DidNotSwap(cc::SwapPromise::SWAP_FAILS); |
EXPECT_TRUE(ContainsMessage(DirectSendMessages(), messages_[0])); |
- EXPECT_TRUE(NextSwapMessages().empty()); |
+ EXPECT_TRUE(LastSwapMessages().empty()); |
EXPECT_TRUE(frame_swap_message_queue_->Empty()); |
} |
@@ -207,6 +234,7 @@ TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicyRetainsMessageOnCommitFails) { |
promises_[0]->DidNotSwap(cc::SwapPromise::COMMIT_FAILS); |
EXPECT_TRUE(DirectSendMessages().empty()); |
+ EXPECT_TRUE(LastSwapMessages().empty()); |
EXPECT_FALSE(frame_swap_message_queue_->Empty()); |
frame_swap_message_queue_->DidSwap(2); |
EXPECT_TRUE(NextSwapHasMessage(messages_[0])); |
@@ -254,11 +282,11 @@ TEST_F(QueueMessageSwapPromiseTest, VisualStateSwapPromiseDidActivate) { |
QueueMessages(data, arraysize(data)); |
promises_[0]->DidActivate(); |
- promises_[0]->WillSwap(NULL); |
+ promises_[0]->WillSwap(&dummy_metadata_); |
promises_[0]->DidSwap(); |
ASSERT_FALSE(promises_[1].get()); |
std::vector<std::unique_ptr<IPC::Message>> messages; |
- messages.swap(NextSwapMessages()); |
+ messages.swap(LastSwapMessages()); |
EXPECT_EQ(2u, messages.size()); |
EXPECT_TRUE(ContainsMessage(messages, messages_[0])); |
EXPECT_TRUE(ContainsMessage(messages, messages_[1])); |