| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "flutter/shell/common/shell_test_platform_view.h" | |
| #ifdef SHELL_ENABLE_GL | |
| #include "flutter/shell/common/shell_test_platform_view_gl.h" | |
| #endif // SHELL_ENABLE_GL | |
| #ifdef SHELL_ENABLE_VULKAN | |
| #include "flutter/shell/common/shell_test_platform_view_vulkan.h" | |
| #endif // SHELL_ENABLE_VULKAN | |
| #ifdef SHELL_ENABLE_METAL | |
| #include "flutter/shell/common/shell_test_platform_view_metal.h" | |
| #endif // SHELL_ENABLE_METAL | |
| #include "flutter/shell/common/vsync_waiter_fallback.h" | |
| namespace flutter { | |
| namespace testing { | |
| std::unique_ptr<ShellTestPlatformView> ShellTestPlatformView::Create( | |
| PlatformView::Delegate& delegate, | |
| const TaskRunners& task_runners, | |
| const std::shared_ptr<ShellTestVsyncClock>& vsync_clock, | |
| const CreateVsyncWaiter& create_vsync_waiter, | |
| BackendType backend, | |
| const std::shared_ptr<ShellTestExternalViewEmbedder>& | |
| shell_test_external_view_embedder, | |
| const std::shared_ptr<const fml::SyncSwitch>& is_gpu_disabled_sync_switch) { | |
| // TODO(gw280): https://github.com/flutter/flutter/issues/50298 | |
| // Make this fully runtime configurable | |
| switch (backend) { | |
| case BackendType::kDefaultBackend: | |
| #ifdef SHELL_ENABLE_GL | |
| case BackendType::kGLBackend: | |
| return std::make_unique<ShellTestPlatformViewGL>( | |
| delegate, task_runners, vsync_clock, create_vsync_waiter, | |
| shell_test_external_view_embedder); | |
| #endif // SHELL_ENABLE_GL | |
| #ifdef SHELL_ENABLE_VULKAN | |
| case BackendType::kVulkanBackend: | |
| return std::make_unique<ShellTestPlatformViewVulkan>( | |
| delegate, task_runners, vsync_clock, create_vsync_waiter, | |
| shell_test_external_view_embedder); | |
| #endif // SHELL_ENABLE_VULKAN | |
| #ifdef SHELL_ENABLE_METAL | |
| case BackendType::kMetalBackend: | |
| return std::make_unique<ShellTestPlatformViewMetal>( | |
| delegate, task_runners, vsync_clock, create_vsync_waiter, | |
| shell_test_external_view_embedder, is_gpu_disabled_sync_switch); | |
| #endif // SHELL_ENABLE_METAL | |
| default: | |
| FML_LOG(FATAL) << "No backends supported for ShellTestPlatformView"; | |
| return nullptr; | |
| } | |
| } | |
| ShellTestPlatformViewBuilder::ShellTestPlatformViewBuilder(Config config) | |
| : config_(std::move(config)) {} | |
| std::unique_ptr<PlatformView> ShellTestPlatformViewBuilder::operator()( | |
| Shell& shell) { | |
| const TaskRunners& task_runners = shell.GetTaskRunners(); | |
| const auto vsync_clock = std::make_shared<ShellTestVsyncClock>(); | |
| CreateVsyncWaiter create_vsync_waiter = [&task_runners, vsync_clock, | |
| simulate_vsync = | |
| config_.simulate_vsync]() { | |
| if (simulate_vsync) { | |
| return static_cast<std::unique_ptr<VsyncWaiter>>( | |
| std::make_unique<ShellTestVsyncWaiter>(task_runners, vsync_clock)); | |
| } else { | |
| return static_cast<std::unique_ptr<VsyncWaiter>>( | |
| std::make_unique<VsyncWaiterFallback>(task_runners, true)); | |
| } | |
| }; | |
| return ShellTestPlatformView::Create( | |
| shell, // | |
| task_runners, // | |
| vsync_clock, // | |
| create_vsync_waiter, // | |
| config_.rendering_backend, // | |
| config_.shell_test_external_view_embedder, // | |
| shell.GetIsGpuDisabledSyncSwitch() // | |
| ); | |
| } | |
| } // namespace testing | |
| } // namespace flutter |