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

Side by Side Diff: content/renderer/queue_message_swap_promise_unittest.cc

Issue 240163005: Deliver IPC messages together with SwapCompositorFrame (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: feedback + add more testing Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698