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

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

Issue 1126963006: Move VISUAL_STATE promise to activation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: improve tests and address comments Created 5 years, 7 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
(...skipping 29 matching lines...) Expand all
40 bool* first) { 40 bool* first) {
41 queue_->QueueMessageForFrame(MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 41 queue_->QueueMessageForFrame(MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE,
42 source_frame_number, 42 source_frame_number,
43 msg.Pass(), 43 msg.Pass(),
44 first); 44 first);
45 } 45 }
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_->DidActivate(source_frame_number);
50 queue_->DidSwap(source_frame_number); 51 queue_->DidSwap(source_frame_number);
51 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope = 52 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope =
52 queue_->AcquireSendMessageScope(); 53 queue_->AcquireSendMessageScope();
53 queue_->DrainMessages(messages); 54 queue_->DrainMessages(messages);
54 } 55 }
55 56
56 bool HasMessageForId(const ScopedVector<IPC::Message>& messages, 57 bool HasMessageForId(const ScopedVector<IPC::Message>& messages,
57 int routing_id) { 58 int routing_id) {
58 for (ScopedVector<IPC::Message>::const_iterator i = messages.begin(); 59 for (ScopedVector<IPC::Message>::const_iterator i = messages.begin();
59 i != messages.end(); 60 i != messages.end();
(...skipping 25 matching lines...) Expand all
85 86
86 TEST_F(FrameSwapMessageQueueTest, TestEmpty) { 87 TEST_F(FrameSwapMessageQueueTest, TestEmpty) {
87 ScopedVector<IPC::Message> messages; 88 ScopedVector<IPC::Message> messages;
88 ASSERT_TRUE(queue_->Empty()); 89 ASSERT_TRUE(queue_->Empty());
89 QueueNextSwapMessage(CloneMessage(first_message_)); 90 QueueNextSwapMessage(CloneMessage(first_message_));
90 ASSERT_FALSE(queue_->Empty()); 91 ASSERT_FALSE(queue_->Empty());
91 DrainMessages(0, &messages); 92 DrainMessages(0, &messages);
92 ASSERT_TRUE(queue_->Empty()); 93 ASSERT_TRUE(queue_->Empty());
93 QueueVisualStateMessage(1, CloneMessage(first_message_)); 94 QueueVisualStateMessage(1, CloneMessage(first_message_));
94 ASSERT_FALSE(queue_->Empty()); 95 ASSERT_FALSE(queue_->Empty());
96 queue_->DidActivate(1);
95 queue_->DidSwap(1); 97 queue_->DidSwap(1);
96 ASSERT_FALSE(queue_->Empty()); 98 ASSERT_FALSE(queue_->Empty());
97 } 99 }
98 100
99 TEST_F(FrameSwapMessageQueueTest, TestQueueMessageFirst) { 101 TEST_F(FrameSwapMessageQueueTest, TestQueueMessageFirst) {
100 ScopedVector<IPC::Message> messages; 102 ScopedVector<IPC::Message> messages;
101 bool visual_state_first = false; 103 bool visual_state_first = false;
102 bool next_swap_first = false; 104 bool next_swap_first = false;
103 105
104 // Queuing the first time should result in true. 106 // Queuing the first time should result in true.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 } 204 }
203 205
204 void FrameSwapMessageQueueTest::TestDidNotSwap( 206 void FrameSwapMessageQueueTest::TestDidNotSwap(
205 cc::SwapPromise::DidNotSwapReason reason) { 207 cc::SwapPromise::DidNotSwapReason reason) {
206 ScopedVector<IPC::Message> messages; 208 ScopedVector<IPC::Message> messages;
207 209
208 QueueNextSwapMessage(CloneMessage(first_message_)); 210 QueueNextSwapMessage(CloneMessage(first_message_));
209 QueueVisualStateMessage(2, CloneMessage(second_message_)); 211 QueueVisualStateMessage(2, CloneMessage(second_message_));
210 QueueVisualStateMessage(3, CloneMessage(third_message_)); 212 QueueVisualStateMessage(3, CloneMessage(third_message_));
211 213
212 queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_NO_UPDATE, &messages); 214 bool msg_delivered = reason != cc::SwapPromise::COMMIT_FAILS &&
213 ASSERT_EQ(2u, messages.size()); 215 reason != cc::SwapPromise::ACTIVATION_FAILS;
214 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id())); 216
215 ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id())); 217 queue_->DidNotSwap(2, reason, &messages);
218 ASSERT_TRUE(msg_delivered == HasMessageForId(messages, first_message_.routing_ id()));
boliu 2015/05/14 14:40:21 80 char / line
Tobias Sargeant 2015/05/14 21:40:48 Done.
219 ASSERT_TRUE(msg_delivered == HasMessageForId(messages, second_message_.routing _id()));
220 ASSERT_FALSE(HasMessageForId(messages, third_message_.routing_id()));
216 messages.clear(); 221 messages.clear();
217 222
218 queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_NO_UPDATE, &messages); 223 queue_->DidNotSwap(3, reason, &messages);
219 ASSERT_EQ(1u, messages.size()); 224 ASSERT_FALSE(HasMessageForId(messages, first_message_.routing_id()));
220 ASSERT_TRUE(HasMessageForId(messages, third_message_.routing_id())); 225 ASSERT_FALSE(HasMessageForId(messages, second_message_.routing_id()));
226 ASSERT_TRUE(msg_delivered == HasMessageForId(messages, third_message_.routing_ id()));
221 messages.clear(); 227 messages.clear();
228
229 // all undelivered messages should still be available for RenderFrameHostImpl
230 // to deliver.
231 DrainMessages(3, &messages);
232 ASSERT_TRUE(msg_delivered != HasMessageForId(messages, first_message_.routing_ id()));
233 ASSERT_TRUE(msg_delivered != HasMessageForId(messages, second_message_.routing _id()));
234 ASSERT_TRUE(msg_delivered != HasMessageForId(messages, third_message_.routing_ id()));
222 } 235 }
223 236
224 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapNoUpdate) { 237 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapNoUpdate) {
225 TestDidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE); 238 TestDidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE);
226 } 239 }
227 240
228 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapSwapFails) { 241 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapSwapFails) {
229 TestDidNotSwap(cc::SwapPromise::SWAP_FAILS); 242 TestDidNotSwap(cc::SwapPromise::SWAP_FAILS);
boliu 2015/05/14 14:40:22 In theory, SWAP_FAILS has to come after DidActivat
Tobias Sargeant 2015/05/14 21:40:48 Acknowledged.
230 } 243 }
231 244
232 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapCommitFails) { 245 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapCommitFails) {
233 ScopedVector<IPC::Message> messages; 246 TestDidNotSwap(cc::SwapPromise::COMMIT_FAILS);
247 }
234 248
235 QueueNextSwapMessage(CloneMessage(first_message_)); 249 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapActivationFails) {
236 QueueVisualStateMessage(2, CloneMessage(second_message_)); 250 TestDidNotSwap(cc::SwapPromise::ACTIVATION_FAILS);
237 QueueVisualStateMessage(3, CloneMessage(third_message_));
238
239 queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_FAILS, &messages);
240 ASSERT_EQ(0u, messages.size());
241 messages.clear();
242
243 queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_FAILS, &messages);
244 ASSERT_EQ(0u, messages.size());
245 messages.clear();
246
247 DrainMessages(1, &messages);
248 ASSERT_EQ(1u, messages.size());
249 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id()));
250 } 251 }
251 252
252 class NotifiesDeletionMessage : public IPC::Message { 253 class NotifiesDeletionMessage : public IPC::Message {
253 public: 254 public:
254 NotifiesDeletionMessage(bool* deleted, const IPC::Message& other) 255 NotifiesDeletionMessage(bool* deleted, const IPC::Message& other)
255 : IPC::Message(other), deleted_(deleted) {} 256 : IPC::Message(other), deleted_(deleted) {}
256 ~NotifiesDeletionMessage() override { *deleted_ = true; } 257 ~NotifiesDeletionMessage() override { *deleted_ = true; }
257 258
258 private: 259 private:
259 bool* deleted_; 260 bool* deleted_;
(...skipping 14 matching lines...) Expand all
274 &message_deleted, first_message_))); 275 &message_deleted, first_message_)));
275 queue_ = NULL; 276 queue_ = NULL;
276 ASSERT_TRUE(message_deleted); 277 ASSERT_TRUE(message_deleted);
277 } 278 }
278 279
279 TEST_F(FrameSwapMessageQueueTest, TestDeletesQueuedVisualStateMessage) { 280 TEST_F(FrameSwapMessageQueueTest, TestDeletesQueuedVisualStateMessage) {
280 bool message_deleted = false; 281 bool message_deleted = false;
281 QueueVisualStateMessage(1, 282 QueueVisualStateMessage(1,
282 make_scoped_ptr(new NotifiesDeletionMessage( 283 make_scoped_ptr(new NotifiesDeletionMessage(
283 &message_deleted, first_message_))); 284 &message_deleted, first_message_)));
285 queue_->DidActivate(1);
284 queue_->DidSwap(1); 286 queue_->DidSwap(1);
285 queue_ = NULL; 287 queue_ = NULL;
286 ASSERT_TRUE(message_deleted); 288 ASSERT_TRUE(message_deleted);
287 } 289 }
288 290
289 } // namespace content 291 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698