blob: 8a2305b36543dc75eaa188a069cb1ccaedb1d3ea [file] [log] [blame]
Valerie Hau9cfc6d82019-09-23 13:54:07 -07001/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Ady Abraham29d16cb2021-03-08 13:19:21 -080017#include <sys/epoll.h>
18
19#include <gui/DisplayEventReceiver.h>
20
chaviwd7deef72021-10-06 11:53:40 -050021#include <gui/test/CallbackUtils.h>
Valerie Hau9cfc6d82019-09-23 13:54:07 -070022#include "LayerTransactionTest.h"
Valerie Hau9cfc6d82019-09-23 13:54:07 -070023
Vishnu Nair1506b182021-02-22 14:35:15 -080024using namespace std::chrono_literals;
25
Valerie Hau9cfc6d82019-09-23 13:54:07 -070026namespace android {
27
28using android::hardware::graphics::common::V1_1::BufferUsage;
chaviw6b9ffea2021-11-08 09:25:48 -060029using SCHash = SurfaceComposerClient::SCHash;
Valerie Hau9cfc6d82019-09-23 13:54:07 -070030
31::testing::Environment* const binderEnv =
32 ::testing::AddGlobalTestEnvironment(new BinderEnvironment());
33
34class LayerCallbackTest : public LayerTransactionTest {
35public:
Ady Abraham29d16cb2021-03-08 13:19:21 -080036 void SetUp() override {
37 LayerTransactionTest::SetUp();
38
39 EXPECT_EQ(NO_ERROR, mDisplayEventReceiver.initCheck());
40
41 mEpollFd = epoll_create1(EPOLL_CLOEXEC);
42 EXPECT_GT(mEpollFd, 1);
43
44 epoll_event event;
45 event.events = EPOLLIN;
46 EXPECT_EQ(0, epoll_ctl(mEpollFd, EPOLL_CTL_ADD, mDisplayEventReceiver.getFd(), &event));
47 }
48
49 void TearDown() override {
50 close(mEpollFd);
51 LayerTransactionTest::TearDown();
52 }
53
Valerie Hau9cfc6d82019-09-23 13:54:07 -070054 virtual sp<SurfaceControl> createBufferStateLayer() {
55 return createLayer(mClient, "test", 0, 0, ISurfaceComposerClient::eFXSurfaceBufferState);
56 }
57
58 static int fillTransaction(Transaction& transaction, CallbackHelper* callbackHelper,
59 const sp<SurfaceControl>& layer = nullptr, bool setBuffer = true,
60 bool setBackgroundColor = false) {
61 if (layer) {
62 sp<GraphicBuffer> buffer;
63 sp<Fence> fence;
64 if (setBuffer) {
65 int err = getBuffer(&buffer, &fence);
66 if (err != NO_ERROR) {
67 return err;
68 }
69
chaviwba4320c2021-09-15 15:20:53 -050070 transaction.setBuffer(layer, buffer, fence);
Valerie Hau9cfc6d82019-09-23 13:54:07 -070071 }
72
73 if (setBackgroundColor) {
74 transaction.setBackgroundColor(layer, /*color*/ half3(1.0f, 0, 0), /*alpha*/ 1.0f,
75 ui::Dataspace::UNKNOWN);
76 }
77 }
78
79 transaction.addTransactionCompletedCallback(callbackHelper->function,
80 callbackHelper->getContext());
81 return NO_ERROR;
82 }
83
84 static void waitForCallback(CallbackHelper& helper, const ExpectedResult& expectedResult,
85 bool finalState = false) {
86 CallbackData callbackData;
87 ASSERT_NO_FATAL_FAILURE(helper.getCallbackData(&callbackData));
88 EXPECT_NO_FATAL_FAILURE(expectedResult.verifyCallbackData(callbackData));
89
90 if (finalState) {
91 ASSERT_NO_FATAL_FAILURE(helper.verifyFinalState());
92 }
93 }
94
95 static void waitForCallbacks(CallbackHelper& helper,
96 const std::vector<ExpectedResult>& expectedResults,
97 bool finalState = false) {
98 for (const auto& expectedResult : expectedResults) {
99 waitForCallback(helper, expectedResult);
100 }
101 if (finalState) {
102 ASSERT_NO_FATAL_FAILURE(helper.verifyFinalState());
103 }
104 }
Ady Abraham29d16cb2021-03-08 13:19:21 -0800105
chaviw6b9ffea2021-11-08 09:25:48 -0600106 static void waitForCommitCallback(
107 CallbackHelper& helper,
108 const std::unordered_set<sp<SurfaceControl>, SCHash>& committedSc) {
109 CallbackData callbackData;
110 ASSERT_NO_FATAL_FAILURE(helper.getCallbackData(&callbackData));
111
112 const auto& surfaceControlStats = callbackData.surfaceControlStats;
113
114 ASSERT_EQ(surfaceControlStats.size(), committedSc.size()) << "wrong number of surfaces";
115
116 for (const auto& stats : surfaceControlStats) {
117 ASSERT_NE(stats.surfaceControl, nullptr) << "returned null surface control";
118
119 const auto& expectedSc = committedSc.find(stats.surfaceControl);
120 ASSERT_NE(expectedSc, committedSc.end()) << "unexpected surface control";
121 }
122 }
123
Ady Abraham29d16cb2021-03-08 13:19:21 -0800124 DisplayEventReceiver mDisplayEventReceiver;
125 int mEpollFd;
126
127 struct Vsync {
128 int64_t vsyncId = FrameTimelineInfo::INVALID_VSYNC_ID;
129 nsecs_t expectedPresentTime = std::numeric_limits<nsecs_t>::max();
130 };
131
132 Vsync waitForNextVsync() {
133 mDisplayEventReceiver.requestNextVsync();
134 epoll_event epollEvent;
135 Vsync vsync;
136 EXPECT_EQ(1, epoll_wait(mEpollFd, &epollEvent, 1, 1000))
137 << "Timeout waiting for vsync event";
138 DisplayEventReceiver::Event event;
139 while (mDisplayEventReceiver.getEvents(&event, 1) > 0) {
140 if (event.header.type != DisplayEventReceiver::DISPLAY_EVENT_VSYNC) {
141 continue;
142 }
143
Rachel Leeb9c5a772022-02-04 21:17:37 -0800144 vsync = {event.vsync.vsyncData.preferredVsyncId(),
145 event.vsync.vsyncData.preferredExpectedPresentationTime()};
Ady Abraham29d16cb2021-03-08 13:19:21 -0800146 }
147
148 EXPECT_GE(vsync.vsyncId, 1);
Rachel Leeb9c5a772022-02-04 21:17:37 -0800149 EXPECT_GT(vsync.expectedPresentTime, systemTime());
Ady Abraham29d16cb2021-03-08 13:19:21 -0800150
151 return vsync;
152 }
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700153};
154
155TEST_F(LayerCallbackTest, BufferColor) {
156 sp<SurfaceControl> layer;
157 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
158
159 Transaction transaction;
160 CallbackHelper callback;
161 int err = fillTransaction(transaction, &callback, layer, true, true);
162 if (err) {
163 GTEST_SUCCEED() << "test not supported";
164 return;
165 }
166
167 transaction.apply();
168
169 ExpectedResult expected;
170 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
171 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
172}
173
174TEST_F(LayerCallbackTest, NoBufferNoColor) {
175 sp<SurfaceControl> layer;
176 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
177
178 Transaction transaction;
179 CallbackHelper callback;
180 int err = fillTransaction(transaction, &callback, layer, false, false);
181 if (err) {
182 GTEST_SUCCEED() << "test not supported";
183 return;
184 }
185
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000186 ui::Size bufferSize = getBufferSize();
187 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
188 Rect(0, 0, 32, 32));
189 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700190
191 ExpectedResult expected;
192 expected.addSurface(ExpectedResult::Transaction::NOT_PRESENTED, layer,
193 ExpectedResult::Buffer::NOT_ACQUIRED);
194 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
195}
196
197TEST_F(LayerCallbackTest, BufferNoColor) {
198 sp<SurfaceControl> layer;
199 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
200
201 Transaction transaction;
202 CallbackHelper callback;
203 int err = fillTransaction(transaction, &callback, layer, true, false);
204 if (err) {
205 GTEST_SUCCEED() << "test not supported";
206 return;
207 }
208
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000209 ui::Size bufferSize = getBufferSize();
210 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
211 Rect(0, 0, 32, 32));
212 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700213
214 ExpectedResult expected;
215 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
216 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
217}
218
219TEST_F(LayerCallbackTest, NoBufferColor) {
220 sp<SurfaceControl> layer;
221 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
222
223 Transaction transaction;
224 CallbackHelper callback;
225 int err = fillTransaction(transaction, &callback, layer, false, true);
226 if (err) {
227 GTEST_SUCCEED() << "test not supported";
228 return;
229 }
230
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000231 ui::Size bufferSize = getBufferSize();
232 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
233 Rect(0, 0, 32, 32));
234 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700235
236 ExpectedResult expected;
237 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
238 ExpectedResult::Buffer::NOT_ACQUIRED);
239 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
240}
241
242TEST_F(LayerCallbackTest, NoStateChange) {
243 Transaction transaction;
244 CallbackHelper callback;
245 int err = fillTransaction(transaction, &callback);
246 if (err) {
247 GTEST_SUCCEED() << "test not supported";
248 return;
249 }
250
251 transaction.apply();
252
253 ExpectedResult expected;
254 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
255}
256
257TEST_F(LayerCallbackTest, OffScreen) {
258 sp<SurfaceControl> layer;
259 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
260
261 Transaction transaction;
262 CallbackHelper callback;
263 int err = fillTransaction(transaction, &callback, layer);
264 if (err) {
265 GTEST_SUCCEED() << "test not supported";
266 return;
267 }
268
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000269 ui::Size bufferSize = getBufferSize();
270 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
271 Rect(-100, -100, 100, 100));
272 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700273
274 ExpectedResult expected;
275 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
276 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
277}
278
279TEST_F(LayerCallbackTest, MergeBufferNoColor) {
280 sp<SurfaceControl> layer1, layer2;
281 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
282 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
283
284 Transaction transaction1, transaction2;
285 CallbackHelper callback1, callback2;
286 int err = fillTransaction(transaction1, &callback1, layer1);
287 if (err) {
288 GTEST_SUCCEED() << "test not supported";
289 return;
290 }
291 err = fillTransaction(transaction2, &callback2, layer2);
292 if (err) {
293 GTEST_SUCCEED() << "test not supported";
294 return;
295 }
296
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000297 ui::Size bufferSize = getBufferSize();
298
299 TransactionUtils::setFrame(transaction1, layer1,
300 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
301 TransactionUtils::setFrame(transaction2, layer2,
302 Rect(0, 0, bufferSize.width, bufferSize.height),
303 Rect(32, 32, 64, 64));
304
305 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700306
307 ExpectedResult expected;
308 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
309 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
310 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
311}
312
313TEST_F(LayerCallbackTest, MergeNoBufferColor) {
314 sp<SurfaceControl> layer1, layer2;
315 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
316 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
317
318 Transaction transaction1, transaction2;
319 CallbackHelper callback1, callback2;
320 int err = fillTransaction(transaction1, &callback1, layer1, false, true);
321 if (err) {
322 GTEST_SUCCEED() << "test not supported";
323 return;
324 }
325 err = fillTransaction(transaction2, &callback2, layer2, false, true);
326 if (err) {
327 GTEST_SUCCEED() << "test not supported";
328 return;
329 }
330
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000331 ui::Size bufferSize = getBufferSize();
332
333 TransactionUtils::setFrame(transaction1, layer1,
334 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
335 TransactionUtils::setFrame(transaction2, layer2,
336 Rect(0, 0, bufferSize.width, bufferSize.height),
337 Rect(32, 32, 64, 64));
338
339 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700340
341 ExpectedResult expected;
342 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2},
343 ExpectedResult::Buffer::NOT_ACQUIRED);
344 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
345 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
346}
347
348TEST_F(LayerCallbackTest, MergeOneBufferOneColor) {
349 sp<SurfaceControl> layer1, layer2;
350 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
351 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
352
353 Transaction transaction1, transaction2;
354 CallbackHelper callback1, callback2;
355 int err = fillTransaction(transaction1, &callback1, layer1);
356 if (err) {
357 GTEST_SUCCEED() << "test not supported";
358 return;
359 }
360 err = fillTransaction(transaction2, &callback2, layer2, false, true);
361 if (err) {
362 GTEST_SUCCEED() << "test not supported";
363 return;
364 }
365
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000366 ui::Size bufferSize = getBufferSize();
367
368 TransactionUtils::setFrame(transaction1, layer1,
369 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
370 TransactionUtils::setFrame(transaction2, layer2,
371 Rect(0, 0, bufferSize.width, bufferSize.height),
372 Rect(32, 32, 64, 64));
373
374 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700375
376 ExpectedResult expected;
377 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer1);
378 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer2,
379 ExpectedResult::Buffer::NOT_ACQUIRED);
380 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
381 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
382}
383TEST_F(LayerCallbackTest, Merge_SameCallback) {
384 sp<SurfaceControl> layer1, layer2;
385 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
386 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
387
388 Transaction transaction1, transaction2;
389 CallbackHelper callback;
390 int err = fillTransaction(transaction1, &callback, layer1);
391 if (err) {
392 GTEST_SUCCEED() << "test not supported";
393 return;
394 }
395 err = fillTransaction(transaction2, &callback, layer2);
396 if (err) {
397 GTEST_SUCCEED() << "test not supported";
398 return;
399 }
400
401 transaction2.merge(std::move(transaction1)).apply();
402
403 ExpectedResult expected;
404 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
405 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected));
406 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
407}
408
409TEST_F(LayerCallbackTest, Merge_SameLayer) {
410 sp<SurfaceControl> layer;
411 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
412
413 Transaction transaction1, transaction2;
414 CallbackHelper callback1, callback2;
415 int err = fillTransaction(transaction1, &callback1, layer);
416 if (err) {
417 GTEST_SUCCEED() << "test not supported";
418 return;
419 }
420 err = fillTransaction(transaction2, &callback2, layer);
421 if (err) {
422 GTEST_SUCCEED() << "test not supported";
423 return;
424 }
425
426 transaction2.merge(std::move(transaction1)).apply();
427
428 ExpectedResult expected;
429 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
430 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
431 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
432}
433
434TEST_F(LayerCallbackTest, Merge_DifferentClients) {
435 sp<SurfaceComposerClient> client1(new SurfaceComposerClient),
436 client2(new SurfaceComposerClient);
437
438 ASSERT_EQ(NO_ERROR, client1->initCheck()) << "failed to create SurfaceComposerClient";
439 ASSERT_EQ(NO_ERROR, client2->initCheck()) << "failed to create SurfaceComposerClient";
440
441 sp<SurfaceControl> layer1, layer2;
442 ASSERT_NO_FATAL_FAILURE(layer1 = createLayer(client1, "test", 0, 0,
443 ISurfaceComposerClient::eFXSurfaceBufferState));
444 ASSERT_NO_FATAL_FAILURE(layer2 = createLayer(client2, "test", 0, 0,
445 ISurfaceComposerClient::eFXSurfaceBufferState));
446
447 Transaction transaction1, transaction2;
448 CallbackHelper callback1, callback2;
449 int err = fillTransaction(transaction1, &callback1, layer1);
450 if (err) {
451 GTEST_SUCCEED() << "test not supported";
452 return;
453 }
454 err = fillTransaction(transaction2, &callback2, layer2);
455 if (err) {
456 GTEST_SUCCEED() << "test not supported";
457 return;
458 }
459
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000460 ui::Size bufferSize = getBufferSize();
461
462 TransactionUtils::setFrame(transaction1, layer1,
463 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
464 TransactionUtils::setFrame(transaction2, layer2,
465 Rect(0, 0, bufferSize.width, bufferSize.height),
466 Rect(32, 32, 64, 64));
467
468 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700469
470 ExpectedResult expected;
471 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
472 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
473 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
474}
475
476TEST_F(LayerCallbackTest, MultipleTransactions) {
477 sp<SurfaceControl> layer;
478 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
479
480 Transaction transaction;
481 CallbackHelper callback;
482 for (size_t i = 0; i < 10; i++) {
483 int err = fillTransaction(transaction, &callback, layer);
484 if (err) {
485 GTEST_SUCCEED() << "test not supported";
486 return;
487 }
488
489 transaction.apply();
490
491 ExpectedResult expected;
492 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
493 ExpectedResult::Buffer::ACQUIRED,
494 (i == 0) ? ExpectedResult::PreviousBuffer::NOT_RELEASED
495 : ExpectedResult::PreviousBuffer::RELEASED);
496 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected));
497 }
498 ASSERT_NO_FATAL_FAILURE(callback.verifyFinalState());
499}
500
501TEST_F(LayerCallbackTest, MultipleTransactions_NoStateChange) {
502 sp<SurfaceControl> layer;
503 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
504
505 Transaction transaction;
506 CallbackHelper callback;
507 for (size_t i = 0; i < 10; i++) {
508 ExpectedResult expected;
509
510 if (i == 0) {
511 int err = fillTransaction(transaction, &callback, layer);
512 if (err) {
513 GTEST_SUCCEED() << "test not supported";
514 return;
515 }
516 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
517 } else {
518 int err = fillTransaction(transaction, &callback);
519 if (err) {
520 GTEST_SUCCEED() << "test not supported";
521 return;
522 }
523 }
524
525 transaction.apply();
526
527 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected));
528 }
529 ASSERT_NO_FATAL_FAILURE(callback.verifyFinalState());
530}
531
532TEST_F(LayerCallbackTest, MultipleTransactions_SameStateChange) {
533 sp<SurfaceControl> layer;
534 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
535
536 Transaction transaction;
537 CallbackHelper callback;
538 for (size_t i = 0; i < 10; i++) {
539 if (i == 0) {
540 int err = fillTransaction(transaction, &callback, layer);
541 if (err) {
542 GTEST_SUCCEED() << "test not supported";
543 return;
544 }
545 } else {
546 int err = fillTransaction(transaction, &callback);
547 if (err) {
548 GTEST_SUCCEED() << "test not supported";
549 return;
550 }
551 }
552
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000553 ui::Size bufferSize = getBufferSize();
554 TransactionUtils::setFrame(transaction, layer,
555 Rect(0, 0, bufferSize.width, bufferSize.height),
556 Rect(0, 0, 32, 32));
557 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700558
559 ExpectedResult expected;
560 expected.addSurface((i == 0) ? ExpectedResult::Transaction::PRESENTED
561 : ExpectedResult::Transaction::NOT_PRESENTED,
562 layer,
563 (i == 0) ? ExpectedResult::Buffer::ACQUIRED
564 : ExpectedResult::Buffer::NOT_ACQUIRED);
565 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, i == 0));
566 }
567 ASSERT_NO_FATAL_FAILURE(callback.verifyFinalState());
568}
569
570TEST_F(LayerCallbackTest, MultipleTransactions_Merge) {
571 sp<SurfaceControl> layer1, layer2;
572 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
573 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
574
575 Transaction transaction1, transaction2;
576 CallbackHelper callback1, callback2;
577 for (size_t i = 0; i < 10; i++) {
578 int err = fillTransaction(transaction1, &callback1, layer1);
579 if (err) {
580 GTEST_SUCCEED() << "test not supported";
581 return;
582 }
583 err = fillTransaction(transaction2, &callback2, layer2);
584 if (err) {
585 GTEST_SUCCEED() << "test not supported";
586 return;
587 }
588
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000589 ui::Size bufferSize = getBufferSize();
590
591 TransactionUtils::setFrame(transaction1, layer1,
592 Rect(0, 0, bufferSize.width, bufferSize.height),
593 Rect(0, 0, 32, 32));
594 TransactionUtils::setFrame(transaction2, layer2,
595 Rect(0, 0, bufferSize.width, bufferSize.height),
596 Rect(32, 32, 64, 64));
597
598 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700599
600 ExpectedResult expected;
601 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2},
602 ExpectedResult::Buffer::ACQUIRED,
603 (i == 0) ? ExpectedResult::PreviousBuffer::NOT_RELEASED
604 : ExpectedResult::PreviousBuffer::RELEASED);
605 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected));
606 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected));
607 }
608 ASSERT_NO_FATAL_FAILURE(callback1.verifyFinalState());
609 ASSERT_NO_FATAL_FAILURE(callback2.verifyFinalState());
610}
611
612TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients) {
613 sp<SurfaceComposerClient> client1(new SurfaceComposerClient),
614 client2(new SurfaceComposerClient);
615 ASSERT_EQ(NO_ERROR, client1->initCheck()) << "failed to create SurfaceComposerClient";
616 ASSERT_EQ(NO_ERROR, client2->initCheck()) << "failed to create SurfaceComposerClient";
617
618 sp<SurfaceControl> layer1, layer2;
619 ASSERT_NO_FATAL_FAILURE(layer1 = createLayer(client1, "test", 0, 0,
620 ISurfaceComposerClient::eFXSurfaceBufferState));
621 ASSERT_NO_FATAL_FAILURE(layer2 = createLayer(client2, "test", 0, 0,
622 ISurfaceComposerClient::eFXSurfaceBufferState));
623
624 Transaction transaction1, transaction2;
625 CallbackHelper callback1, callback2;
626 for (size_t i = 0; i < 10; i++) {
627 int err = fillTransaction(transaction1, &callback1, layer1);
628 if (err) {
629 GTEST_SUCCEED() << "test not supported";
630 return;
631 }
632 err = fillTransaction(transaction2, &callback2, layer2);
633 if (err) {
634 GTEST_SUCCEED() << "test not supported";
635 return;
636 }
637
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000638 ui::Size bufferSize = getBufferSize();
639
640 TransactionUtils::setFrame(transaction1, layer1,
641 Rect(0, 0, bufferSize.width, bufferSize.height),
642 Rect(0, 0, 32, 32));
643 TransactionUtils::setFrame(transaction2, layer2,
644 Rect(0, 0, bufferSize.width, bufferSize.height),
645 Rect(32, 32, 64, 64));
646
647 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700648
649 ExpectedResult expected;
650 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2},
651 ExpectedResult::Buffer::ACQUIRED,
652 (i == 0) ? ExpectedResult::PreviousBuffer::NOT_RELEASED
653 : ExpectedResult::PreviousBuffer::RELEASED);
654 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected));
655 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected));
656 }
657 ASSERT_NO_FATAL_FAILURE(callback1.verifyFinalState());
658 ASSERT_NO_FATAL_FAILURE(callback2.verifyFinalState());
659}
660
661TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients_NoStateChange) {
662 sp<SurfaceComposerClient> client1(new SurfaceComposerClient),
663 client2(new SurfaceComposerClient);
664 ASSERT_EQ(NO_ERROR, client1->initCheck()) << "failed to create SurfaceComposerClient";
665 ASSERT_EQ(NO_ERROR, client2->initCheck()) << "failed to create SurfaceComposerClient";
666
667 sp<SurfaceControl> layer1, layer2;
668 ASSERT_NO_FATAL_FAILURE(layer1 = createLayer(client1, "test", 0, 0,
669 ISurfaceComposerClient::eFXSurfaceBufferState));
670 ASSERT_NO_FATAL_FAILURE(layer2 = createLayer(client2, "test", 0, 0,
671 ISurfaceComposerClient::eFXSurfaceBufferState));
672
673 Transaction transaction1, transaction2;
674 CallbackHelper callback1, callback2;
675
676 // Normal call to set up test
677 int err = fillTransaction(transaction1, &callback1, layer1);
678 if (err) {
679 GTEST_SUCCEED() << "test not supported";
680 return;
681 }
682 err = fillTransaction(transaction2, &callback2, layer2);
683 if (err) {
684 GTEST_SUCCEED() << "test not supported";
685 return;
686 }
687
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000688 ui::Size bufferSize = getBufferSize();
689
690 TransactionUtils::setFrame(transaction1, layer1,
691 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
692 TransactionUtils::setFrame(transaction2, layer2,
693 Rect(0, 0, bufferSize.width, bufferSize.height),
694 Rect(32, 32, 64, 64));
695
696 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700697
698 ExpectedResult expected;
699 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
700 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
701 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
702 expected.reset();
703
704 // Test
705 err = fillTransaction(transaction1, &callback1);
706 if (err) {
707 GTEST_SUCCEED() << "test not supported";
708 return;
709 }
710 err = fillTransaction(transaction2, &callback2);
711 if (err) {
712 GTEST_SUCCEED() << "test not supported";
713 return;
714 }
715
716 transaction2.merge(std::move(transaction1)).apply();
717
718 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
719 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
720}
721
722TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients_SameStateChange) {
723 sp<SurfaceComposerClient> client1(new SurfaceComposerClient),
724 client2(new SurfaceComposerClient);
725
726 ASSERT_EQ(NO_ERROR, client1->initCheck()) << "failed to create SurfaceComposerClient";
727 ASSERT_EQ(NO_ERROR, client2->initCheck()) << "failed to create SurfaceComposerClient";
728
729 sp<SurfaceControl> layer1, layer2;
730 ASSERT_NO_FATAL_FAILURE(layer1 = createLayer(client1, "test", 0, 0,
731 ISurfaceComposerClient::eFXSurfaceBufferState));
732 ASSERT_NO_FATAL_FAILURE(layer2 = createLayer(client2, "test", 0, 0,
733 ISurfaceComposerClient::eFXSurfaceBufferState));
734
735 Transaction transaction1, transaction2;
736 CallbackHelper callback1, callback2;
737
738 // Normal call to set up test
739 int err = fillTransaction(transaction1, &callback1, layer1);
740 if (err) {
741 GTEST_SUCCEED() << "test not supported";
742 return;
743 }
744 err = fillTransaction(transaction2, &callback2, layer2);
745 if (err) {
746 GTEST_SUCCEED() << "test not supported";
747 return;
748 }
749
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000750 ui::Size bufferSize = getBufferSize();
751
752 TransactionUtils::setFrame(transaction1, layer1,
753 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
754 TransactionUtils::setFrame(transaction2, layer2,
755 Rect(0, 0, bufferSize.width, bufferSize.height),
756 Rect(32, 32, 64, 64));
757
758 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700759
760 ExpectedResult expected;
761 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
762 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
763 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
764 expected.reset();
765
766 // Test
767 err = fillTransaction(transaction1, &callback1);
768 if (err) {
769 GTEST_SUCCEED() << "test not supported";
770 return;
771 }
772 err = fillTransaction(transaction2, &callback2);
773 if (err) {
774 GTEST_SUCCEED() << "test not supported";
775 return;
776 }
777
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000778 TransactionUtils::setFrame(transaction2, layer2,
779 Rect(0, 0, bufferSize.width, bufferSize.height),
780 Rect(32, 32, 64, 64));
781 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700782
783 expected.addSurface(ExpectedResult::Transaction::NOT_PRESENTED, layer2,
784 ExpectedResult::Buffer::NOT_ACQUIRED);
785 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
786 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
787}
788
John Reck97c78912021-04-27 14:04:37 -0400789// TODO (b/183181768): Fix & re-enable
790TEST_F(LayerCallbackTest, DISABLED_MultipleTransactions_SingleFrame) {
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700791 sp<SurfaceControl> layer;
792 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
793
794 Transaction transaction;
795 CallbackHelper callback;
796 std::vector<ExpectedResult> expectedResults(50);
797 for (auto& expected : expectedResults) {
798 expected.reset();
799 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
800 ExpectedResult::Buffer::ACQUIRED,
801 ExpectedResult::PreviousBuffer::UNKNOWN);
802
803 int err = fillTransaction(transaction, &callback, layer);
804 if (err) {
805 GTEST_SUCCEED() << "test not supported";
806 return;
807 }
808
809 transaction.apply();
810 }
811 EXPECT_NO_FATAL_FAILURE(waitForCallbacks(callback, expectedResults, true));
812}
813
814TEST_F(LayerCallbackTest, MultipleTransactions_SingleFrame_NoStateChange) {
815 sp<SurfaceControl> layer;
816 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
817
818 // Normal call to set up test
819 Transaction transaction;
820 CallbackHelper callback;
821 int err = fillTransaction(transaction, &callback, layer);
822 if (err) {
823 GTEST_SUCCEED() << "test not supported";
824 return;
825 }
826
827 transaction.apply();
828
829 ExpectedResult expected;
830 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
831 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
832
833 // Test
834 std::vector<ExpectedResult> expectedResults(50);
835 for (auto& expected : expectedResults) {
836 expected.reset();
837
838 err = fillTransaction(transaction, &callback);
839 if (err) {
840 GTEST_SUCCEED() << "test not supported";
841 return;
842 }
843
844 transaction.apply();
845 }
846 EXPECT_NO_FATAL_FAILURE(waitForCallbacks(callback, expectedResults, true));
847}
848
849TEST_F(LayerCallbackTest, MultipleTransactions_SingleFrame_SameStateChange) {
850 sp<SurfaceControl> layer;
851 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
852
853 // Normal call to set up test
854 Transaction transaction;
855 CallbackHelper callback;
856 int err = fillTransaction(transaction, &callback, layer);
857 if (err) {
858 GTEST_SUCCEED() << "test not supported";
859 return;
860 }
861
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000862 ui::Size bufferSize = getBufferSize();
863 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
864 Rect(0, 0, 32, 32));
865 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700866
867 ExpectedResult expectedResult;
868 expectedResult.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
869 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expectedResult, true));
870
871 // Test
872 std::vector<ExpectedResult> expectedResults(50);
873 for (auto& expected : expectedResults) {
874 expected.reset();
875 expected.addSurface(ExpectedResult::Transaction::NOT_PRESENTED, layer,
876 ExpectedResult::Buffer::NOT_ACQUIRED);
877
878 err = fillTransaction(transaction, &callback);
879 if (err) {
880 GTEST_SUCCEED() << "test not supported";
881 return;
882 }
883
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000884 TransactionUtils::setFrame(transaction, layer,
885 Rect(0, 0, bufferSize.width, bufferSize.height),
886 Rect(0, 0, 32, 32));
887 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700888 }
889 EXPECT_NO_FATAL_FAILURE(waitForCallbacks(callback, expectedResults, true));
890}
891
892TEST_F(LayerCallbackTest, DesiredPresentTime) {
893 sp<SurfaceControl> layer;
894 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
895
896 Transaction transaction;
897 CallbackHelper callback;
898 int err = fillTransaction(transaction, &callback, layer);
899 if (err) {
900 GTEST_SUCCEED() << "test not supported";
901 return;
902 }
903
904 // Try to present 100ms in the future
Vishnu Nair1506b182021-02-22 14:35:15 -0800905 nsecs_t time = systemTime() + std::chrono::nanoseconds(100ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700906
907 transaction.setDesiredPresentTime(time);
908 transaction.apply();
909
910 ExpectedResult expected;
911 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
912 expected.addExpectedPresentTime(time);
913 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
914}
915
916TEST_F(LayerCallbackTest, DesiredPresentTime_Multiple) {
917 sp<SurfaceControl> layer;
918 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
919
920 Transaction transaction;
921 CallbackHelper callback1;
922 int err = fillTransaction(transaction, &callback1, layer);
923 if (err) {
924 GTEST_SUCCEED() << "test not supported";
925 return;
926 }
927
928 // Try to present 100ms in the future
Vishnu Nair1506b182021-02-22 14:35:15 -0800929 nsecs_t time = systemTime() + std::chrono::nanoseconds(100ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700930
931 transaction.setDesiredPresentTime(time);
932 transaction.apply();
933
934 ExpectedResult expected1;
935 expected1.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
936 expected1.addExpectedPresentTime(time);
937
938 CallbackHelper callback2;
939 err = fillTransaction(transaction, &callback2, layer);
940 if (err) {
941 GTEST_SUCCEED() << "test not supported";
942 return;
943 }
944
945 // Try to present 33ms after the first frame
Vishnu Nair1506b182021-02-22 14:35:15 -0800946 time += std::chrono::nanoseconds(33ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700947
948 transaction.setDesiredPresentTime(time);
949 transaction.apply();
950
951 ExpectedResult expected2;
952 expected2.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
953 ExpectedResult::Buffer::ACQUIRED,
954 ExpectedResult::PreviousBuffer::RELEASED);
955 expected2.addExpectedPresentTime(time);
956
957 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected1, true));
958 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected2, true));
959}
960
John Reck97c78912021-04-27 14:04:37 -0400961// TODO (b/183181768): Fix & re-enable
962TEST_F(LayerCallbackTest, DISABLED_DesiredPresentTime_OutOfOrder) {
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700963 sp<SurfaceControl> layer;
964 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
965
966 Transaction transaction;
967 CallbackHelper callback1;
968 int err = fillTransaction(transaction, &callback1, layer);
969 if (err) {
970 GTEST_SUCCEED() << "test not supported";
971 return;
972 }
973
974 // Try to present 100ms in the future
Vishnu Nair1506b182021-02-22 14:35:15 -0800975 nsecs_t time = systemTime() + std::chrono::nanoseconds(100ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700976
977 transaction.setDesiredPresentTime(time);
978 transaction.apply();
979
980 ExpectedResult expected1;
981 expected1.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
982 expected1.addExpectedPresentTime(time);
983
984 CallbackHelper callback2;
985 err = fillTransaction(transaction, &callback2, layer);
986 if (err) {
987 GTEST_SUCCEED() << "test not supported";
988 return;
989 }
990
991 // Try to present 33ms before the previous frame
Vishnu Nair1506b182021-02-22 14:35:15 -0800992 time -= std::chrono::nanoseconds(33ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700993
994 transaction.setDesiredPresentTime(time);
995 transaction.apply();
996
997 ExpectedResult expected2;
998 expected2.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
999 ExpectedResult::Buffer::ACQUIRED,
1000 ExpectedResult::PreviousBuffer::RELEASED);
1001
1002 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected1, true));
1003 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected2, true));
1004}
1005
1006TEST_F(LayerCallbackTest, DesiredPresentTime_Past) {
1007 sp<SurfaceControl> layer;
1008 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
1009
1010 Transaction transaction;
1011 CallbackHelper callback;
1012 int err = fillTransaction(transaction, &callback, layer);
1013 if (err) {
1014 GTEST_SUCCEED() << "test not supported";
1015 return;
1016 }
1017
1018 // Try to present 100ms in the past
Vishnu Nair1506b182021-02-22 14:35:15 -08001019 nsecs_t time = systemTime() - std::chrono::nanoseconds(100ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -07001020
1021 transaction.setDesiredPresentTime(time);
1022 transaction.apply();
1023
1024 ExpectedResult expected;
1025 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
1026 expected.addExpectedPresentTime(systemTime());
1027 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
1028}
Ady Abraham29d16cb2021-03-08 13:19:21 -08001029
1030TEST_F(LayerCallbackTest, ExpectedPresentTime) {
1031 sp<SurfaceControl> layer;
1032 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
1033
1034 Transaction transaction;
1035 CallbackHelper callback;
1036 int err = fillTransaction(transaction, &callback, layer);
1037 if (err) {
1038 GTEST_SUCCEED() << "test not supported";
1039 return;
1040 }
1041
1042 const Vsync vsync = waitForNextVsync();
1043 transaction.setFrameTimelineInfo({vsync.vsyncId, 0});
1044 transaction.apply();
1045
1046 ExpectedResult expected;
1047 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
1048 expected.addExpectedPresentTimeForVsyncId(vsync.expectedPresentTime);
1049 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
1050}
1051
Vishnu Naircd52e2d2021-10-18 08:42:46 -07001052// b202394221
1053TEST_F(LayerCallbackTest, EmptyBufferStateChanges) {
1054 sp<SurfaceControl> bufferLayer, emptyBufferLayer;
1055 ASSERT_NO_FATAL_FAILURE(bufferLayer = createBufferStateLayer());
1056 ASSERT_NO_FATAL_FAILURE(emptyBufferLayer = createBufferStateLayer());
1057
1058 Transaction transaction;
1059 CallbackHelper callback;
1060 for (size_t i = 0; i < 10; i++) {
1061 int err = fillTransaction(transaction, &callback, bufferLayer);
1062 if (err) {
1063 GTEST_SUCCEED() << "test not supported";
1064 return;
1065 }
1066
1067 ui::Size bufferSize = getBufferSize();
1068
1069 TransactionUtils::setFrame(transaction, bufferLayer,
1070 Rect(0, 0, bufferSize.width, bufferSize.height),
1071 Rect(0, 0, 32, 32));
1072 transaction.setPosition(emptyBufferLayer, 1 + i, 2 + i);
1073 transaction.apply();
1074
1075 ExpectedResult expected;
1076 expected.addSurface(ExpectedResult::Transaction::PRESENTED, bufferLayer,
1077 ExpectedResult::Buffer::ACQUIRED,
1078 (i == 0) ? ExpectedResult::PreviousBuffer::NOT_RELEASED
1079 : ExpectedResult::PreviousBuffer::RELEASED);
1080 expected.addSurface(ExpectedResult::Transaction::PRESENTED, emptyBufferLayer,
1081 ExpectedResult::Buffer::NOT_ACQUIRED,
1082 ExpectedResult::PreviousBuffer::NOT_RELEASED);
1083
1084 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected));
1085 }
1086 ASSERT_NO_FATAL_FAILURE(callback.verifyFinalState());
1087}
1088
1089// b202394221
Jiakai Zhanga5505cb2021-11-09 11:46:30 +00001090TEST_F(LayerCallbackTest, DISABLED_NonBufferLayerStateChanges) {
Vishnu Naircd52e2d2021-10-18 08:42:46 -07001091 sp<SurfaceControl> layer;
1092 ASSERT_NO_FATAL_FAILURE(layer = createColorLayer("ColorLayer", Color::RED));
1093
1094 Transaction transaction;
1095 CallbackHelper callback;
1096 int err = fillTransaction(transaction, &callback);
1097 if (err) {
1098 GTEST_SUCCEED() << "test not supported";
1099 return;
1100 }
1101 transaction.setPosition(layer, 1, 2);
1102 transaction.apply();
1103
1104 ExpectedResult expected;
1105 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
1106}
1107
chaviw6b9ffea2021-11-08 09:25:48 -06001108TEST_F(LayerCallbackTest, CommitCallbackOffscreenLayer) {
1109 sp<SurfaceControl> layer;
1110 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
1111 sp<SurfaceControl> offscreenLayer =
1112 createSurface(mClient, "Offscreen Layer", 0, 0, PIXEL_FORMAT_RGBA_8888,
1113 ISurfaceComposerClient::eFXSurfaceBufferState, layer.get());
1114
1115 Transaction transaction;
1116 CallbackHelper callback;
1117 int err = fillTransaction(transaction, &callback, layer, true);
1118 err |= fillTransaction(transaction, &callback, offscreenLayer, true);
1119 if (err) {
1120 GTEST_SUCCEED() << "test not supported";
1121 return;
1122 }
1123
1124 transaction.reparent(offscreenLayer, nullptr)
1125 .addTransactionCommittedCallback(callback.function, callback.getContext());
1126 transaction.apply();
1127
1128 std::unordered_set<sp<SurfaceControl>, SCHash> committedSc;
1129 committedSc.insert(layer);
1130 committedSc.insert(offscreenLayer);
1131 EXPECT_NO_FATAL_FAILURE(waitForCommitCallback(callback, committedSc));
1132}
Valerie Hau9cfc6d82019-09-23 13:54:07 -07001133} // namespace android