| 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]));
|
|
|