23 ItDoesNotCrashThatSkiaUnrefQueueDrainAfterIOManagerReset) {
24 auto settings = CreateSettingsForFixture();
26 auto vm_data = vm_ref.GetVMData();
28 ASSERT_TRUE(gif_mapping);
31 std::shared_ptr<ImageGenerator> gif_generator =
33 ASSERT_TRUE(gif_generator);
36 CreateNewThread(
"platform"),
37 CreateNewThread(
"raster"),
38 CreateNewThread(
"ui"),
43 std::unique_ptr<ShellIOManager> io_manager;
45 std::promise<std::shared_ptr<impeller::Context>> promise;
46 promise.set_value(
nullptr);
50 gl_surface = std::make_unique<TestGLSurface>(DlISize(1, 1));
51 io_manager = std::make_unique<ShellIOManager>(
52 gl_surface->CreateGrContext(), std::make_shared<fml::SyncSwitch>(),
53 runners.GetIOTaskRunner(),
54 std::make_shared<impeller::ImpellerContextFuture>(promise.get_future()),
55 false, fml::TimeDelta::FromMilliseconds(0));
60 io_manager->GetWeakIOManager());
63 fml::AutoResetWaitableEvent isolate_latch;
65 EXPECT_TRUE(isolate->RunInIsolateScope([&]() -> bool {
66 Dart_Handle library = Dart_RootLibrary();
67 if (Dart_IsError(library)) {
68 isolate_latch.Signal();
72 Dart_GetField(library, Dart_NewStringFromCString(
"frameCallback"));
73 if (Dart_IsError(closure) || !Dart_IsClosure(closure)) {
74 isolate_latch.Signal();
78 codec = fml::MakeRefCounted<MultiFrameCodec>(std::move(gif_generator));
79 codec->getNextFrame(closure);
80 isolate_latch.Signal();
std::unique_ptr< AutoIsolateShutdown > RunDartCodeInIsolate(DartVMRef &vm_ref, const Settings &settings, const TaskRunners &task_runners, std::string entrypoint, const std::vector< std::string > &args, const std::string &kernel_file_path, fml::WeakPtr< IOManager > io_manager, std::unique_ptr< PlatformConfiguration > platform_configuration)