blob: 91a5b528f895dfccbd2ef485eb46c7781a105849 [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;
29
30::testing::Environment* const binderEnv =
31 ::testing::AddGlobalTestEnvironment(new BinderEnvironment());
32
33class LayerCallbackTest : public LayerTransactionTest {
34public:
Ady Abraham29d16cb2021-03-08 13:19:21 -080035 void SetUp() override {
36 LayerTransactionTest::SetUp();
37
38 EXPECT_EQ(NO_ERROR, mDisplayEventReceiver.initCheck());
39
40 mEpollFd = epoll_create1(EPOLL_CLOEXEC);
41 EXPECT_GT(mEpollFd, 1);
42
43 epoll_event event;
44 event.events = EPOLLIN;
45 EXPECT_EQ(0, epoll_ctl(mEpollFd, EPOLL_CTL_ADD, mDisplayEventReceiver.getFd(), &event));
46 }
47
48 void TearDown() override {
49 close(mEpollFd);
50 LayerTransactionTest::TearDown();
51 }
52
Valerie Hau9cfc6d82019-09-23 13:54:07 -070053 virtual sp<SurfaceControl> createBufferStateLayer() {
54 return createLayer(mClient, "test", 0, 0, ISurfaceComposerClient::eFXSurfaceBufferState);
55 }
56
57 static int fillTransaction(Transaction& transaction, CallbackHelper* callbackHelper,
58 const sp<SurfaceControl>& layer = nullptr, bool setBuffer = true,
59 bool setBackgroundColor = false) {
60 if (layer) {
61 sp<GraphicBuffer> buffer;
62 sp<Fence> fence;
63 if (setBuffer) {
64 int err = getBuffer(&buffer, &fence);
65 if (err != NO_ERROR) {
66 return err;
67 }
68
chaviwba4320c2021-09-15 15:20:53 -050069 transaction.setBuffer(layer, buffer, fence);
Valerie Hau9cfc6d82019-09-23 13:54:07 -070070 }
71
72 if (setBackgroundColor) {
73 transaction.setBackgroundColor(layer, /*color*/ half3(1.0f, 0, 0), /*alpha*/ 1.0f,
74 ui::Dataspace::UNKNOWN);
75 }
76 }
77
78 transaction.addTransactionCompletedCallback(callbackHelper->function,
79 callbackHelper->getContext());
80 return NO_ERROR;
81 }
82
83 static void waitForCallback(CallbackHelper& helper, const ExpectedResult& expectedResult,
84 bool finalState = false) {
85 CallbackData callbackData;
86 ASSERT_NO_FATAL_FAILURE(helper.getCallbackData(&callbackData));
87 EXPECT_NO_FATAL_FAILURE(expectedResult.verifyCallbackData(callbackData));
88
89 if (finalState) {
90 ASSERT_NO_FATAL_FAILURE(helper.verifyFinalState());
91 }
92 }
93
94 static void waitForCallbacks(CallbackHelper& helper,
95 const std::vector<ExpectedResult>& expectedResults,
96 bool finalState = false) {
97 for (const auto& expectedResult : expectedResults) {
98 waitForCallback(helper, expectedResult);
99 }
100 if (finalState) {
101 ASSERT_NO_FATAL_FAILURE(helper.verifyFinalState());
102 }
103 }
Ady Abraham29d16cb2021-03-08 13:19:21 -0800104
105 DisplayEventReceiver mDisplayEventReceiver;
106 int mEpollFd;
107
108 struct Vsync {
109 int64_t vsyncId = FrameTimelineInfo::INVALID_VSYNC_ID;
110 nsecs_t expectedPresentTime = std::numeric_limits<nsecs_t>::max();
111 };
112
113 Vsync waitForNextVsync() {
114 mDisplayEventReceiver.requestNextVsync();
115 epoll_event epollEvent;
116 Vsync vsync;
117 EXPECT_EQ(1, epoll_wait(mEpollFd, &epollEvent, 1, 1000))
118 << "Timeout waiting for vsync event";
119 DisplayEventReceiver::Event event;
120 while (mDisplayEventReceiver.getEvents(&event, 1) > 0) {
121 if (event.header.type != DisplayEventReceiver::DISPLAY_EVENT_VSYNC) {
122 continue;
123 }
124
125 vsync = {event.vsync.vsyncId, event.vsync.expectedVSyncTimestamp};
126 }
127
128 EXPECT_GE(vsync.vsyncId, 1);
129 EXPECT_GT(event.vsync.expectedVSyncTimestamp, systemTime());
130
131 return vsync;
132 }
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700133};
134
135TEST_F(LayerCallbackTest, BufferColor) {
136 sp<SurfaceControl> layer;
137 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
138
139 Transaction transaction;
140 CallbackHelper callback;
141 int err = fillTransaction(transaction, &callback, layer, true, true);
142 if (err) {
143 GTEST_SUCCEED() << "test not supported";
144 return;
145 }
146
147 transaction.apply();
148
149 ExpectedResult expected;
150 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
151 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
152}
153
154TEST_F(LayerCallbackTest, NoBufferNoColor) {
155 sp<SurfaceControl> layer;
156 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
157
158 Transaction transaction;
159 CallbackHelper callback;
160 int err = fillTransaction(transaction, &callback, layer, false, false);
161 if (err) {
162 GTEST_SUCCEED() << "test not supported";
163 return;
164 }
165
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000166 ui::Size bufferSize = getBufferSize();
167 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
168 Rect(0, 0, 32, 32));
169 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700170
171 ExpectedResult expected;
172 expected.addSurface(ExpectedResult::Transaction::NOT_PRESENTED, layer,
173 ExpectedResult::Buffer::NOT_ACQUIRED);
174 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
175}
176
177TEST_F(LayerCallbackTest, BufferNoColor) {
178 sp<SurfaceControl> layer;
179 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
180
181 Transaction transaction;
182 CallbackHelper callback;
183 int err = fillTransaction(transaction, &callback, layer, true, false);
184 if (err) {
185 GTEST_SUCCEED() << "test not supported";
186 return;
187 }
188
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000189 ui::Size bufferSize = getBufferSize();
190 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
191 Rect(0, 0, 32, 32));
192 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700193
194 ExpectedResult expected;
195 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
196 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
197}
198
199TEST_F(LayerCallbackTest, NoBufferColor) {
200 sp<SurfaceControl> layer;
201 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
202
203 Transaction transaction;
204 CallbackHelper callback;
205 int err = fillTransaction(transaction, &callback, layer, false, true);
206 if (err) {
207 GTEST_SUCCEED() << "test not supported";
208 return;
209 }
210
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000211 ui::Size bufferSize = getBufferSize();
212 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
213 Rect(0, 0, 32, 32));
214 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700215
216 ExpectedResult expected;
217 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
218 ExpectedResult::Buffer::NOT_ACQUIRED);
219 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
220}
221
222TEST_F(LayerCallbackTest, NoStateChange) {
223 Transaction transaction;
224 CallbackHelper callback;
225 int err = fillTransaction(transaction, &callback);
226 if (err) {
227 GTEST_SUCCEED() << "test not supported";
228 return;
229 }
230
231 transaction.apply();
232
233 ExpectedResult expected;
234 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
235}
236
237TEST_F(LayerCallbackTest, OffScreen) {
238 sp<SurfaceControl> layer;
239 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
240
241 Transaction transaction;
242 CallbackHelper callback;
243 int err = fillTransaction(transaction, &callback, layer);
244 if (err) {
245 GTEST_SUCCEED() << "test not supported";
246 return;
247 }
248
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000249 ui::Size bufferSize = getBufferSize();
250 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
251 Rect(-100, -100, 100, 100));
252 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700253
254 ExpectedResult expected;
255 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
256 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
257}
258
259TEST_F(LayerCallbackTest, MergeBufferNoColor) {
260 sp<SurfaceControl> layer1, layer2;
261 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
262 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
263
264 Transaction transaction1, transaction2;
265 CallbackHelper callback1, callback2;
266 int err = fillTransaction(transaction1, &callback1, layer1);
267 if (err) {
268 GTEST_SUCCEED() << "test not supported";
269 return;
270 }
271 err = fillTransaction(transaction2, &callback2, layer2);
272 if (err) {
273 GTEST_SUCCEED() << "test not supported";
274 return;
275 }
276
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000277 ui::Size bufferSize = getBufferSize();
278
279 TransactionUtils::setFrame(transaction1, layer1,
280 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
281 TransactionUtils::setFrame(transaction2, layer2,
282 Rect(0, 0, bufferSize.width, bufferSize.height),
283 Rect(32, 32, 64, 64));
284
285 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700286
287 ExpectedResult expected;
288 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
289 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
290 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
291}
292
293TEST_F(LayerCallbackTest, MergeNoBufferColor) {
294 sp<SurfaceControl> layer1, layer2;
295 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
296 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
297
298 Transaction transaction1, transaction2;
299 CallbackHelper callback1, callback2;
300 int err = fillTransaction(transaction1, &callback1, layer1, false, true);
301 if (err) {
302 GTEST_SUCCEED() << "test not supported";
303 return;
304 }
305 err = fillTransaction(transaction2, &callback2, layer2, false, true);
306 if (err) {
307 GTEST_SUCCEED() << "test not supported";
308 return;
309 }
310
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000311 ui::Size bufferSize = getBufferSize();
312
313 TransactionUtils::setFrame(transaction1, layer1,
314 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
315 TransactionUtils::setFrame(transaction2, layer2,
316 Rect(0, 0, bufferSize.width, bufferSize.height),
317 Rect(32, 32, 64, 64));
318
319 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700320
321 ExpectedResult expected;
322 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2},
323 ExpectedResult::Buffer::NOT_ACQUIRED);
324 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
325 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
326}
327
328TEST_F(LayerCallbackTest, MergeOneBufferOneColor) {
329 sp<SurfaceControl> layer1, layer2;
330 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
331 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
332
333 Transaction transaction1, transaction2;
334 CallbackHelper callback1, callback2;
335 int err = fillTransaction(transaction1, &callback1, layer1);
336 if (err) {
337 GTEST_SUCCEED() << "test not supported";
338 return;
339 }
340 err = fillTransaction(transaction2, &callback2, layer2, false, true);
341 if (err) {
342 GTEST_SUCCEED() << "test not supported";
343 return;
344 }
345
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000346 ui::Size bufferSize = getBufferSize();
347
348 TransactionUtils::setFrame(transaction1, layer1,
349 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
350 TransactionUtils::setFrame(transaction2, layer2,
351 Rect(0, 0, bufferSize.width, bufferSize.height),
352 Rect(32, 32, 64, 64));
353
354 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700355
356 ExpectedResult expected;
357 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer1);
358 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer2,
359 ExpectedResult::Buffer::NOT_ACQUIRED);
360 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
361 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
362}
363TEST_F(LayerCallbackTest, Merge_SameCallback) {
364 sp<SurfaceControl> layer1, layer2;
365 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
366 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
367
368 Transaction transaction1, transaction2;
369 CallbackHelper callback;
370 int err = fillTransaction(transaction1, &callback, layer1);
371 if (err) {
372 GTEST_SUCCEED() << "test not supported";
373 return;
374 }
375 err = fillTransaction(transaction2, &callback, layer2);
376 if (err) {
377 GTEST_SUCCEED() << "test not supported";
378 return;
379 }
380
381 transaction2.merge(std::move(transaction1)).apply();
382
383 ExpectedResult expected;
384 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
385 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected));
386 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
387}
388
389TEST_F(LayerCallbackTest, Merge_SameLayer) {
390 sp<SurfaceControl> layer;
391 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
392
393 Transaction transaction1, transaction2;
394 CallbackHelper callback1, callback2;
395 int err = fillTransaction(transaction1, &callback1, layer);
396 if (err) {
397 GTEST_SUCCEED() << "test not supported";
398 return;
399 }
400 err = fillTransaction(transaction2, &callback2, layer);
401 if (err) {
402 GTEST_SUCCEED() << "test not supported";
403 return;
404 }
405
406 transaction2.merge(std::move(transaction1)).apply();
407
408 ExpectedResult expected;
409 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
410 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
411 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
412}
413
414TEST_F(LayerCallbackTest, Merge_DifferentClients) {
415 sp<SurfaceComposerClient> client1(new SurfaceComposerClient),
416 client2(new SurfaceComposerClient);
417
418 ASSERT_EQ(NO_ERROR, client1->initCheck()) << "failed to create SurfaceComposerClient";
419 ASSERT_EQ(NO_ERROR, client2->initCheck()) << "failed to create SurfaceComposerClient";
420
421 sp<SurfaceControl> layer1, layer2;
422 ASSERT_NO_FATAL_FAILURE(layer1 = createLayer(client1, "test", 0, 0,
423 ISurfaceComposerClient::eFXSurfaceBufferState));
424 ASSERT_NO_FATAL_FAILURE(layer2 = createLayer(client2, "test", 0, 0,
425 ISurfaceComposerClient::eFXSurfaceBufferState));
426
427 Transaction transaction1, transaction2;
428 CallbackHelper callback1, callback2;
429 int err = fillTransaction(transaction1, &callback1, layer1);
430 if (err) {
431 GTEST_SUCCEED() << "test not supported";
432 return;
433 }
434 err = fillTransaction(transaction2, &callback2, layer2);
435 if (err) {
436 GTEST_SUCCEED() << "test not supported";
437 return;
438 }
439
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000440 ui::Size bufferSize = getBufferSize();
441
442 TransactionUtils::setFrame(transaction1, layer1,
443 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
444 TransactionUtils::setFrame(transaction2, layer2,
445 Rect(0, 0, bufferSize.width, bufferSize.height),
446 Rect(32, 32, 64, 64));
447
448 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700449
450 ExpectedResult expected;
451 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
452 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
453 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
454}
455
456TEST_F(LayerCallbackTest, MultipleTransactions) {
457 sp<SurfaceControl> layer;
458 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
459
460 Transaction transaction;
461 CallbackHelper callback;
462 for (size_t i = 0; i < 10; i++) {
463 int err = fillTransaction(transaction, &callback, layer);
464 if (err) {
465 GTEST_SUCCEED() << "test not supported";
466 return;
467 }
468
469 transaction.apply();
470
471 ExpectedResult expected;
472 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
473 ExpectedResult::Buffer::ACQUIRED,
474 (i == 0) ? ExpectedResult::PreviousBuffer::NOT_RELEASED
475 : ExpectedResult::PreviousBuffer::RELEASED);
476 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected));
477 }
478 ASSERT_NO_FATAL_FAILURE(callback.verifyFinalState());
479}
480
481TEST_F(LayerCallbackTest, MultipleTransactions_NoStateChange) {
482 sp<SurfaceControl> layer;
483 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
484
485 Transaction transaction;
486 CallbackHelper callback;
487 for (size_t i = 0; i < 10; i++) {
488 ExpectedResult expected;
489
490 if (i == 0) {
491 int err = fillTransaction(transaction, &callback, layer);
492 if (err) {
493 GTEST_SUCCEED() << "test not supported";
494 return;
495 }
496 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
497 } else {
498 int err = fillTransaction(transaction, &callback);
499 if (err) {
500 GTEST_SUCCEED() << "test not supported";
501 return;
502 }
503 }
504
505 transaction.apply();
506
507 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected));
508 }
509 ASSERT_NO_FATAL_FAILURE(callback.verifyFinalState());
510}
511
512TEST_F(LayerCallbackTest, MultipleTransactions_SameStateChange) {
513 sp<SurfaceControl> layer;
514 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
515
516 Transaction transaction;
517 CallbackHelper callback;
518 for (size_t i = 0; i < 10; i++) {
519 if (i == 0) {
520 int err = fillTransaction(transaction, &callback, layer);
521 if (err) {
522 GTEST_SUCCEED() << "test not supported";
523 return;
524 }
525 } else {
526 int err = fillTransaction(transaction, &callback);
527 if (err) {
528 GTEST_SUCCEED() << "test not supported";
529 return;
530 }
531 }
532
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000533 ui::Size bufferSize = getBufferSize();
534 TransactionUtils::setFrame(transaction, layer,
535 Rect(0, 0, bufferSize.width, bufferSize.height),
536 Rect(0, 0, 32, 32));
537 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700538
539 ExpectedResult expected;
540 expected.addSurface((i == 0) ? ExpectedResult::Transaction::PRESENTED
541 : ExpectedResult::Transaction::NOT_PRESENTED,
542 layer,
543 (i == 0) ? ExpectedResult::Buffer::ACQUIRED
544 : ExpectedResult::Buffer::NOT_ACQUIRED);
545 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, i == 0));
546 }
547 ASSERT_NO_FATAL_FAILURE(callback.verifyFinalState());
548}
549
550TEST_F(LayerCallbackTest, MultipleTransactions_Merge) {
551 sp<SurfaceControl> layer1, layer2;
552 ASSERT_NO_FATAL_FAILURE(layer1 = createBufferStateLayer());
553 ASSERT_NO_FATAL_FAILURE(layer2 = createBufferStateLayer());
554
555 Transaction transaction1, transaction2;
556 CallbackHelper callback1, callback2;
557 for (size_t i = 0; i < 10; i++) {
558 int err = fillTransaction(transaction1, &callback1, layer1);
559 if (err) {
560 GTEST_SUCCEED() << "test not supported";
561 return;
562 }
563 err = fillTransaction(transaction2, &callback2, layer2);
564 if (err) {
565 GTEST_SUCCEED() << "test not supported";
566 return;
567 }
568
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000569 ui::Size bufferSize = getBufferSize();
570
571 TransactionUtils::setFrame(transaction1, layer1,
572 Rect(0, 0, bufferSize.width, bufferSize.height),
573 Rect(0, 0, 32, 32));
574 TransactionUtils::setFrame(transaction2, layer2,
575 Rect(0, 0, bufferSize.width, bufferSize.height),
576 Rect(32, 32, 64, 64));
577
578 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700579
580 ExpectedResult expected;
581 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2},
582 ExpectedResult::Buffer::ACQUIRED,
583 (i == 0) ? ExpectedResult::PreviousBuffer::NOT_RELEASED
584 : ExpectedResult::PreviousBuffer::RELEASED);
585 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected));
586 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected));
587 }
588 ASSERT_NO_FATAL_FAILURE(callback1.verifyFinalState());
589 ASSERT_NO_FATAL_FAILURE(callback2.verifyFinalState());
590}
591
592TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients) {
593 sp<SurfaceComposerClient> client1(new SurfaceComposerClient),
594 client2(new SurfaceComposerClient);
595 ASSERT_EQ(NO_ERROR, client1->initCheck()) << "failed to create SurfaceComposerClient";
596 ASSERT_EQ(NO_ERROR, client2->initCheck()) << "failed to create SurfaceComposerClient";
597
598 sp<SurfaceControl> layer1, layer2;
599 ASSERT_NO_FATAL_FAILURE(layer1 = createLayer(client1, "test", 0, 0,
600 ISurfaceComposerClient::eFXSurfaceBufferState));
601 ASSERT_NO_FATAL_FAILURE(layer2 = createLayer(client2, "test", 0, 0,
602 ISurfaceComposerClient::eFXSurfaceBufferState));
603
604 Transaction transaction1, transaction2;
605 CallbackHelper callback1, callback2;
606 for (size_t i = 0; i < 10; i++) {
607 int err = fillTransaction(transaction1, &callback1, layer1);
608 if (err) {
609 GTEST_SUCCEED() << "test not supported";
610 return;
611 }
612 err = fillTransaction(transaction2, &callback2, layer2);
613 if (err) {
614 GTEST_SUCCEED() << "test not supported";
615 return;
616 }
617
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000618 ui::Size bufferSize = getBufferSize();
619
620 TransactionUtils::setFrame(transaction1, layer1,
621 Rect(0, 0, bufferSize.width, bufferSize.height),
622 Rect(0, 0, 32, 32));
623 TransactionUtils::setFrame(transaction2, layer2,
624 Rect(0, 0, bufferSize.width, bufferSize.height),
625 Rect(32, 32, 64, 64));
626
627 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700628
629 ExpectedResult expected;
630 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2},
631 ExpectedResult::Buffer::ACQUIRED,
632 (i == 0) ? ExpectedResult::PreviousBuffer::NOT_RELEASED
633 : ExpectedResult::PreviousBuffer::RELEASED);
634 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected));
635 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected));
636 }
637 ASSERT_NO_FATAL_FAILURE(callback1.verifyFinalState());
638 ASSERT_NO_FATAL_FAILURE(callback2.verifyFinalState());
639}
640
641TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients_NoStateChange) {
642 sp<SurfaceComposerClient> client1(new SurfaceComposerClient),
643 client2(new SurfaceComposerClient);
644 ASSERT_EQ(NO_ERROR, client1->initCheck()) << "failed to create SurfaceComposerClient";
645 ASSERT_EQ(NO_ERROR, client2->initCheck()) << "failed to create SurfaceComposerClient";
646
647 sp<SurfaceControl> layer1, layer2;
648 ASSERT_NO_FATAL_FAILURE(layer1 = createLayer(client1, "test", 0, 0,
649 ISurfaceComposerClient::eFXSurfaceBufferState));
650 ASSERT_NO_FATAL_FAILURE(layer2 = createLayer(client2, "test", 0, 0,
651 ISurfaceComposerClient::eFXSurfaceBufferState));
652
653 Transaction transaction1, transaction2;
654 CallbackHelper callback1, callback2;
655
656 // Normal call to set up test
657 int err = fillTransaction(transaction1, &callback1, layer1);
658 if (err) {
659 GTEST_SUCCEED() << "test not supported";
660 return;
661 }
662 err = fillTransaction(transaction2, &callback2, layer2);
663 if (err) {
664 GTEST_SUCCEED() << "test not supported";
665 return;
666 }
667
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000668 ui::Size bufferSize = getBufferSize();
669
670 TransactionUtils::setFrame(transaction1, layer1,
671 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
672 TransactionUtils::setFrame(transaction2, layer2,
673 Rect(0, 0, bufferSize.width, bufferSize.height),
674 Rect(32, 32, 64, 64));
675
676 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700677
678 ExpectedResult expected;
679 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
680 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
681 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
682 expected.reset();
683
684 // Test
685 err = fillTransaction(transaction1, &callback1);
686 if (err) {
687 GTEST_SUCCEED() << "test not supported";
688 return;
689 }
690 err = fillTransaction(transaction2, &callback2);
691 if (err) {
692 GTEST_SUCCEED() << "test not supported";
693 return;
694 }
695
696 transaction2.merge(std::move(transaction1)).apply();
697
698 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
699 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
700}
701
702TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients_SameStateChange) {
703 sp<SurfaceComposerClient> client1(new SurfaceComposerClient),
704 client2(new SurfaceComposerClient);
705
706 ASSERT_EQ(NO_ERROR, client1->initCheck()) << "failed to create SurfaceComposerClient";
707 ASSERT_EQ(NO_ERROR, client2->initCheck()) << "failed to create SurfaceComposerClient";
708
709 sp<SurfaceControl> layer1, layer2;
710 ASSERT_NO_FATAL_FAILURE(layer1 = createLayer(client1, "test", 0, 0,
711 ISurfaceComposerClient::eFXSurfaceBufferState));
712 ASSERT_NO_FATAL_FAILURE(layer2 = createLayer(client2, "test", 0, 0,
713 ISurfaceComposerClient::eFXSurfaceBufferState));
714
715 Transaction transaction1, transaction2;
716 CallbackHelper callback1, callback2;
717
718 // Normal call to set up test
719 int err = fillTransaction(transaction1, &callback1, layer1);
720 if (err) {
721 GTEST_SUCCEED() << "test not supported";
722 return;
723 }
724 err = fillTransaction(transaction2, &callback2, layer2);
725 if (err) {
726 GTEST_SUCCEED() << "test not supported";
727 return;
728 }
729
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000730 ui::Size bufferSize = getBufferSize();
731
732 TransactionUtils::setFrame(transaction1, layer1,
733 Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32));
734 TransactionUtils::setFrame(transaction2, layer2,
735 Rect(0, 0, bufferSize.width, bufferSize.height),
736 Rect(32, 32, 64, 64));
737
738 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700739
740 ExpectedResult expected;
741 expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2});
742 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
743 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
744 expected.reset();
745
746 // Test
747 err = fillTransaction(transaction1, &callback1);
748 if (err) {
749 GTEST_SUCCEED() << "test not supported";
750 return;
751 }
752 err = fillTransaction(transaction2, &callback2);
753 if (err) {
754 GTEST_SUCCEED() << "test not supported";
755 return;
756 }
757
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000758 TransactionUtils::setFrame(transaction2, layer2,
759 Rect(0, 0, bufferSize.width, bufferSize.height),
760 Rect(32, 32, 64, 64));
761 transaction2.merge(std::move(transaction1)).apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700762
763 expected.addSurface(ExpectedResult::Transaction::NOT_PRESENTED, layer2,
764 ExpectedResult::Buffer::NOT_ACQUIRED);
765 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected, true));
766 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected, true));
767}
768
John Reck97c78912021-04-27 14:04:37 -0400769// TODO (b/183181768): Fix & re-enable
770TEST_F(LayerCallbackTest, DISABLED_MultipleTransactions_SingleFrame) {
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700771 sp<SurfaceControl> layer;
772 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
773
774 Transaction transaction;
775 CallbackHelper callback;
776 std::vector<ExpectedResult> expectedResults(50);
777 for (auto& expected : expectedResults) {
778 expected.reset();
779 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
780 ExpectedResult::Buffer::ACQUIRED,
781 ExpectedResult::PreviousBuffer::UNKNOWN);
782
783 int err = fillTransaction(transaction, &callback, layer);
784 if (err) {
785 GTEST_SUCCEED() << "test not supported";
786 return;
787 }
788
789 transaction.apply();
790 }
791 EXPECT_NO_FATAL_FAILURE(waitForCallbacks(callback, expectedResults, true));
792}
793
794TEST_F(LayerCallbackTest, MultipleTransactions_SingleFrame_NoStateChange) {
795 sp<SurfaceControl> layer;
796 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
797
798 // Normal call to set up test
799 Transaction transaction;
800 CallbackHelper callback;
801 int err = fillTransaction(transaction, &callback, layer);
802 if (err) {
803 GTEST_SUCCEED() << "test not supported";
804 return;
805 }
806
807 transaction.apply();
808
809 ExpectedResult expected;
810 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
811 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
812
813 // Test
814 std::vector<ExpectedResult> expectedResults(50);
815 for (auto& expected : expectedResults) {
816 expected.reset();
817
818 err = fillTransaction(transaction, &callback);
819 if (err) {
820 GTEST_SUCCEED() << "test not supported";
821 return;
822 }
823
824 transaction.apply();
825 }
826 EXPECT_NO_FATAL_FAILURE(waitForCallbacks(callback, expectedResults, true));
827}
828
829TEST_F(LayerCallbackTest, MultipleTransactions_SingleFrame_SameStateChange) {
830 sp<SurfaceControl> layer;
831 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
832
833 // Normal call to set up test
834 Transaction transaction;
835 CallbackHelper callback;
836 int err = fillTransaction(transaction, &callback, layer);
837 if (err) {
838 GTEST_SUCCEED() << "test not supported";
839 return;
840 }
841
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000842 ui::Size bufferSize = getBufferSize();
843 TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height),
844 Rect(0, 0, 32, 32));
845 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700846
847 ExpectedResult expectedResult;
848 expectedResult.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
849 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expectedResult, true));
850
851 // Test
852 std::vector<ExpectedResult> expectedResults(50);
853 for (auto& expected : expectedResults) {
854 expected.reset();
855 expected.addSurface(ExpectedResult::Transaction::NOT_PRESENTED, layer,
856 ExpectedResult::Buffer::NOT_ACQUIRED);
857
858 err = fillTransaction(transaction, &callback);
859 if (err) {
860 GTEST_SUCCEED() << "test not supported";
861 return;
862 }
863
Chavi Weingartena5aedbd2021-04-09 13:37:33 +0000864 TransactionUtils::setFrame(transaction, layer,
865 Rect(0, 0, bufferSize.width, bufferSize.height),
866 Rect(0, 0, 32, 32));
867 transaction.apply();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700868 }
869 EXPECT_NO_FATAL_FAILURE(waitForCallbacks(callback, expectedResults, true));
870}
871
872TEST_F(LayerCallbackTest, DesiredPresentTime) {
873 sp<SurfaceControl> layer;
874 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
875
876 Transaction transaction;
877 CallbackHelper callback;
878 int err = fillTransaction(transaction, &callback, layer);
879 if (err) {
880 GTEST_SUCCEED() << "test not supported";
881 return;
882 }
883
884 // Try to present 100ms in the future
Vishnu Nair1506b182021-02-22 14:35:15 -0800885 nsecs_t time = systemTime() + std::chrono::nanoseconds(100ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700886
887 transaction.setDesiredPresentTime(time);
888 transaction.apply();
889
890 ExpectedResult expected;
891 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
892 expected.addExpectedPresentTime(time);
893 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
894}
895
896TEST_F(LayerCallbackTest, DesiredPresentTime_Multiple) {
897 sp<SurfaceControl> layer;
898 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
899
900 Transaction transaction;
901 CallbackHelper callback1;
902 int err = fillTransaction(transaction, &callback1, layer);
903 if (err) {
904 GTEST_SUCCEED() << "test not supported";
905 return;
906 }
907
908 // Try to present 100ms in the future
Vishnu Nair1506b182021-02-22 14:35:15 -0800909 nsecs_t time = systemTime() + std::chrono::nanoseconds(100ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700910
911 transaction.setDesiredPresentTime(time);
912 transaction.apply();
913
914 ExpectedResult expected1;
915 expected1.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
916 expected1.addExpectedPresentTime(time);
917
918 CallbackHelper callback2;
919 err = fillTransaction(transaction, &callback2, layer);
920 if (err) {
921 GTEST_SUCCEED() << "test not supported";
922 return;
923 }
924
925 // Try to present 33ms after the first frame
Vishnu Nair1506b182021-02-22 14:35:15 -0800926 time += std::chrono::nanoseconds(33ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700927
928 transaction.setDesiredPresentTime(time);
929 transaction.apply();
930
931 ExpectedResult expected2;
932 expected2.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
933 ExpectedResult::Buffer::ACQUIRED,
934 ExpectedResult::PreviousBuffer::RELEASED);
935 expected2.addExpectedPresentTime(time);
936
937 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected1, true));
938 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected2, true));
939}
940
John Reck97c78912021-04-27 14:04:37 -0400941// TODO (b/183181768): Fix & re-enable
942TEST_F(LayerCallbackTest, DISABLED_DesiredPresentTime_OutOfOrder) {
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700943 sp<SurfaceControl> layer;
944 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
945
946 Transaction transaction;
947 CallbackHelper callback1;
948 int err = fillTransaction(transaction, &callback1, layer);
949 if (err) {
950 GTEST_SUCCEED() << "test not supported";
951 return;
952 }
953
954 // Try to present 100ms in the future
Vishnu Nair1506b182021-02-22 14:35:15 -0800955 nsecs_t time = systemTime() + std::chrono::nanoseconds(100ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700956
957 transaction.setDesiredPresentTime(time);
958 transaction.apply();
959
960 ExpectedResult expected1;
961 expected1.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
962 expected1.addExpectedPresentTime(time);
963
964 CallbackHelper callback2;
965 err = fillTransaction(transaction, &callback2, layer);
966 if (err) {
967 GTEST_SUCCEED() << "test not supported";
968 return;
969 }
970
971 // Try to present 33ms before the previous frame
Vishnu Nair1506b182021-02-22 14:35:15 -0800972 time -= std::chrono::nanoseconds(33ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -0700973
974 transaction.setDesiredPresentTime(time);
975 transaction.apply();
976
977 ExpectedResult expected2;
978 expected2.addSurface(ExpectedResult::Transaction::PRESENTED, layer,
979 ExpectedResult::Buffer::ACQUIRED,
980 ExpectedResult::PreviousBuffer::RELEASED);
981
982 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback1, expected1, true));
983 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback2, expected2, true));
984}
985
986TEST_F(LayerCallbackTest, DesiredPresentTime_Past) {
987 sp<SurfaceControl> layer;
988 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
989
990 Transaction transaction;
991 CallbackHelper callback;
992 int err = fillTransaction(transaction, &callback, layer);
993 if (err) {
994 GTEST_SUCCEED() << "test not supported";
995 return;
996 }
997
998 // Try to present 100ms in the past
Vishnu Nair1506b182021-02-22 14:35:15 -0800999 nsecs_t time = systemTime() - std::chrono::nanoseconds(100ms).count();
Valerie Hau9cfc6d82019-09-23 13:54:07 -07001000
1001 transaction.setDesiredPresentTime(time);
1002 transaction.apply();
1003
1004 ExpectedResult expected;
1005 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
1006 expected.addExpectedPresentTime(systemTime());
1007 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
1008}
Ady Abraham29d16cb2021-03-08 13:19:21 -08001009
1010TEST_F(LayerCallbackTest, ExpectedPresentTime) {
1011 sp<SurfaceControl> layer;
1012 ASSERT_NO_FATAL_FAILURE(layer = createBufferStateLayer());
1013
1014 Transaction transaction;
1015 CallbackHelper callback;
1016 int err = fillTransaction(transaction, &callback, layer);
1017 if (err) {
1018 GTEST_SUCCEED() << "test not supported";
1019 return;
1020 }
1021
1022 const Vsync vsync = waitForNextVsync();
1023 transaction.setFrameTimelineInfo({vsync.vsyncId, 0});
1024 transaction.apply();
1025
1026 ExpectedResult expected;
1027 expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer);
1028 expected.addExpectedPresentTimeForVsyncId(vsync.expectedPresentTime);
1029 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
1030}
1031
Vishnu Naircd52e2d2021-10-18 08:42:46 -07001032// b202394221
1033TEST_F(LayerCallbackTest, EmptyBufferStateChanges) {
1034 sp<SurfaceControl> bufferLayer, emptyBufferLayer;
1035 ASSERT_NO_FATAL_FAILURE(bufferLayer = createBufferStateLayer());
1036 ASSERT_NO_FATAL_FAILURE(emptyBufferLayer = createBufferStateLayer());
1037
1038 Transaction transaction;
1039 CallbackHelper callback;
1040 for (size_t i = 0; i < 10; i++) {
1041 int err = fillTransaction(transaction, &callback, bufferLayer);
1042 if (err) {
1043 GTEST_SUCCEED() << "test not supported";
1044 return;
1045 }
1046
1047 ui::Size bufferSize = getBufferSize();
1048
1049 TransactionUtils::setFrame(transaction, bufferLayer,
1050 Rect(0, 0, bufferSize.width, bufferSize.height),
1051 Rect(0, 0, 32, 32));
1052 transaction.setPosition(emptyBufferLayer, 1 + i, 2 + i);
1053 transaction.apply();
1054
1055 ExpectedResult expected;
1056 expected.addSurface(ExpectedResult::Transaction::PRESENTED, bufferLayer,
1057 ExpectedResult::Buffer::ACQUIRED,
1058 (i == 0) ? ExpectedResult::PreviousBuffer::NOT_RELEASED
1059 : ExpectedResult::PreviousBuffer::RELEASED);
1060 expected.addSurface(ExpectedResult::Transaction::PRESENTED, emptyBufferLayer,
1061 ExpectedResult::Buffer::NOT_ACQUIRED,
1062 ExpectedResult::PreviousBuffer::NOT_RELEASED);
1063
1064 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected));
1065 }
1066 ASSERT_NO_FATAL_FAILURE(callback.verifyFinalState());
1067}
1068
1069// b202394221
Jiakai Zhanga5505cb2021-11-09 11:46:30 +00001070TEST_F(LayerCallbackTest, DISABLED_NonBufferLayerStateChanges) {
Vishnu Naircd52e2d2021-10-18 08:42:46 -07001071 sp<SurfaceControl> layer;
1072 ASSERT_NO_FATAL_FAILURE(layer = createColorLayer("ColorLayer", Color::RED));
1073
1074 Transaction transaction;
1075 CallbackHelper callback;
1076 int err = fillTransaction(transaction, &callback);
1077 if (err) {
1078 GTEST_SUCCEED() << "test not supported";
1079 return;
1080 }
1081 transaction.setPosition(layer, 1, 2);
1082 transaction.apply();
1083
1084 ExpectedResult expected;
1085 EXPECT_NO_FATAL_FAILURE(waitForCallback(callback, expected, true));
1086}
1087
Valerie Hau9cfc6d82019-09-23 13:54:07 -07001088} // namespace android