24 auto message_latch = std::make_shared<fml::AutoResetWaitableEvent>();
28 Scene* retained_scene;
30 auto validate_builder_has_layers =
31 [&retained_scene_builder](Dart_NativeArguments
args) {
32 auto handle = Dart_GetNativeArgument(
args, 0);
34 Dart_Handle result = Dart_GetNativeInstanceField(
36 ASSERT_FALSE(Dart_IsError(result));
37 retained_scene_builder =
reinterpret_cast<SceneBuilder*
>(peer);
38 retained_scene_builder->
AddRef();
39 ASSERT_TRUE(retained_scene_builder);
40 ASSERT_EQ(retained_scene_builder->
layer_stack().size(), 2ul);
43 auto validate_builder_has_no_layers =
44 [&retained_scene_builder](Dart_NativeArguments
args) {
45 ASSERT_EQ(retained_scene_builder->
layer_stack().size(), 0ul);
46 retained_scene_builder->
Release();
47 retained_scene_builder =
nullptr;
50 auto capture_scene = [&retained_scene](Dart_NativeArguments
args) {
51 auto handle = Dart_GetNativeArgument(
args, 0);
53 Dart_Handle result = Dart_GetNativeInstanceField(
55 ASSERT_FALSE(Dart_IsError(result));
56 retained_scene =
reinterpret_cast<Scene*
>(peer);
58 ASSERT_TRUE(retained_scene);
61 auto validate_scene_has_no_layers =
62 [message_latch, &retained_scene](Dart_NativeArguments
args) {
65 retained_scene =
nullptr;
66 message_latch->Signal();
69 Settings settings = CreateSettingsForFixture();
71 GetCurrentTaskRunner(),
77 AddNativeCallback(
"ValidateBuilderHasLayers",
79 AddNativeCallback(
"ValidateBuilderHasNoLayers",
83 AddNativeCallback(
"ValidateSceneHasNoLayers",
86 std::unique_ptr<Shell> shell = CreateShell(settings, task_runners);
88 ASSERT_TRUE(shell->IsSetup());
90 configuration.SetEntrypoint(
"validateSceneBuilderAndScene");
92 shell->RunEngine(std::move(configuration), [](
auto result) {
96 message_latch->Wait();
97 DestroyShell(std::move(shell), task_runners);
101 auto message_latch = std::make_shared<fml::AutoResetWaitableEvent>();
103 std::shared_ptr<ContainerLayer> root_layer;
105 auto capture_root_layer = [&root_layer](Dart_NativeArguments
args) {
106 auto handle = Dart_GetNativeArgument(
args, 0);
108 Dart_Handle result = Dart_GetNativeInstanceField(
110 ASSERT_FALSE(Dart_IsError(result));
112 ASSERT_TRUE(scene_builder);
114 ASSERT_TRUE(root_layer);
117 auto validate_layer_tree_counts = [&root_layer](Dart_NativeArguments
args) {
119 EXPECT_EQ(root_layer->layers().front().use_count(), 2);
122 auto validate_engine_layer_dispose =
123 [message_latch, &root_layer](Dart_NativeArguments
args) {
125 EXPECT_EQ(root_layer->layers().front().use_count(), 1);
127 message_latch->Signal();
130 Settings settings = CreateSettingsForFixture();
132 GetCurrentTaskRunner(),
138 AddNativeCallback(
"CaptureRootLayer",
140 AddNativeCallback(
"ValidateLayerTreeCounts",
142 AddNativeCallback(
"ValidateEngineLayerDispose",
145 std::unique_ptr<Shell> shell = CreateShell(settings, task_runners);
147 ASSERT_TRUE(shell->IsSetup());
149 configuration.SetEntrypoint(
"validateEngineLayerDispose");
151 shell->RunEngine(std::move(configuration), [](
auto result) {
155 message_latch->Wait();
156 DestroyShell(std::move(shell), task_runners);
static RunConfiguration InferFromSettings(const Settings &settings, const fml::RefPtr< fml::TaskRunner > &io_worker=nullptr, IsolateLaunchType launch_type=IsolateLaunchType::kNewGroup)
Attempts to infer a run configuration from the settings object. This tries to create a run configurat...