OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/renderer/queue_message_swap_promise.h" | |
6 | |
7 #include <vector> | |
8 | |
9 #include "base/memory/scoped_vector.h" | |
10 #include "cc/base/swap_promise.h" | |
11 #include "content/renderer/gpu/frame_swap_message_queue.h" | |
12 #include "content/renderer/gpu/render_widget_compositor.h" | |
13 #include "content/renderer/render_widget.h" | |
14 #include "content/test/mock_render_process.h" | |
15 #include "ipc/ipc_message.h" | |
16 #include "ipc/ipc_sync_message_filter.h" | |
17 #include "ipc/ipc_test_sink.h" | |
18 #include "testing/gtest/include/gtest/gtest.h" | |
19 | |
20 namespace content { | |
21 | |
22 class TestRenderWidget : public RenderWidget { | |
23 public: | |
24 using RenderWidget::QueueMessageImpl; | |
25 }; | |
26 | |
27 class TestSyncMessageFilter : public IPC::SyncMessageFilter { | |
28 public: | |
29 TestSyncMessageFilter() : IPC::SyncMessageFilter(NULL) {} | |
30 virtual bool Send(IPC::Message* message) OVERRIDE { | |
31 messages_.push_back(message); | |
32 return true; | |
33 } | |
piman
2014/06/24 19:35:53
nit: blank lines between methods.
(also 'git cl fo
mkosiba (inactive)
2014/06/25 18:40:38
Done. clang-format seems to not care about this.
| |
34 ScopedVector<IPC::Message>& messages() { | |
35 return messages_; | |
36 } | |
37 private: | |
38 ScopedVector<IPC::Message> messages_; | |
39 }; | |
40 | |
41 class QueueMessageSwapPromiseTest : public testing::Test { | |
42 public: | |
43 QueueMessageSwapPromiseTest() | |
44 : frame_swap_message_queue_(new FrameSwapMessageQueue()), | |
45 sync_message_filter_(new TestSyncMessageFilter()), | |
46 message_(42, 0, IPC::Message::PRIORITY_NORMAL) {} | |
47 virtual ~QueueMessageSwapPromiseTest() {} | |
48 | |
49 scoped_ptr<cc::SwapPromise> QueueMessageImpl( | |
50 IPC::Message* msg, | |
51 MessageDeliveryPolicy policy, | |
52 bool commit_requested, | |
53 int source_frame_number) { | |
54 return TestRenderWidget::QueueMessageImpl(msg, | |
55 policy, | |
56 frame_swap_message_queue_, | |
57 sync_message_filter_, | |
58 commit_requested, | |
59 source_frame_number).Pass(); | |
60 } | |
61 ScopedVector<IPC::Message>& DirectSendMessages() { | |
62 return sync_message_filter_->messages(); | |
63 } | |
64 bool NextSwapHasMessage() { | |
65 ScopedVector<IPC::Message> messages; | |
66 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope = | |
67 frame_swap_message_queue_->AcquireSendMessageScope(); | |
68 frame_swap_message_queue_->DrainMessages(&messages); | |
69 return !messages.empty() && | |
70 messages.front()->routing_id() == message_.routing_id(); | |
71 } | |
72 | |
73 protected: | |
74 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue_; | |
75 scoped_refptr<TestSyncMessageFilter> sync_message_filter_; | |
76 IPC::Message message_; | |
77 | |
78 private: | |
79 DISALLOW_COPY_AND_ASSIGN(QueueMessageSwapPromiseTest); | |
80 }; | |
81 | |
82 | |
83 TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicy) { | |
84 scoped_ptr<cc::SwapPromise> swap_promise = | |
85 QueueMessageImpl(new IPC::Message(message_), | |
86 MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, | |
87 false, /* commit_requested */ | |
88 1 /* source_frame_number */); | |
89 ASSERT_FALSE(swap_promise); | |
90 ASSERT_TRUE(DirectSendMessages().empty()); | |
91 ASSERT_FALSE(frame_swap_message_queue_->Empty()); | |
92 ASSERT_TRUE(NextSwapHasMessage()); | |
93 } | |
94 | |
95 TEST_F(QueueMessageSwapPromiseTest, VisualStateFastPath) { | |
96 scoped_ptr<cc::SwapPromise> swap_promise = | |
97 QueueMessageImpl(new IPC::Message(message_), | |
98 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, | |
99 false, /* commit_requested */ | |
100 1 /* source_frame_number */); | |
101 ASSERT_FALSE(swap_promise); | |
102 ASSERT_FALSE(DirectSendMessages().empty()); | |
103 ASSERT_TRUE(frame_swap_message_queue_->Empty()); | |
104 ASSERT_FALSE(NextSwapHasMessage()); | |
105 } | |
106 | |
107 TEST_F(QueueMessageSwapPromiseTest, VisualStateWhenCommitRequested) { | |
108 scoped_ptr<cc::SwapPromise> swap_promise = | |
109 QueueMessageImpl(new IPC::Message(message_), | |
110 MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, | |
111 true, /* commit_requested */ | |
112 1 /* source_frame_number */); | |
113 ASSERT_TRUE(swap_promise); | |
114 ASSERT_TRUE(DirectSendMessages().empty()); | |
115 ASSERT_FALSE(frame_swap_message_queue_->Empty()); | |
116 ASSERT_FALSE(NextSwapHasMessage()); | |
117 | |
118 swap_promise->DidSwap(NULL); | |
119 } | |
mkosiba (inactive)
2014/06/24 18:29:54
I'll add more tests in a subsequent iteration.
| |
120 | |
121 } // namespace content | |
OLD | NEW |