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

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: amend 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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 ASSERT_EQ(second_message_.routing_id(), messages[1]->routing_id()); 203 ASSERT_EQ(second_message_.routing_id(), messages[1]->routing_id());
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_));
213 const int rid[] = {first_message_.routing_id(),
214 second_message_.routing_id(),
215 third_message_.routing_id()};
211 216
212 queue_->DidNotSwap(2, cc::SwapPromise::COMMIT_NO_UPDATE, &messages); 217 bool msg_delivered = reason != cc::SwapPromise::COMMIT_FAILS &&
213 ASSERT_EQ(2u, messages.size()); 218 reason != cc::SwapPromise::ACTIVATION_FAILS;
214 ASSERT_TRUE(HasMessageForId(messages, first_message_.routing_id())); 219
215 ASSERT_TRUE(HasMessageForId(messages, second_message_.routing_id())); 220 queue_->DidNotSwap(2, reason, &messages);
221 ASSERT_TRUE(msg_delivered == HasMessageForId(messages, rid[0]));
222 ASSERT_TRUE(msg_delivered == HasMessageForId(messages, rid[1]));
223 ASSERT_FALSE(HasMessageForId(messages, rid[2]));
216 messages.clear(); 224 messages.clear();
217 225
218 queue_->DidNotSwap(3, cc::SwapPromise::COMMIT_NO_UPDATE, &messages); 226 queue_->DidNotSwap(3, reason, &messages);
219 ASSERT_EQ(1u, messages.size()); 227 ASSERT_FALSE(HasMessageForId(messages, rid[0]));
220 ASSERT_TRUE(HasMessageForId(messages, third_message_.routing_id())); 228 ASSERT_FALSE(HasMessageForId(messages, rid[1]));
229 ASSERT_TRUE(msg_delivered == HasMessageForId(messages, rid[2]));
221 messages.clear(); 230 messages.clear();
231
232 // all undelivered messages should still be available for RenderFrameHostImpl
233 // to deliver.
234 DrainMessages(3, &messages);
235 ASSERT_TRUE(msg_delivered != HasMessageForId(messages, rid[0]));
236 ASSERT_TRUE(msg_delivered != HasMessageForId(messages, rid[1]));
237 ASSERT_TRUE(msg_delivered != HasMessageForId(messages, rid[2]));
222 } 238 }
223 239
224 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapNoUpdate) { 240 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapNoUpdate) {
225 TestDidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE); 241 TestDidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE);
226 } 242 }
227 243
228 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapSwapFails) { 244 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapSwapFails) {
229 TestDidNotSwap(cc::SwapPromise::SWAP_FAILS); 245 TestDidNotSwap(cc::SwapPromise::SWAP_FAILS);
230 } 246 }
231 247
232 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapCommitFails) { 248 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapCommitFails) {
233 ScopedVector<IPC::Message> messages; 249 TestDidNotSwap(cc::SwapPromise::COMMIT_FAILS);
250 }
234 251
235 QueueNextSwapMessage(CloneMessage(first_message_)); 252 TEST_F(FrameSwapMessageQueueTest, TestDidNotSwapActivationFails) {
236 QueueVisualStateMessage(2, CloneMessage(second_message_)); 253 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 } 254 }
251 255
252 class NotifiesDeletionMessage : public IPC::Message { 256 class NotifiesDeletionMessage : public IPC::Message {
253 public: 257 public:
254 NotifiesDeletionMessage(bool* deleted, const IPC::Message& other) 258 NotifiesDeletionMessage(bool* deleted, const IPC::Message& other)
255 : IPC::Message(other), deleted_(deleted) {} 259 : IPC::Message(other), deleted_(deleted) {}
256 ~NotifiesDeletionMessage() override { *deleted_ = true; } 260 ~NotifiesDeletionMessage() override { *deleted_ = true; }
257 261
258 private: 262 private:
259 bool* deleted_; 263 bool* deleted_;
(...skipping 14 matching lines...) Expand all
274 &message_deleted, first_message_))); 278 &message_deleted, first_message_)));
275 queue_ = NULL; 279 queue_ = NULL;
276 ASSERT_TRUE(message_deleted); 280 ASSERT_TRUE(message_deleted);
277 } 281 }
278 282
279 TEST_F(FrameSwapMessageQueueTest, TestDeletesQueuedVisualStateMessage) { 283 TEST_F(FrameSwapMessageQueueTest, TestDeletesQueuedVisualStateMessage) {
280 bool message_deleted = false; 284 bool message_deleted = false;
281 QueueVisualStateMessage(1, 285 QueueVisualStateMessage(1,
282 make_scoped_ptr(new NotifiesDeletionMessage( 286 make_scoped_ptr(new NotifiesDeletionMessage(
283 &message_deleted, first_message_))); 287 &message_deleted, first_message_)));
288 queue_->DidActivate(1);
284 queue_->DidSwap(1); 289 queue_->DidSwap(1);
285 queue_ = NULL; 290 queue_ = NULL;
286 ASSERT_TRUE(message_deleted); 291 ASSERT_TRUE(message_deleted);
287 } 292 }
288 293
289 } // namespace content 294 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/frame_swap_message_queue.cc ('k') | content/renderer/gpu/queue_message_swap_promise.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698