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

Side by Side Diff: content/renderer/gpu/frame_swap_message_queue_unittest.cc

Issue 974483002: [WebView] Remove onFailure from VisualStateCallback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/gpu/frame_swap_message_queue.h" 5 #include "content/renderer/gpu/frame_swap_message_queue.h"
6 #include "ipc/ipc_message.h" 6 #include "ipc/ipc_message.h"
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 namespace content { 9 namespace content {
10 10
11 class FrameSwapMessageQueueTest : public testing::Test { 11 class FrameSwapMessageQueueTest : public testing::Test {
12 public: 12 public:
13 FrameSwapMessageQueueTest() 13 FrameSwapMessageQueueTest()
14 : first_message_(41, 1, IPC::Message::PRIORITY_NORMAL), 14 : first_message_(41, 0xdecaf001, IPC::Message::PRIORITY_NORMAL),
15 second_message_(42, 2, IPC::Message::PRIORITY_NORMAL), 15 second_message_(42, 0xdecaf002, IPC::Message::PRIORITY_NORMAL),
16 third_message_(43, 3, IPC::Message::PRIORITY_NORMAL), 16 third_message_(43, 0xdecaf003, IPC::Message::PRIORITY_NORMAL),
17 queue_(new FrameSwapMessageQueue()) {} 17 queue_(new FrameSwapMessageQueue()) {}
18 18
19 protected: 19 protected:
20 void QueueNextSwapMessage(scoped_ptr<IPC::Message> msg) { 20 void QueueNextSwapMessage(scoped_ptr<IPC::Message> msg) {
21 queue_->QueueMessageForFrame( 21 queue_->QueueMessageForFrame(
22 MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 0, msg.Pass(), NULL); 22 MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 0, msg.Pass(), NULL);
23 } 23 }
24 24
25 void QueueNextSwapMessage(scoped_ptr<IPC::Message> msg, bool* first) { 25 void QueueNextSwapMessage(scoped_ptr<IPC::Message> msg, bool* first) {
26 queue_->QueueMessageForFrame( 26 queue_->QueueMessageForFrame(
(...skipping 19 matching lines...) Expand all
46 46
47 void DrainMessages(int source_frame_number, 47 void DrainMessages(int source_frame_number,
48 ScopedVector<IPC::Message>* messages) { 48 ScopedVector<IPC::Message>* messages) {
49 messages->clear(); 49 messages->clear();
50 queue_->DidSwap(source_frame_number); 50 queue_->DidSwap(source_frame_number);
51 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope = 51 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope =
52 queue_->AcquireSendMessageScope(); 52 queue_->AcquireSendMessageScope();
53 queue_->DrainMessages(messages); 53 queue_->DrainMessages(messages);
54 } 54 }
55 55
56 int ExpectedMessageCount(const ScopedVector<IPC::Message>& messages) {
57 return std::count_if(messages.begin(), messages.end(),
58 [](IPC::Message* msg) -> bool {
59 return (msg->type() & 0xfffff000) == 0xdecaf000;
60 });
61 }
62
56 bool HasMessageForId(const ScopedVector<IPC::Message>& messages, 63 bool HasMessageForId(const ScopedVector<IPC::Message>& messages,
57 int routing_id) { 64 int routing_id) {
58 for (ScopedVector<IPC::Message>::const_iterator i = messages.begin(); 65 for (ScopedVector<IPC::Message>::const_iterator i = messages.begin();
59 i != messages.end(); 66 i != messages.end();
60 ++i) { 67 ++i) {
61 if ((*i)->routing_id() == routing_id) 68 if ((*i)->routing_id() == routing_id)
62 return true; 69 return true;
63 } 70 }
64 return false; 71 return false;
65 } 72 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 TestDrainsVisualStateMessagesForCorrespondingFrames) { 164 TestDrainsVisualStateMessagesForCorrespondingFrames) {
158 ScopedVector<IPC::Message> messages; 165 ScopedVector<IPC::Message> messages;
159 166
160 QueueVisualStateMessage(1, CloneMessage(first_message_)); 167 QueueVisualStateMessage(1, CloneMessage(first_message_));
161 QueueVisualStateMessage(2, CloneMessage(second_message_)); 168 QueueVisualStateMessage(2, CloneMessage(second_message_));
162 QueueVisualStateMessage(3, CloneMessage(third_message_)); 169 QueueVisualStateMessage(3, CloneMessage(third_message_));
163 DrainMessages(0, &messages); 170 DrainMessages(0, &messages);
164 ASSERT_TRUE(messages.empty()); 171 ASSERT_TRUE(messages.empty());
165 172
166 DrainMessages(2, &messages); 173 DrainMessages(2, &messages);
167 ASSERT_EQ(2u, messages.size()); 174 ASSERT_EQ(2, ExpectedMessageCount(messages));
168 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id())); 175 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id()));
169 ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id())); 176 ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id()));
170 messages.clear(); 177 messages.clear();
171 178
172 DrainMessages(2, &messages); 179 DrainMessages(2, &messages);
173 ASSERT_TRUE(messages.empty()); 180 ASSERT_TRUE(messages.empty());
174 181
175 DrainMessages(5, &messages); 182 DrainMessages(5, &messages);
176 ASSERT_EQ(1u, messages.size()); 183 ASSERT_EQ(1, ExpectedMessageCount(messages));
177 ASSERT_EQ(third_message_.routing_id(), messages.front()->routing_id()); 184 ASSERT_EQ(third_message_.routing_id(), messages.front()->routing_id());
178 } 185 }
179 186
180 TEST_F(FrameSwapMessageQueueTest, 187 TEST_F(FrameSwapMessageQueueTest,
181 TestQueueNextSwapMessagePreservesFifoOrdering) { 188 TestQueueNextSwapMessagePreservesFifoOrdering) {
182 ScopedVector<IPC::Message> messages; 189 ScopedVector<IPC::Message> messages;
183 190
184 QueueNextSwapMessage(CloneMessage(first_message_)); 191 QueueNextSwapMessage(CloneMessage(first_message_));
185 QueueNextSwapMessage(CloneMessage(second_message_)); 192 QueueNextSwapMessage(CloneMessage(second_message_));
186 DrainMessages(1, &messages); 193 DrainMessages(1, &messages);
187 ASSERT_EQ(2u, messages.size()); 194 ASSERT_EQ(2u, messages.size());
188 ASSERT_EQ(first_message_.routing_id(), messages[0]->routing_id()); 195 ASSERT_EQ(first_message_.routing_id(), messages[0]->routing_id());
189 ASSERT_EQ(second_message_.routing_id(), messages[1]->routing_id()); 196 ASSERT_EQ(second_message_.routing_id(), messages[1]->routing_id());
190 } 197 }
191 198
192 TEST_F(FrameSwapMessageQueueTest, 199 TEST_F(FrameSwapMessageQueueTest,
193 TestQueueVisualStateMessagePreservesFifoOrdering) { 200 TestQueueVisualStateMessagePreservesFifoOrdering) {
194 ScopedVector<IPC::Message> messages; 201 ScopedVector<IPC::Message> messages;
195 202
196 QueueVisualStateMessage(1, CloneMessage(first_message_)); 203 QueueVisualStateMessage(1, CloneMessage(first_message_));
197 QueueVisualStateMessage(1, CloneMessage(second_message_)); 204 QueueVisualStateMessage(1, CloneMessage(second_message_));
198 DrainMessages(1, &messages); 205 DrainMessages(1, &messages);
199 ASSERT_EQ(2u, messages.size()); 206 ASSERT_EQ(2, ExpectedMessageCount(messages));
200 ASSERT_EQ(first_message_.routing_id(), messages[0]->routing_id()); 207 ASSERT_EQ(first_message_.routing_id(), messages[0]->routing_id());
201 ASSERT_EQ(second_message_.routing_id(), messages[1]->routing_id()); 208 ASSERT_EQ(second_message_.routing_id(), messages[1]->routing_id());
202 } 209 }
203 210
204 void FrameSwapMessageQueueTest::TestDidNotSwap( 211 void FrameSwapMessageQueueTest::TestDidNotSwap(
205 cc::SwapPromise::DidNotSwapReason reason) { 212 cc::SwapPromise::DidNotSwapReason reason) {
206 ScopedVector<IPC::Message> messages; 213 ScopedVector<IPC::Message> messages;
207 214
208 QueueNextSwapMessage(CloneMessage(first_message_)); 215 QueueNextSwapMessage(CloneMessage(first_message_));
209 QueueVisualStateMessage(2, CloneMessage(second_message_)); 216 QueueVisualStateMessage(2, CloneMessage(second_message_));
210 QueueVisualStateMessage(3, CloneMessage(third_message_)); 217 QueueVisualStateMessage(3, CloneMessage(third_message_));
211 218
212 queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_NO_UPDATE, &messages); 219 queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_NO_UPDATE, &messages);
213 ASSERT_EQ(2u, messages.size()); 220 ASSERT_EQ(2, ExpectedMessageCount(messages));
214 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id())); 221 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id()));
215 ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id())); 222 ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id()));
216 messages.clear(); 223 messages.clear();
217 224
218 queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_NO_UPDATE, &messages); 225 queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_NO_UPDATE, &messages);
219 ASSERT_EQ(1u, messages.size()); 226 ASSERT_EQ(1, ExpectedMessageCount(messages));
220 ASSERT_TRUE(HasMessageForId(messages, third_message_.routing_id())); 227 ASSERT_TRUE(HasMessageForId(messages, third_message_.routing_id()));
221 messages.clear(); 228 messages.clear();
222 } 229 }
223 230
224 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapNoUpdate) { 231 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapNoUpdate) {
225 TestDidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE); 232 TestDidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE);
226 } 233 }
227 234
228 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapSwapFails) { 235 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapSwapFails) {
229 TestDidNotSwap(cc::SwapPromise::SWAP_FAILS); 236 TestDidNotSwap(cc::SwapPromise::SWAP_FAILS);
230 } 237 }
231 238
232 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapCommitFails) { 239 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapCommitFails) {
233 ScopedVector<IPC::Message> messages; 240 ScopedVector<IPC::Message> messages;
234 241
235 QueueNextSwapMessage(CloneMessage(first_message_)); 242 QueueNextSwapMessage(CloneMessage(first_message_));
236 QueueVisualStateMessage(2, CloneMessage(second_message_)); 243 QueueVisualStateMessage(2, CloneMessage(second_message_));
237 QueueVisualStateMessage(3, CloneMessage(third_message_)); 244 QueueVisualStateMessage(3, CloneMessage(third_message_));
238 245
239 queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_FAILS, &messages); 246 queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_FAILS, &messages);
240 ASSERT_EQ(1u, messages.size()); 247 ASSERT_EQ(1, ExpectedMessageCount(messages));
241 ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id())); 248 ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id()));
242 messages.clear(); 249 messages.clear();
243 250
244 queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_FAILS, &messages); 251 queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_FAILS, &messages);
245 ASSERT_EQ(1u, messages.size()); 252 ASSERT_EQ(1, ExpectedMessageCount(messages));
246 ASSERT_TRUE(HasMessageForId(messages, third_message_.routing_id())); 253 ASSERT_TRUE(HasMessageForId(messages, third_message_.routing_id()));
247 messages.clear(); 254 messages.clear();
248 255
249 DrainMessages(1, &messages); 256 DrainMessages(1, &messages);
250 ASSERT_EQ(1u, messages.size()); 257 ASSERT_EQ(1, ExpectedMessageCount(messages));
251 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id())); 258 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id()));
252 } 259 }
253 260
254 class NotifiesDeletionMessage : public IPC::Message { 261 class NotifiesDeletionMessage : public IPC::Message {
255 public: 262 public:
256 NotifiesDeletionMessage(bool* deleted, const IPC::Message& other) 263 NotifiesDeletionMessage(bool* deleted, const IPC::Message& other)
257 : IPC::Message(other), deleted_(deleted) {} 264 : IPC::Message(other), deleted_(deleted) {}
258 ~NotifiesDeletionMessage() override { *deleted_ = true; } 265 ~NotifiesDeletionMessage() override { *deleted_ = true; }
259 266
260 private: 267 private:
(...skipping 21 matching lines...) Expand all
282 bool message_deleted = false; 289 bool message_deleted = false;
283 QueueVisualStateMessage(1, 290 QueueVisualStateMessage(1,
284 make_scoped_ptr(new NotifiesDeletionMessage( 291 make_scoped_ptr(new NotifiesDeletionMessage(
285 &message_deleted, first_message_))); 292 &message_deleted, first_message_)));
286 queue_->DidSwap(1); 293 queue_->DidSwap(1);
287 queue_ = NULL; 294 queue_ = NULL;
288 ASSERT_TRUE(message_deleted); 295 ASSERT_TRUE(message_deleted);
289 } 296 }
290 297
291 } // namespace content 298 } // namespace content
OLDNEW
« content/common/frame_messages.h ('K') | « content/renderer/gpu/frame_swap_message_queue.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698