mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
108 lines
3.2 KiB
C++
108 lines
3.2 KiB
C++
// 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"
|
|
|
|
namespace flutter {
|
|
|
|
RunConfiguration RunConfiguration::InferFromSettings(
|
|
const Settings& settings,
|
|
const fml::RefPtr<fml::TaskRunner>& io_worker) {
|
|
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),
|
|
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
|