From dfd8c922a51daeff5609199a7434b58720f5eecc Mon Sep 17 00:00:00 2001 From: Kaushik Iska Date: Tue, 1 Oct 2019 17:42:22 -0700 Subject: [PATCH 1/2] [flutter_runner] Make rd and rx uniform Currently we pass paths for readonly files and pass in fds for rx. Now passing in fds everywhere. --- shell/platform/fuchsia/flutter/component.cc | 58 ++++++++++++--------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/shell/platform/fuchsia/flutter/component.cc b/shell/platform/fuchsia/flutter/component.cc index a4e53e253d001..35f405bd0b743 100644 --- a/shell/platform/fuchsia/flutter/component.cc +++ b/shell/platform/fuchsia/flutter/component.cc @@ -81,12 +81,17 @@ static std::string DebugLabelForURL(const std::string& url) { } } -static std::unique_ptr MakeReadExecMapping(const char* path) { +static std::unique_ptr MakeFileMapping(const char* path, + bool executable) { + uint32_t flags = OPEN_RIGHT_READABLE; + if (executable) { + flags |= OPEN_RIGHT_EXECUTABLE; + } + int fd = 0; // The returned file descriptor is compatible with standard posix operations // such as close, mmap, etc. We only need to treat open/open_at specially. - zx_status_t status = - fdio_open_fd(path, OPEN_RIGHT_READABLE | OPEN_RIGHT_EXECUTABLE, &fd); + zx_status_t status = fdio_open_fd(path, flags, &fd); if (status != ZX_OK) { return nullptr; @@ -105,6 +110,16 @@ static std::unique_ptr MakeReadExecMapping(const char* path) { return mapping; } +// Defaults to readonly. If executable is `true`, we treat it as `read + exec`. +static flutter::MappingCallback MakeDataFileMapping(const char* file_name, + bool executable = false) { + std::string absolute_path = "/pkg/data/"; + absolute_path.append(file_name); + return [&absolute_path, executable = executable](void) { + return MakeFileMapping(absolute_path.c_str(), executable); + }; +} + Application::Application( TerminationCallback termination_callback, fuchsia::sys::Package package, @@ -253,17 +268,14 @@ Application::Application( } // Compare flutter_jit_runner in BUILD.gn. - settings_.vm_snapshot_data_path = "pkg/data/vm_snapshot_data.bin"; - settings_.vm_snapshot_instr = []() { - return MakeReadExecMapping("/pkg/data/vm_snapshot_instructions.bin"); - }; + settings_.vm_snapshot_data = MakeDataFileMapping("vm_snapshot_data.bin"); + settings_.vm_snapshot_instr = + MakeDataFileMapping("vm_snapshot_instructions.bin", true); - settings_.isolate_snapshot_data_path = - "pkg/data/isolate_core_snapshot_data.bin"; - settings_.isolate_snapshot_instr = []() { - return MakeReadExecMapping( - "/pkg/data/isolate_core_snapshot_instructions.bin"); - }; + settings_.isolate_snapshot_data = + MakeDataFileMapping("isolate_core_snapshot_data.bin"); + settings_.isolate_snapshot_instr = + MakeDataFileMapping("isolate_core_snapshot_instructions.bin", true); { // Check if we can use the snapshot with the framework already loaded. @@ -275,17 +287,15 @@ Application::Application( "app.frameworkversion", &app_framework) && (runner_framework.compare(app_framework) == 0)) { - settings_.vm_snapshot_data_path = - "pkg/data/framework_vm_snapshot_data.bin"; - settings_.vm_snapshot_instr = []() { - return MakeReadExecMapping("/pkg/data/vm_snapshot_instructions.bin"); - }; - settings_.isolate_snapshot_data_path = - "pkg/data/framework_isolate_core_snapshot_data.bin"; - settings_.isolate_snapshot_instr = []() { - return MakeReadExecMapping( - "/pkg/data/isolate_core_snapshot_instructions.bin"); - }; + settings_.vm_snapshot_data = + MakeDataFileMapping("framework_vm_snapshot_data.bin"); + settings_.vm_snapshot_instr = + MakeDataFileMapping("framework_vm_snapshot_instructions.bin", true); + + settings_.isolate_snapshot_data = + MakeDataFileMapping("framework_isolate_core_snapshot_data.bin"); + settings_.isolate_snapshot_instr = MakeDataFileMapping( + "framework_isolate_core_snapshot_instructions.bin", true); FML_LOG(INFO) << "Using snapshot with framework for " << package.resolved_url; From b52507e8df307afffe3dee3ab1b2e9da429bf518 Mon Sep 17 00:00:00 2001 From: Kaushik Iska Date: Tue, 1 Oct 2019 17:54:53 -0700 Subject: [PATCH 2/2] pass full paths --- shell/platform/fuchsia/flutter/component.cc | 29 ++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/shell/platform/fuchsia/flutter/component.cc b/shell/platform/fuchsia/flutter/component.cc index 35f405bd0b743..66c5591b262a6 100644 --- a/shell/platform/fuchsia/flutter/component.cc +++ b/shell/platform/fuchsia/flutter/component.cc @@ -111,12 +111,10 @@ static std::unique_ptr MakeFileMapping(const char* path, } // Defaults to readonly. If executable is `true`, we treat it as `read + exec`. -static flutter::MappingCallback MakeDataFileMapping(const char* file_name, +static flutter::MappingCallback MakeDataFileMapping(const char* absolute_path, bool executable = false) { - std::string absolute_path = "/pkg/data/"; - absolute_path.append(file_name); - return [&absolute_path, executable = executable](void) { - return MakeFileMapping(absolute_path.c_str(), executable); + return [absolute_path, executable = executable](void) { + return MakeFileMapping(absolute_path, executable); }; } @@ -268,14 +266,15 @@ Application::Application( } // Compare flutter_jit_runner in BUILD.gn. - settings_.vm_snapshot_data = MakeDataFileMapping("vm_snapshot_data.bin"); + settings_.vm_snapshot_data = + MakeDataFileMapping("/pkg/data/vm_snapshot_data.bin"); settings_.vm_snapshot_instr = - MakeDataFileMapping("vm_snapshot_instructions.bin", true); + MakeDataFileMapping("/pkg/data/vm_snapshot_instructions.bin", true); settings_.isolate_snapshot_data = - MakeDataFileMapping("isolate_core_snapshot_data.bin"); - settings_.isolate_snapshot_instr = - MakeDataFileMapping("isolate_core_snapshot_instructions.bin", true); + MakeDataFileMapping("/pkg/data/isolate_core_snapshot_data.bin"); + settings_.isolate_snapshot_instr = MakeDataFileMapping( + "/pkg/data/isolate_core_snapshot_instructions.bin", true); { // Check if we can use the snapshot with the framework already loaded. @@ -288,14 +287,14 @@ Application::Application( &app_framework) && (runner_framework.compare(app_framework) == 0)) { settings_.vm_snapshot_data = - MakeDataFileMapping("framework_vm_snapshot_data.bin"); + MakeDataFileMapping("/pkg/data/framework_vm_snapshot_data.bin"); settings_.vm_snapshot_instr = - MakeDataFileMapping("framework_vm_snapshot_instructions.bin", true); + MakeDataFileMapping("/pkg/data/vm_snapshot_instructions.bin", true); - settings_.isolate_snapshot_data = - MakeDataFileMapping("framework_isolate_core_snapshot_data.bin"); + settings_.isolate_snapshot_data = MakeDataFileMapping( + "/pkg/data/framework_isolate_core_snapshot_data.bin"); settings_.isolate_snapshot_instr = MakeDataFileMapping( - "framework_isolate_core_snapshot_instructions.bin", true); + "/pkg/data/isolate_core_snapshot_instructions.bin", true); FML_LOG(INFO) << "Using snapshot with framework for " << package.resolved_url;