| // 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/run_configuration.h" | |
| #include <sstream> | |
| #include <utility> | |
| #include "flutter/assets/directory_asset_bundle.h" | |
| #include "flutter/common/graphics/persistent_cache.h" | |
| #include "flutter/fml/file.h" | |
| #include "flutter/fml/unique_fd.h" | |
| #include "flutter/runtime/dart_vm.h" | |
| #include "flutter/runtime/isolate_configuration.h" | |
| namespace flutter { | |
| RunConfiguration RunConfiguration::InferFromSettings( | |
| const Settings& settings, | |
| const fml::RefPtr<fml::TaskRunner>& io_worker, | |
| IsolateLaunchType launch_type) { | |
| auto asset_manager = std::make_shared<AssetManager>(); | |
| if (fml::UniqueFD::traits_type::IsValid(settings.assets_dir)) { | |
| asset_manager->PushBack(std::make_unique<DirectoryAssetBundle>( | |
| fml::Duplicate(settings.assets_dir), true)); | |
| } | |
| asset_manager->PushBack(std::make_unique<DirectoryAssetBundle>( | |
| fml::OpenDirectory(settings.assets_path.c_str(), false, | |
| fml::FilePermission::kRead), | |
| true)); | |
| return {IsolateConfiguration::InferFromSettings(settings, asset_manager, | |
| io_worker, launch_type), | |
| asset_manager}; | |
| } | |
| RunConfiguration::RunConfiguration( | |
| std::unique_ptr<IsolateConfiguration> configuration) | |
| : RunConfiguration(std::move(configuration), | |
| std::make_shared<AssetManager>()) { | |
| PersistentCache::SetAssetManager(asset_manager_); | |
| } | |
| RunConfiguration::RunConfiguration( | |
| std::unique_ptr<IsolateConfiguration> configuration, | |
| std::shared_ptr<AssetManager> asset_manager) | |
| : isolate_configuration_(std::move(configuration)), | |
| asset_manager_(std::move(asset_manager)) { | |
| PersistentCache::SetAssetManager(asset_manager_); | |
| } | |
| RunConfiguration::RunConfiguration(RunConfiguration&&) = default; | |
| RunConfiguration::~RunConfiguration() = default; | |
| bool RunConfiguration::IsValid() const { | |
| return asset_manager_ && isolate_configuration_; | |
| } | |
| bool RunConfiguration::AddAssetResolver( | |
| std::unique_ptr<AssetResolver> resolver) { | |
| if (!resolver || !resolver->IsValid()) { | |
| return false; | |
| } | |
| asset_manager_->PushBack(std::move(resolver)); | |
| return true; | |
| } | |
| void RunConfiguration::SetEntrypoint(std::string entrypoint) { | |
| entrypoint_ = std::move(entrypoint); | |
| } | |
| void RunConfiguration::SetEntrypointAndLibrary(std::string entrypoint, | |
| std::string library) { | |
| SetEntrypoint(std::move(entrypoint)); | |
| entrypoint_library_ = std::move(library); | |
| } | |
| void RunConfiguration::SetEntrypointArgs( | |
| std::vector<std::string> entrypoint_args) { | |
| entrypoint_args_ = std::move(entrypoint_args); | |
| } | |
| std::shared_ptr<AssetManager> RunConfiguration::GetAssetManager() const { | |
| return asset_manager_; | |
| } | |
| const std::string& RunConfiguration::GetEntrypoint() const { | |
| return entrypoint_; | |
| } | |
| const std::string& RunConfiguration::GetEntrypointLibrary() const { | |
| return entrypoint_library_; | |
| } | |
| const std::vector<std::string>& RunConfiguration::GetEntrypointArgs() const { | |
| return entrypoint_args_; | |
| } | |
| std::unique_ptr<IsolateConfiguration> | |
| RunConfiguration::TakeIsolateConfiguration() { | |
| return std::move(isolate_configuration_); | |
| } | |
| } // namespace flutter |