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

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

Issue 1126963006: Move VISUAL_STATE promise to activation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: doc tweaks 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/queue_message_swap_promise.h" 5 #include "content/renderer/gpu/queue_message_swap_promise.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/memory/scoped_vector.h" 9 #include "base/memory/scoped_vector.h"
10 #include "cc/output/swap_promise.h" 10 #include "cc/output/swap_promise.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 QueueMessageImpl(new IPC::Message(messages_[i]), 108 QueueMessageImpl(new IPC::Message(messages_[i]),
109 data[i].policy, 109 data[i].policy,
110 data[i].source_frame_number).release()); 110 data[i].source_frame_number).release());
111 } 111 }
112 } 112 }
113 113
114 void CleanupPromises() { 114 void CleanupPromises() {
115 for (ScopedVector<cc::SwapPromise>::iterator i = promises_.begin(); 115 for (ScopedVector<cc::SwapPromise>::iterator i = promises_.begin();
116 i != promises_.end(); 116 i != promises_.end();
117 ++i) { 117 ++i) {
118 if (*i) 118 if (*i) {
119 (*i)->DidActivate();
119 (*i)->DidSwap(NULL); 120 (*i)->DidSwap(NULL);
121 }
120 } 122 }
121 } 123 }
122 124
123 protected: 125 protected:
124 void VisualStateSwapPromiseDidNotSwap( 126 void VisualStateSwapPromiseDidNotSwap(
125 cc::SwapPromise::DidNotSwapReason reason); 127 cc::SwapPromise::DidNotSwapReason reason);
126 128
127 base::MessageLoop message_loop_; 129 base::MessageLoop message_loop_;
128 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue_; 130 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue_;
129 scoped_refptr<TestSyncMessageFilter> sync_message_filter_; 131 scoped_refptr<TestSyncMessageFilter> sync_message_filter_;
130 std::vector<IPC::Message> messages_; 132 std::vector<IPC::Message> messages_;
131 ScopedVector<cc::SwapPromise> promises_; 133 ScopedVector<cc::SwapPromise> promises_;
132 134
133 private: 135 private:
134 ScopedVector<IPC::Message> next_swap_messages_; 136 ScopedVector<IPC::Message> next_swap_messages_;
135 137
136 DISALLOW_COPY_AND_ASSIGN(QueueMessageSwapPromiseTest); 138 DISALLOW_COPY_AND_ASSIGN(QueueMessageSwapPromiseTest);
137 }; 139 };
138 140
139 TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicySchedulesMessageForNextSwap) { 141 TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicySchedulesMessageForNextSwap) {
140 QueueMessageData data[] = { 142 QueueMessageData data[] = {
141 /* { policy, source_frame_number } */ 143 /* { policy, source_frame_number } */
142 {MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 1}, 144 {MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 1},
143 }; 145 };
144 QueueMessages(data, arraysize(data)); 146 QueueMessages(data, arraysize(data));
145 147
146 ASSERT_TRUE(promises_[0]); 148 ASSERT_TRUE(promises_[0]);
149 promises_[0]->DidActivate();
150 promises_[0]->DidSwap(NULL);
151
147 EXPECT_TRUE(DirectSendMessages().empty()); 152 EXPECT_TRUE(DirectSendMessages().empty());
148 EXPECT_FALSE(frame_swap_message_queue_->Empty()); 153 EXPECT_FALSE(frame_swap_message_queue_->Empty());
154 // frame_swap_message_queue_->DidSwap(1);
149 EXPECT_TRUE(NextSwapHasMessage(messages_[0])); 155 EXPECT_TRUE(NextSwapHasMessage(messages_[0]));
150
151 CleanupPromises();
152 } 156 }
153 157
154 TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicyNeedsAtMostOnePromise) { 158 TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicyNeedsAtMostOnePromise) {
155 QueueMessageData data[] = { 159 QueueMessageData data[] = {
156 /* { policy, source_frame_number } */ 160 /* { policy, source_frame_number } */
157 {MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 1}, 161 {MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 1},
158 {MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 1}, 162 {MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 1},
159 }; 163 };
160 QueueMessages(data, arraysize(data)); 164 QueueMessages(data, arraysize(data));
161 165
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicyRetainsMessageOnCommitFails) { 198 TEST_F(QueueMessageSwapPromiseTest, NextSwapPolicyRetainsMessageOnCommitFails) {
195 QueueMessageData data[] = { 199 QueueMessageData data[] = {
196 /* { policy, source_frame_number } */ 200 /* { policy, source_frame_number } */
197 {MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 1}, 201 {MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP, 1},
198 }; 202 };
199 QueueMessages(data, arraysize(data)); 203 QueueMessages(data, arraysize(data));
200 204
201 promises_[0]->DidNotSwap(cc::SwapPromise::COMMIT_FAILS); 205 promises_[0]->DidNotSwap(cc::SwapPromise::COMMIT_FAILS);
202 EXPECT_TRUE(DirectSendMessages().empty()); 206 EXPECT_TRUE(DirectSendMessages().empty());
203 EXPECT_FALSE(frame_swap_message_queue_->Empty()); 207 EXPECT_FALSE(frame_swap_message_queue_->Empty());
208 frame_swap_message_queue_->DidSwap(2);
204 EXPECT_TRUE(NextSwapHasMessage(messages_[0])); 209 EXPECT_TRUE(NextSwapHasMessage(messages_[0]));
205 } 210 }
206 211
207 TEST_F(QueueMessageSwapPromiseTest, 212 TEST_F(QueueMessageSwapPromiseTest,
208 VisualStateQueuesMessageWhenCommitRequested) { 213 VisualStateQueuesMessageWhenCommitRequested) {
209 QueueMessageData data[] = { 214 QueueMessageData data[] = {
210 /* { policy, source_frame_number } */ 215 /* { policy, source_frame_number } */
211 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1}, 216 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1},
212 }; 217 };
213 QueueMessages(data, arraysize(data)); 218 QueueMessages(data, arraysize(data));
(...skipping 15 matching lines...) Expand all
229 }; 234 };
230 QueueMessages(data, arraysize(data)); 235 QueueMessages(data, arraysize(data));
231 236
232 EXPECT_TRUE(DirectSendMessages().empty()); 237 EXPECT_TRUE(DirectSendMessages().empty());
233 EXPECT_FALSE(frame_swap_message_queue_->Empty()); 238 EXPECT_FALSE(frame_swap_message_queue_->Empty());
234 EXPECT_FALSE(NextSwapHasMessage(messages_[1])); 239 EXPECT_FALSE(NextSwapHasMessage(messages_[1]));
235 240
236 CleanupPromises(); 241 CleanupPromises();
237 } 242 }
238 243
239 TEST_F(QueueMessageSwapPromiseTest, VisualStateSwapPromiseDidSwap) { 244 TEST_F(QueueMessageSwapPromiseTest, VisualStateSwapPromiseDidActivate) {
240 QueueMessageData data[] = { 245 QueueMessageData data[] = {
241 /* { policy, source_frame_number } */ 246 /* { policy, source_frame_number } */
242 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1}, 247 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1},
243 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1}, 248 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1},
244 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 2}, 249 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 2},
245 }; 250 };
246 QueueMessages(data, arraysize(data)); 251 QueueMessages(data, arraysize(data));
247 252
253 promises_[0]->DidActivate();
248 promises_[0]->DidSwap(NULL); 254 promises_[0]->DidSwap(NULL);
249 ASSERT_FALSE(promises_[1]); 255 ASSERT_FALSE(promises_[1]);
250 ScopedVector<IPC::Message> messages; 256 ScopedVector<IPC::Message> messages;
251 messages.swap(NextSwapMessages()); 257 messages.swap(NextSwapMessages());
252 EXPECT_EQ(2u, messages.size()); 258 EXPECT_EQ(2u, messages.size());
253 EXPECT_TRUE(ContainsMessage(messages, messages_[0])); 259 EXPECT_TRUE(ContainsMessage(messages, messages_[0]));
254 EXPECT_TRUE(ContainsMessage(messages, messages_[1])); 260 EXPECT_TRUE(ContainsMessage(messages, messages_[1]));
255 EXPECT_FALSE(ContainsMessage(messages, messages_[2])); 261 EXPECT_FALSE(ContainsMessage(messages, messages_[2]));
256 262
257 promises_[2]->DidSwap(NULL); 263 promises_[2]->DidActivate();
264 promises_[2]->DidNotSwap(cc::SwapPromise::SWAP_FAILS);
258 messages.swap(NextSwapMessages()); 265 messages.swap(NextSwapMessages());
259 EXPECT_EQ(1u, messages.size()); 266 EXPECT_EQ(1u, messages.size());
260 EXPECT_TRUE(ContainsMessage(messages, messages_[2])); 267 EXPECT_TRUE(ContainsMessage(messages, messages_[2]));
261 268
262 EXPECT_TRUE(DirectSendMessages().empty()); 269 EXPECT_TRUE(DirectSendMessages().empty());
263 EXPECT_TRUE(NextSwapMessages().empty()); 270 EXPECT_TRUE(NextSwapMessages().empty());
264 EXPECT_TRUE(frame_swap_message_queue_->Empty()); 271 EXPECT_TRUE(frame_swap_message_queue_->Empty());
265 } 272 }
266 273
267 void QueueMessageSwapPromiseTest::VisualStateSwapPromiseDidNotSwap( 274 void QueueMessageSwapPromiseTest::VisualStateSwapPromiseDidNotSwap(
268 cc::SwapPromise::DidNotSwapReason reason) { 275 cc::SwapPromise::DidNotSwapReason reason) {
269 QueueMessageData data[] = { 276 QueueMessageData data[] = {
270 /* { policy, source_frame_number } */ 277 /* { policy, source_frame_number } */
271 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1}, 278 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1},
272 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1}, 279 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1},
273 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 2}, 280 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 2},
274 }; 281 };
275 QueueMessages(data, arraysize(data)); 282 QueueMessages(data, arraysize(data));
276 283
284 // COMMIT_FAILS and ACTIVATE_FAILS are treated differently:
piman 2015/05/13 22:47:15 nit: this reads wrong - it sounds like COMMIT_FAIL
285 // If we fail to swap with COMMIT_FAILS or ACTIVATE_FAILS, then
286 // the renderer is shutting down, which implies that the
287 // RenderFrameHostImpl destructor will eventually be called,
288 // firing the remaining response callbacks (with swap_success =
289 // false) itself.
290 bool msg_delivered = reason != cc::SwapPromise::COMMIT_FAILS &&
291 reason != cc::SwapPromise::ACTIVATION_FAILS;
292
277 promises_[0]->DidNotSwap(reason); 293 promises_[0]->DidNotSwap(reason);
278 ASSERT_FALSE(promises_[1]); 294 ASSERT_FALSE(promises_[1]);
279 EXPECT_TRUE(NextSwapMessages().empty()); 295 EXPECT_TRUE(NextSwapMessages().empty());
280 EXPECT_EQ(2u, DirectSendMessages().size()); 296 EXPECT_EQ(msg_delivered, ContainsMessage(DirectSendMessages(), messages_[0]));
281 EXPECT_TRUE(ContainsMessage(DirectSendMessages(), messages_[0])); 297 EXPECT_EQ(msg_delivered, ContainsMessage(DirectSendMessages(), messages_[1]));
282 EXPECT_TRUE(ContainsMessage(DirectSendMessages(), messages_[1]));
283 EXPECT_FALSE(ContainsMessage(DirectSendMessages(), messages_[2])); 298 EXPECT_FALSE(ContainsMessage(DirectSendMessages(), messages_[2]));
284 299
285 promises_[2]->DidNotSwap(reason); 300 promises_[2]->DidNotSwap(reason);
286 EXPECT_TRUE(NextSwapMessages().empty()); 301 EXPECT_TRUE(NextSwapMessages().empty());
287 EXPECT_TRUE(ContainsMessage(DirectSendMessages(), messages_[2])); 302 EXPECT_EQ(msg_delivered, ContainsMessage(DirectSendMessages(), messages_[2]));
288 303
289 EXPECT_TRUE(NextSwapMessages().empty()); 304 EXPECT_TRUE(NextSwapMessages().empty());
290 EXPECT_TRUE(frame_swap_message_queue_->Empty()); 305 EXPECT_TRUE(frame_swap_message_queue_->Empty());
291 } 306 }
292 307
293 TEST_F(QueueMessageSwapPromiseTest, VisalStateSwapPromiseDidNotSwapNoUpdate) { 308 TEST_F(QueueMessageSwapPromiseTest, VisalStateSwapPromiseDidNotSwapNoUpdate) {
294 VisualStateSwapPromiseDidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE); 309 VisualStateSwapPromiseDidNotSwap(cc::SwapPromise::COMMIT_NO_UPDATE);
295 } 310 }
296 311
297 TEST_F(QueueMessageSwapPromiseTest, 312 TEST_F(QueueMessageSwapPromiseTest, VisalStateSwapPromiseDidNotSwapNoUpdate) {
298 VisualStateSwapPromiseDidNotSwapCommitFails) { 313 VisualStateSwapPromiseDidNotSwap(cc::SwapPromise::COMMIT_FAILS);
299 // COMMIT_FAILS is treated differently:
300 // If we fail to swap with COMMIT_FAILS, then the renderer is
301 // shutting down, which implies that the RenderFrameHostImpl
302 // destructor will eventually be called, firing the remaining
303 // response callbacks (with swap_success = false) itself.
304 QueueMessageData data[] = {
305 /* { policy, source_frame_number } */
306 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1},
307 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 1},
308 {MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE, 2},
309 };
310 QueueMessages(data, arraysize(data));
311
312 promises_[0]->DidNotSwap(cc::SwapPromise::COMMIT_FAILS);
313 ASSERT_FALSE(promises_[1]);
314 EXPECT_TRUE(NextSwapMessages().empty());
315 EXPECT_EQ(0u, DirectSendMessages().size());
316 EXPECT_FALSE(ContainsMessage(DirectSendMessages(), messages_[0]));
317 EXPECT_FALSE(ContainsMessage(DirectSendMessages(), messages_[1]));
318 EXPECT_FALSE(ContainsMessage(DirectSendMessages(), messages_[2]));
319
320 promises_[2]->DidNotSwap(cc::SwapPromise::COMMIT_FAILS);
321 EXPECT_TRUE(NextSwapMessages().empty());
322 EXPECT_FALSE(ContainsMessage(DirectSendMessages(), messages_[2]));
323
324 EXPECT_TRUE(NextSwapMessages().empty());
325 EXPECT_FALSE(frame_swap_message_queue_->Empty());
326 } 314 }
327 315
328 TEST_F(QueueMessageSwapPromiseTest, VisalStateSwapPromiseDidNotSwapSwapFails) { 316 TEST_F(QueueMessageSwapPromiseTest, VisalStateSwapPromiseDidNotSwapSwapFails) {
329 VisualStateSwapPromiseDidNotSwap(cc::SwapPromise::SWAP_FAILS); 317 VisualStateSwapPromiseDidNotSwap(cc::SwapPromise::SWAP_FAILS);
330 } 318 }
331 319
320 TEST_F(QueueMessageSwapPromiseTest, VisalStateSwapPromiseDidNotSwapSwapFails) {
321 VisualStateSwapPromiseDidNotSwap(cc::SwapPromise::ACTIVATION_FAILS);
322 }
323
332 } // namespace content 324 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698