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"),
42 std::unique_ptr<TestGLSurface> gl_surface;
43 std::unique_ptr<ShellIOManager> io_manager;
48 gl_surface = std::make_unique<TestGLSurface>(SkISize::Make(1, 1));
49 io_manager = std::make_unique<ShellIOManager>(
50 gl_surface->CreateGrContext(), std::make_shared<fml::SyncSwitch>(),
51 runners.GetIOTaskRunner(), nullptr,
52 fml::TimeDelta::FromMilliseconds(0));
57 io_manager->GetWeakIOManager());
60 fml::AutoResetWaitableEvent isolate_latch;
62 EXPECT_TRUE(isolate->RunInIsolateScope([&]() -> bool {
63 Dart_Handle library = Dart_RootLibrary();
64 if (Dart_IsError(library)) {
65 isolate_latch.Signal();
69 Dart_GetField(library, Dart_NewStringFromCString(
"frameCallback"));
70 if (Dart_IsError(closure) || !Dart_IsClosure(closure)) {
71 isolate_latch.Signal();
75 codec = fml::MakeRefCounted<MultiFrameCodec>(std::move(gif_generator));
76 codec->getNextFrame(closure);
77 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::shared_ptr< VolatilePathTracker > volatile_path_tracker, std::unique_ptr< PlatformConfiguration > platform_configuration)