blob: 6c01f85fc7dc48c2db3f6f8f0e8d4fecb662d6cd [file] [log] [blame]
Ady Abraham60e42ea2020-03-09 19:17:31 -07001/*
2 * Copyright 2020 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
17#undef LOG_TAG
18#define LOG_TAG "LibSurfaceFlingerUnittests"
19
20#include <gmock/gmock.h>
21#include <gtest/gtest.h>
22#include <gui/LayerMetadata.h>
23
24// TODO(b/129481165): remove the #pragma below and fix conversion issues
25#pragma clang diagnostic push
26#pragma clang diagnostic ignored "-Wconversion"
27#include "BufferQueueLayer.h"
28#include "BufferStateLayer.h"
29#include "EffectLayer.h"
30#include "Layer.h"
31// TODO(b/129481165): remove the #pragma below and fix conversion issues
32#pragma clang diagnostic pop // ignored "-Wconversion"
33#include "TestableSurfaceFlinger.h"
34#include "mock/DisplayHardware/MockComposer.h"
35#include "mock/MockDispSync.h"
Ady Abraham60e42ea2020-03-09 19:17:31 -070036#include "mock/MockEventThread.h"
37#include "mock/MockMessageQueue.h"
38
39namespace android {
40
41using testing::_;
42using testing::DoAll;
43using testing::Mock;
44using testing::Return;
45using testing::SetArgPointee;
46
47using android::Hwc2::IComposer;
48using android::Hwc2::IComposerClient;
49
50using FakeHwcDisplayInjector = TestableSurfaceFlinger::FakeHwcDisplayInjector;
51
52using FrameRate = Layer::FrameRate;
53using FrameRateCompatibility = Layer::FrameRateCompatibility;
54
55class LayerFactory {
56public:
57 virtual ~LayerFactory() = default;
58
59 virtual std::string name() = 0;
60 virtual sp<Layer> createLayer(TestableSurfaceFlinger& flinger) = 0;
61
62protected:
63 static constexpr uint32_t WIDTH = 100;
64 static constexpr uint32_t HEIGHT = 100;
65 static constexpr uint32_t LAYER_FLAGS = 0;
66};
67
68class BufferQueueLayerFactory : public LayerFactory {
69public:
70 std::string name() override { return "BufferQueueLayer"; }
71 sp<Layer> createLayer(TestableSurfaceFlinger& flinger) override {
72 sp<Client> client;
73 LayerCreationArgs args(flinger.flinger(), client, "buffer-queue-layer", WIDTH, HEIGHT,
74 LAYER_FLAGS, LayerMetadata());
75 return new BufferQueueLayer(args);
76 }
77};
78
79class BufferStateLayerFactory : public LayerFactory {
80public:
81 std::string name() override { return "BufferStateLayer"; }
82 sp<Layer> createLayer(TestableSurfaceFlinger& flinger) override {
83 sp<Client> client;
84 LayerCreationArgs args(flinger.flinger(), client, "buffer-queue-layer", WIDTH, HEIGHT,
85 LAYER_FLAGS, LayerMetadata());
86 return new BufferStateLayer(args);
87 }
88};
89
90class EffectLayerFactory : public LayerFactory {
91public:
92 std::string name() override { return "EffectLayer"; }
93 sp<Layer> createLayer(TestableSurfaceFlinger& flinger) override {
94 sp<Client> client;
95 LayerCreationArgs args(flinger.flinger(), client, "color-layer", WIDTH, HEIGHT, LAYER_FLAGS,
96 LayerMetadata());
97 return new EffectLayer(args);
98 }
99};
100
101std::string PrintToStringParamName(
102 const ::testing::TestParamInfo<std::shared_ptr<LayerFactory>>& info) {
103 return info.param->name();
104}
105
106/**
107 * This class tests the behaviour of Layer::SetFrameRate and Layer::GetFrameRate
108 */
109class SetFrameRateTest : public ::testing::TestWithParam<std::shared_ptr<LayerFactory>> {
110protected:
111 const FrameRate FRAME_RATE_VOTE1 = FrameRate(67.f, FrameRateCompatibility::Default);
112 const FrameRate FRAME_RATE_VOTE2 = FrameRate(14.f, FrameRateCompatibility::ExactOrMultiple);
113 const FrameRate FRAME_RATE_VOTE3 = FrameRate(99.f, FrameRateCompatibility::NoVote);
114 const FrameRate FRAME_RATE_TREE = FrameRate(0, FrameRateCompatibility::NoVote);
115 const FrameRate FRAME_RATE_NO_VOTE = FrameRate(0, FrameRateCompatibility::Default);
116
117 SetFrameRateTest();
118
119 void setupScheduler();
120 void setupComposer(uint32_t virtualDisplayCount);
121
122 void addChild(sp<Layer> layer, sp<Layer> child);
123 void removeChild(sp<Layer> layer, sp<Layer> child);
124 void reparentChildren(sp<Layer> layer, sp<Layer> child);
125 void commitTransaction();
126
127 TestableSurfaceFlinger mFlinger;
128 Hwc2::mock::Composer* mComposer = nullptr;
129 mock::MessageQueue* mMessageQueue = new mock::MessageQueue();
130
131 std::vector<sp<Layer>> mLayers;
132};
133
134SetFrameRateTest::SetFrameRateTest() {
135 const ::testing::TestInfo* const test_info =
136 ::testing::UnitTest::GetInstance()->current_test_info();
137 ALOGD("**** Setting up for %s.%s\n", test_info->test_case_name(), test_info->name());
138
139 mFlinger.mutableUseFrameRateApi() = true;
140
141 setupScheduler();
142 setupComposer(0);
143
144 mFlinger.mutableEventQueue().reset(mMessageQueue);
145}
146void SetFrameRateTest::addChild(sp<Layer> layer, sp<Layer> child) {
147 layer.get()->addChild(child.get());
148}
149
150void SetFrameRateTest::removeChild(sp<Layer> layer, sp<Layer> child) {
151 layer.get()->removeChild(child.get());
152}
153
154void SetFrameRateTest::reparentChildren(sp<Layer> parent, sp<Layer> newParent) {
155 parent.get()->reparentChildren(newParent);
156}
157
158void SetFrameRateTest::commitTransaction() {
159 for (auto layer : mLayers) {
160 layer.get()->commitTransaction(layer.get()->getCurrentState());
161 }
162}
163
164void SetFrameRateTest::setupScheduler() {
165 auto eventThread = std::make_unique<mock::EventThread>();
166 auto sfEventThread = std::make_unique<mock::EventThread>();
167
168 EXPECT_CALL(*eventThread, registerDisplayEventConnection(_));
169 EXPECT_CALL(*eventThread, createEventConnection(_, _))
170 .WillOnce(Return(new EventThreadConnection(eventThread.get(), ResyncCallback(),
171 ISurfaceComposer::eConfigChangedSuppress)));
172
173 EXPECT_CALL(*sfEventThread, registerDisplayEventConnection(_));
174 EXPECT_CALL(*sfEventThread, createEventConnection(_, _))
175 .WillOnce(Return(new EventThreadConnection(sfEventThread.get(), ResyncCallback(),
176 ISurfaceComposer::eConfigChangedSuppress)));
177
178 auto primaryDispSync = std::make_unique<mock::DispSync>();
179
Ady Abraham0ed31c92020-04-16 11:48:45 -0700180 EXPECT_CALL(*primaryDispSync, computeNextRefresh(0, _)).WillRepeatedly(Return(0));
Ady Abraham60e42ea2020-03-09 19:17:31 -0700181 EXPECT_CALL(*primaryDispSync, getPeriod())
182 .WillRepeatedly(Return(FakeHwcDisplayInjector::DEFAULT_REFRESH_RATE));
Ady Abraham0ed31c92020-04-16 11:48:45 -0700183 EXPECT_CALL(*primaryDispSync, expectedPresentTime(_)).WillRepeatedly(Return(0));
Dominik Laskowski8b01cc02020-07-14 19:02:41 -0700184 mFlinger.setupScheduler(std::move(primaryDispSync), std::move(eventThread),
Ady Abraham60e42ea2020-03-09 19:17:31 -0700185 std::move(sfEventThread));
186}
187
188void SetFrameRateTest::setupComposer(uint32_t virtualDisplayCount) {
189 mComposer = new Hwc2::mock::Composer();
190 EXPECT_CALL(*mComposer, getMaxVirtualDisplayCount()).WillOnce(Return(virtualDisplayCount));
191 mFlinger.setupComposer(std::unique_ptr<Hwc2::Composer>(mComposer));
192
193 Mock::VerifyAndClear(mComposer);
194}
195
196namespace {
197/* ------------------------------------------------------------------------
198 * Test cases
199 */
200TEST_P(SetFrameRateTest, SetAndGet) {
201 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
202
203 const auto& layerFactory = GetParam();
204
205 auto layer = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
206 layer->setFrameRate(FRAME_RATE_VOTE1);
207 commitTransaction();
208 EXPECT_EQ(FRAME_RATE_VOTE1, layer->getFrameRateForLayerTree());
209}
210
211TEST_P(SetFrameRateTest, SetAndGetParent) {
212 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
213
214 const auto& layerFactory = GetParam();
215
216 auto parent = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
217 auto child1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
218 auto child2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
219
220 addChild(parent, child1);
221 addChild(child1, child2);
222
223 child2->setFrameRate(FRAME_RATE_VOTE1);
224 commitTransaction();
225 EXPECT_EQ(FRAME_RATE_TREE, parent->getFrameRateForLayerTree());
226 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
227 EXPECT_EQ(FRAME_RATE_VOTE1, child2->getFrameRateForLayerTree());
228
229 child2->setFrameRate(FRAME_RATE_NO_VOTE);
230 commitTransaction();
231 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
232 EXPECT_EQ(FRAME_RATE_NO_VOTE, child1->getFrameRateForLayerTree());
233 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
234}
235
236TEST_P(SetFrameRateTest, SetAndGetParentAllVote) {
237 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
238
239 const auto& layerFactory = GetParam();
240
241 auto parent = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
242 auto child1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
243 auto child2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
244
245 addChild(parent, child1);
246 addChild(child1, child2);
247
248 child2->setFrameRate(FRAME_RATE_VOTE1);
249 child1->setFrameRate(FRAME_RATE_VOTE2);
250 parent->setFrameRate(FRAME_RATE_VOTE3);
251 commitTransaction();
252 EXPECT_EQ(FRAME_RATE_VOTE3, parent->getFrameRateForLayerTree());
253 EXPECT_EQ(FRAME_RATE_VOTE2, child1->getFrameRateForLayerTree());
254 EXPECT_EQ(FRAME_RATE_VOTE1, child2->getFrameRateForLayerTree());
255
256 child2->setFrameRate(FRAME_RATE_NO_VOTE);
257 commitTransaction();
258 EXPECT_EQ(FRAME_RATE_VOTE3, parent->getFrameRateForLayerTree());
259 EXPECT_EQ(FRAME_RATE_VOTE2, child1->getFrameRateForLayerTree());
260 EXPECT_EQ(FRAME_RATE_TREE, child2->getFrameRateForLayerTree());
261
262 child1->setFrameRate(FRAME_RATE_NO_VOTE);
263 commitTransaction();
264 EXPECT_EQ(FRAME_RATE_VOTE3, parent->getFrameRateForLayerTree());
265 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
266 EXPECT_EQ(FRAME_RATE_TREE, child2->getFrameRateForLayerTree());
267
268 parent->setFrameRate(FRAME_RATE_NO_VOTE);
269 commitTransaction();
270 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
271 EXPECT_EQ(FRAME_RATE_NO_VOTE, child1->getFrameRateForLayerTree());
272 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
273}
274
275TEST_P(SetFrameRateTest, SetAndGetChild) {
276 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
277
278 const auto& layerFactory = GetParam();
279
280 auto parent = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
281 auto child1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
282 auto child2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
283
284 addChild(parent, child1);
285 addChild(child1, child2);
286
287 parent->setFrameRate(FRAME_RATE_VOTE1);
288 commitTransaction();
289 EXPECT_EQ(FRAME_RATE_VOTE1, parent->getFrameRateForLayerTree());
290 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
291 EXPECT_EQ(FRAME_RATE_TREE, child2->getFrameRateForLayerTree());
292
293 parent->setFrameRate(FRAME_RATE_NO_VOTE);
294 commitTransaction();
295 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
296 EXPECT_EQ(FRAME_RATE_NO_VOTE, child1->getFrameRateForLayerTree());
297 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
298}
299
300TEST_P(SetFrameRateTest, SetAndGetChildAllVote) {
301 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
302
303 const auto& layerFactory = GetParam();
304
305 auto parent = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
306 auto child1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
307 auto child2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
308
309 addChild(parent, child1);
310 addChild(child1, child2);
311
312 child2->setFrameRate(FRAME_RATE_VOTE1);
313 child1->setFrameRate(FRAME_RATE_VOTE2);
314 parent->setFrameRate(FRAME_RATE_VOTE3);
315 commitTransaction();
316 EXPECT_EQ(FRAME_RATE_VOTE3, parent->getFrameRateForLayerTree());
317 EXPECT_EQ(FRAME_RATE_VOTE2, child1->getFrameRateForLayerTree());
318 EXPECT_EQ(FRAME_RATE_VOTE1, child2->getFrameRateForLayerTree());
319
320 parent->setFrameRate(FRAME_RATE_NO_VOTE);
321 commitTransaction();
322 EXPECT_EQ(FRAME_RATE_TREE, parent->getFrameRateForLayerTree());
323 EXPECT_EQ(FRAME_RATE_VOTE2, child1->getFrameRateForLayerTree());
324 EXPECT_EQ(FRAME_RATE_VOTE1, child2->getFrameRateForLayerTree());
325
326 child1->setFrameRate(FRAME_RATE_NO_VOTE);
327 commitTransaction();
328 EXPECT_EQ(FRAME_RATE_TREE, parent->getFrameRateForLayerTree());
329 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
330 EXPECT_EQ(FRAME_RATE_VOTE1, child2->getFrameRateForLayerTree());
331
332 child2->setFrameRate(FRAME_RATE_NO_VOTE);
333 commitTransaction();
334 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
335 EXPECT_EQ(FRAME_RATE_NO_VOTE, child1->getFrameRateForLayerTree());
336 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
337}
338
339TEST_P(SetFrameRateTest, SetAndGetChildAddAfterVote) {
340 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
341
342 const auto& layerFactory = GetParam();
343
344 auto parent = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
345 auto child1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
346 auto child2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
347
348 addChild(parent, child1);
349
350 parent->setFrameRate(FRAME_RATE_VOTE1);
351 commitTransaction();
352 EXPECT_EQ(FRAME_RATE_VOTE1, parent->getFrameRateForLayerTree());
353 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
354 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
355
356 addChild(child1, child2);
357 commitTransaction();
358 EXPECT_EQ(FRAME_RATE_VOTE1, parent->getFrameRateForLayerTree());
359 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
360 EXPECT_EQ(FRAME_RATE_TREE, child2->getFrameRateForLayerTree());
361
362 parent->setFrameRate(FRAME_RATE_NO_VOTE);
363 commitTransaction();
364 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
365 EXPECT_EQ(FRAME_RATE_NO_VOTE, child1->getFrameRateForLayerTree());
366 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
367}
368
369TEST_P(SetFrameRateTest, SetAndGetChildRemoveAfterVote) {
370 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
371
372 const auto& layerFactory = GetParam();
373
374 auto parent = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
375 auto child1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
376 auto child2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
377
378 addChild(parent, child1);
379 addChild(child1, child2);
380
381 parent->setFrameRate(FRAME_RATE_VOTE1);
382 commitTransaction();
383 EXPECT_EQ(FRAME_RATE_VOTE1, parent->getFrameRateForLayerTree());
384 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
385 EXPECT_EQ(FRAME_RATE_TREE, child2->getFrameRateForLayerTree());
386
387 removeChild(child1, child2);
388 commitTransaction();
389 EXPECT_EQ(FRAME_RATE_VOTE1, parent->getFrameRateForLayerTree());
390 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
391 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
392
393 parent->setFrameRate(FRAME_RATE_NO_VOTE);
394 commitTransaction();
395 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
396 EXPECT_EQ(FRAME_RATE_NO_VOTE, child1->getFrameRateForLayerTree());
397 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
398}
399
400TEST_P(SetFrameRateTest, SetAndGetParentNotInTree) {
401 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
402
403 const auto& layerFactory = GetParam();
404
405 auto parent = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
406 auto child1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
407 auto child2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
408 auto child2_1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
409
410 addChild(parent, child1);
411 addChild(child1, child2);
412 addChild(child1, child2_1);
413
414 child2->setFrameRate(FRAME_RATE_VOTE1);
415 commitTransaction();
416 EXPECT_EQ(FRAME_RATE_TREE, parent->getFrameRateForLayerTree());
417 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
418 EXPECT_EQ(FRAME_RATE_VOTE1, child2->getFrameRateForLayerTree());
419 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2_1->getFrameRateForLayerTree());
420
421 child2->setFrameRate(FRAME_RATE_NO_VOTE);
422 commitTransaction();
423 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
424 EXPECT_EQ(FRAME_RATE_NO_VOTE, child1->getFrameRateForLayerTree());
425 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
426 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2_1->getFrameRateForLayerTree());
427}
428
429TEST_P(SetFrameRateTest, SetAndGetRearentChildren) {
430 EXPECT_CALL(*mMessageQueue, invalidate()).Times(1);
431
432 const auto& layerFactory = GetParam();
433
434 auto parent = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
435 auto parent2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
436 auto child1 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
437 auto child2 = mLayers.emplace_back(layerFactory->createLayer(mFlinger));
438
439 addChild(parent, child1);
440 addChild(child1, child2);
441
442 child2->setFrameRate(FRAME_RATE_VOTE1);
443 commitTransaction();
444 EXPECT_EQ(FRAME_RATE_TREE, parent->getFrameRateForLayerTree());
445 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent2->getFrameRateForLayerTree());
446 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
447 EXPECT_EQ(FRAME_RATE_VOTE1, child2->getFrameRateForLayerTree());
448
449 reparentChildren(parent, parent2);
450 commitTransaction();
451 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
452 EXPECT_EQ(FRAME_RATE_TREE, parent2->getFrameRateForLayerTree());
453 EXPECT_EQ(FRAME_RATE_TREE, child1->getFrameRateForLayerTree());
454 EXPECT_EQ(FRAME_RATE_VOTE1, child2->getFrameRateForLayerTree());
455
456 child2->setFrameRate(FRAME_RATE_NO_VOTE);
457 commitTransaction();
458 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent->getFrameRateForLayerTree());
459 EXPECT_EQ(FRAME_RATE_NO_VOTE, parent2->getFrameRateForLayerTree());
460 EXPECT_EQ(FRAME_RATE_NO_VOTE, child1->getFrameRateForLayerTree());
461 EXPECT_EQ(FRAME_RATE_NO_VOTE, child2->getFrameRateForLayerTree());
462}
463
464INSTANTIATE_TEST_SUITE_P(PerLayerType, SetFrameRateTest,
465 testing::Values(std::make_shared<BufferQueueLayerFactory>(),
466 std::make_shared<BufferStateLayerFactory>(),
467 std::make_shared<EffectLayerFactory>()),
468 PrintToStringParamName);
469
470} // namespace
471} // namespace android