未验证 提交 ce8ea0f7 编写于 作者: S Sarah Zakarias 提交者: GitHub

Revert "Run Fuchsia apps without flx" (#4545)

* Revert "include portable_unistd.h in directory_asset_bundle (#4542)"

This reverts commit 211150fe.

* Revert "Run Fuchsia apps without flx (#4538)"

This reverts commit 8718438d.
上级 5a67f2d8
......@@ -23,49 +23,15 @@ namespace blink {
bool DirectoryAssetBundle::GetAsBuffer(const std::string& asset_name,
std::vector<uint8_t>* data) {
std::string asset_path = GetPathForAsset(asset_name);
if (asset_path.empty())
return false;
if (fd_.is_valid()) {
fxl::UniqueFD asset_file(openat(fd_.get(), asset_path.c_str(), O_RDONLY));
if (!asset_file.is_valid()) {
FXL_LOG(ERROR) << "Could not load asset " << asset_name << " from "
<< asset_path;
return false;
}
constexpr size_t kBufferSize = 1 << 16;
size_t offset = 0;
ssize_t bytes_read = 0;
do {
offset += bytes_read;
data->resize(offset + kBufferSize);
bytes_read = read(asset_file.get(), &(*data)[offset], kBufferSize);
} while (bytes_read > 0);
if (bytes_read < 0) {
FXL_LOG(ERROR) << "Reading " << asset_name << " failed";
data->clear();
return false;
}
data->resize(offset + bytes_read);
return true;
}
return files::ReadFileToVector(asset_path, data);
}
DirectoryAssetBundle::~DirectoryAssetBundle() {}
DirectoryAssetBundle::DirectoryAssetBundle(std::string directory)
: directory_(std::move(directory)),
fd_(fxl::internal::UniqueFDTraits::InvalidValue()) {}
DirectoryAssetBundle::DirectoryAssetBundle(fxl::UniqueFD fd,
std::string directory)
: directory_(std::move(directory)), fd_(std::move(fd)) {}
: directory_(std::move(directory)) {}
std::string DirectoryAssetBundle::GetPathForAsset(
const std::string& asset_name) {
......
......@@ -8,7 +8,6 @@
#include <string>
#include <vector>
#include "lib/fxl/files/unique_fd.h"
#include "lib/fxl/macros.h"
#include "lib/fxl/memory/ref_counted.h"
......@@ -18,8 +17,6 @@ class DirectoryAssetBundle
: public fxl::RefCountedThreadSafe<DirectoryAssetBundle> {
public:
explicit DirectoryAssetBundle(std::string directory);
// Expects fd to be valid, otherwise the file descriptor is ignored.
explicit DirectoryAssetBundle(fxl::UniqueFD fd, std::string directory);
~DirectoryAssetBundle();
bool GetAsBuffer(const std::string& asset_name, std::vector<uint8_t>* data);
......@@ -28,7 +25,6 @@ class DirectoryAssetBundle
private:
const std::string directory_;
fxl::UniqueFD fd_;
FXL_DISALLOW_COPY_AND_ASSIGN(DirectoryAssetBundle);
};
......
......@@ -32,12 +32,10 @@ ApplicationControllerImpl::ApplicationControllerImpl(
}
std::vector<char> bundle;
if (application->data) {
if (!fsl::VectorFromVmo(std::move(application->data), &bundle)) {
FXL_LOG(ERROR) << "Failed to receive bundle.";
return;
}
}
// TODO(jeffbrown): Decide what to do with command-line arguments and
// startup handles.
......
......@@ -23,7 +23,6 @@
#include "flutter/runtime/runtime_init.h"
#include "lib/app/cpp/connect.h"
#include "lib/fsl/vmo/vector.h"
#include "lib/fxl/files/unique_fd.h"
#include "lib/fxl/functional/make_copyable.h"
#include "lib/fxl/logging.h"
#include "lib/fxl/time/time_delta.h"
......@@ -46,7 +45,6 @@ constexpr char kAssetChannel[] = "flutter/assets";
constexpr char kKeyEventChannel[] = "flutter/keyevent";
constexpr char kTextInputChannel[] = "flutter/textinput";
constexpr char kFlutterPlatformChannel[] = "flutter/platform";
constexpr char kFuchsiaPackageResourceDirectory[] = "pkg/data";
void SetThreadName(fxl::RefPtr<fxl::TaskRunner> runner, std::string name) {
runner->PostTask([name]() {
......@@ -119,7 +117,6 @@ void RuntimeHolder::Init(
context_->ConnectToEnvironmentService(view_manager_.NewRequest());
// TODO(zarah): remove bundle entirely once flx is removed.
InitRootBundle(std::move(bundle));
const uint8_t* vm_snapshot_data;
......@@ -133,7 +130,7 @@ void RuntimeHolder::Init(
default_isolate_snapshot_instr = ::kDartIsolateCoreSnapshotInstructions;
} else {
std::vector<uint8_t> dylib_blob;
if (!GetAssetAsBuffer(kDylibKey, &dylib_blob)) {
if (!asset_store_->GetAsBuffer(kDylibKey, &dylib_blob)) {
FXL_LOG(ERROR) << "Failed to extract app dylib";
return;
}
......@@ -196,8 +193,8 @@ void RuntimeHolder::CreateView(
std::vector<uint8_t> kernel;
std::vector<uint8_t> snapshot;
if (!Dart_IsPrecompiledRuntime()) {
if (!GetAssetAsBuffer(kKernelKey, &kernel) &&
!GetAssetAsBuffer(kSnapshotKey, &snapshot)) {
if (!asset_store_->GetAsBuffer(kKernelKey, &kernel) &&
!asset_store_->GetAsBuffer(kSnapshotKey, &snapshot)) {
FXL_LOG(ERROR) << "Unable to load kernel or snapshot from root bundle.";
return;
}
......@@ -390,11 +387,8 @@ void RuntimeHolder::HandlePlatformMessage(
}
void RuntimeHolder::DidCreateMainIsolate(Dart_Isolate isolate) {
if (directory_asset_bundle_) {
blink::AssetFontSelector::Install(directory_asset_bundle_);
} else if (asset_store_) {
if (asset_store_)
blink::AssetFontSelector::Install(asset_store_);
}
InitDartIoInternal();
InitFuchsia();
InitMozartInternal();
......@@ -454,19 +448,9 @@ void RuntimeHolder::InitMozartInternal() {
}
void RuntimeHolder::InitRootBundle(std::vector<char> bundle) {
if (!bundle.empty()) {
root_bundle_data_ = std::move(bundle);
asset_store_ = fxl::MakeRefCounted<blink::ZipAssetStore>(
GetUnzipperProviderForRootBundle());
} else {
fxl::UniqueFD root_dir(fdio_ns_opendir(namespc_));
if (!root_dir.is_valid()) {
FXL_LOG(ERROR) << "Unable to load root dir";
return;
}
directory_asset_bundle_ = fxl::MakeRefCounted<blink::DirectoryAssetBundle>(
std::move(root_dir), kFuchsiaPackageResourceDirectory);
}
}
mozart::View* RuntimeHolder::GetMozartView() {
......@@ -482,7 +466,7 @@ bool RuntimeHolder::HandleAssetPlatformMessage(
std::string asset_name(reinterpret_cast<const char*>(data.data()),
data.size());
std::vector<uint8_t> asset_data;
if (GetAssetAsBuffer(asset_name, &asset_data)) {
if (asset_store_ && asset_store_->GetAsBuffer(asset_name, &asset_data)) {
response->Complete(std::move(asset_data));
} else {
response->CompleteEmpty();
......@@ -490,13 +474,6 @@ bool RuntimeHolder::HandleAssetPlatformMessage(
return true;
}
bool RuntimeHolder::GetAssetAsBuffer(const std::string& name,
std::vector<uint8_t>* data) {
return (directory_asset_bundle_ &&
directory_asset_bundle_->GetAsBuffer(name, data)) ||
(asset_store_ && asset_store_->GetAsBuffer(name, data));
}
bool RuntimeHolder::HandleFlutterPlatformMessage(
blink::PlatformMessage* message) {
const auto& data = message->data();
......
......@@ -11,7 +11,6 @@
#include <unordered_set>
#include "dart-pkg/fuchsia/sdk_ext/fuchsia.h"
#include "flutter/assets/directory_asset_bundle.h"
#include "flutter/assets/unzipper_provider.h"
#include "flutter/assets/zip_asset_store.h"
#include "flutter/content_handler/accessibility_bridge.h"
......@@ -93,7 +92,6 @@ class RuntimeHolder : public blink::RuntimeDelegate,
void InitRootBundle(std::vector<char> bundle);
blink::UnzipperProvider GetUnzipperProviderForRootBundle();
bool HandleAssetPlatformMessage(blink::PlatformMessage* message);
bool GetAssetAsBuffer(const std::string& name, std::vector<uint8_t>* data);
bool HandleTextInputPlatformMessage(blink::PlatformMessage* message);
bool HandleFlutterPlatformMessage(blink::PlatformMessage* message);
......@@ -111,9 +109,7 @@ class RuntimeHolder : public blink::RuntimeDelegate,
std::unique_ptr<app::ApplicationContext> context_;
fidl::InterfaceRequest<app::ServiceProvider> outgoing_services_;
std::vector<char> root_bundle_data_;
// TODO(zarah): Remove asset_store_ when flx is completely removed
fxl::RefPtr<blink::ZipAssetStore> asset_store_;
fxl::RefPtr<blink::DirectoryAssetBundle> directory_asset_bundle_;
void* dylib_handle_ = nullptr;
std::unique_ptr<Rasterizer> rasterizer_;
std::unique_ptr<blink::RuntimeController> runtime_;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册