diff options
-rw-r--r-- | components/compositing/Cargo.toml | 17 | ||||
-rw-r--r-- | components/compositing/constellation.rs | 52 | ||||
-rw-r--r-- | python/mach_bootstrap.py | 4 | ||||
-rw-r--r-- | python/servo/bootstrap_commands.py | 2 | ||||
-rw-r--r-- | python/servo/command_base.py | 26 | ||||
-rw-r--r-- | python/servo/devenv_commands.py | 1 |
6 files changed, 61 insertions, 41 deletions
diff --git a/components/compositing/Cargo.toml b/components/compositing/Cargo.toml index da11ccea636..3e9894fca2c 100644 --- a/components/compositing/Cargo.toml +++ b/components/compositing/Cargo.toml @@ -63,7 +63,22 @@ git = "https://github.com/servo/ipc-channel" [dependencies.offscreen_gl_context] git = "https://github.com/ecoal95/rust-offscreen-rendering-context" -[dependencies.gaol] +[target.arm-linux-androideabi.dependencies.gaol] +git = "https://github.com/pcwalton/gaol" + +[target.x86_64-apple-darwin.dependencies.gaol] +git = "https://github.com/pcwalton/gaol" + +[target.x86_64-unknown-linux-gnu.dependencies.gaol] +git = "https://github.com/pcwalton/gaol" + +[target.i686-unknown-linux-gnu.dependencies.gaol] +git = "https://github.com/pcwalton/gaol" + +[target.arm-unknown-linux-gnueabihf.dependencies.gaol] +git = "https://github.com/pcwalton/gaol" + +[target.aarch64-unknown-linux-gnueabihf.dependencies.gaol] git = "https://github.com/pcwalton/gaol" [dependencies] diff --git a/components/compositing/constellation.rs b/components/compositing/constellation.rs index 4f74a90aedb..b61c0b46c85 100644 --- a/components/compositing/constellation.rs +++ b/components/compositing/constellation.rs @@ -406,27 +406,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> // // Yes, that's all there is to it! if opts::multiprocess() { - let (server, token) = - IpcOneShotServer::<IpcSender<UnprivilegedPipelineContent>>::new().unwrap(); - - // If there is a sandbox, use the `gaol` API to create the child process. - let child_process = if opts::get().sandbox { - let mut command = sandbox::Command::me().unwrap(); - command.arg("--content-process").arg(token); - let profile = sandboxing::content_process_sandbox_profile(); - ChildProcess::Sandboxed(Sandbox::new(profile).start(&mut command).expect( - "Failed to start sandboxed child process!")) - } else { - let path_to_self = env::current_exe().unwrap(); - let mut child_process = process::Command::new(path_to_self); - child_process.arg("--content-process"); - child_process.arg(token); - ChildProcess::Unsandboxed(child_process.spawn().unwrap()) - }; - self.child_processes.push(child_process); - - let (_receiver, sender) = server.accept().unwrap(); - sender.send(unprivileged_pipeline_content).unwrap(); + self.spawn_multiprocess(unprivileged_pipeline_content); } else { unprivileged_pipeline_content.start_all::<LTF, STF>(false); } @@ -436,6 +416,36 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF> self.pipelines.insert(pipeline_id, pipeline); } + #[cfg(not(target_os = "windows"))] + fn spawn_multiprocess(&mut self, unprivileged_pipeline_content: UnprivilegedPipelineContent) { + let (server, token) = + IpcOneShotServer::<IpcSender<UnprivilegedPipelineContent>>::new().unwrap(); + + // If there is a sandbox, use the `gaol` API to create the child process. + let child_process = if opts::get().sandbox { + let mut command = sandbox::Command::me().unwrap(); + command.arg("--content-process").arg(token); + let profile = sandboxing::content_process_sandbox_profile(); + ChildProcess::Sandboxed(Sandbox::new(profile).start(&mut command).expect( + "Failed to start sandboxed child process!")) + } else { + let path_to_self = env::current_exe().unwrap(); + let mut child_process = process::Command::new(path_to_self); + child_process.arg("--content-process"); + child_process.arg(token); + ChildProcess::Unsandboxed(child_process.spawn().unwrap()) + }; + + self.child_processes.push(child_process); + let (_receiver, sender) = server.accept().unwrap(); + sender.send(unprivileged_pipeline_content).unwrap(); + } + + #[cfg(target_os = "windows")] + fn spawn_multiprocess(&mut self, _: UnprivilegedPipelineContent) { + panic!("Multiprocess is not supported on Windows."); + } + // Push a new (loading) pipeline to the list of pending frame changes fn push_pending_frame(&mut self, new_pipeline_id: PipelineId, old_pipeline_id: Option<PipelineId>) { diff --git a/python/mach_bootstrap.py b/python/mach_bootstrap.py index 9f1bfd5f485..e78132d21d2 100644 --- a/python/mach_bootstrap.py +++ b/python/mach_bootstrap.py @@ -92,7 +92,9 @@ def _activate_virtualenv(topdir): if python is None: sys.exit("Python is not installed. Please install it prior to running mach.") - activate_path = os.path.join(virtualenv_path, "bin", "activate_this.py") + # Virtualenv calls its scripts folder "bin" on linux/OSX but "Scripts" on Windows, detect which one then use that + script_dir = "Scripts" if os.name == "nt" else "bin" + activate_path = os.path.join(virtualenv_path, script_dir, "activate_this.py") if not (os.path.exists(virtualenv_path) and os.path.exists(activate_path)): virtualenv = _get_exec(*VIRTUALENV_NAMES) if virtualenv is None: diff --git a/python/servo/bootstrap_commands.py b/python/servo/bootstrap_commands.py index 9959c14ed11..cc4aeedf101 100644 --- a/python/servo/bootstrap_commands.py +++ b/python/servo/bootstrap_commands.py @@ -28,7 +28,7 @@ from mach.decorators import ( Command, ) -from servo.command_base import CommandBase, cd, host_triple, use_nightly_rust, check_call, BIN_SUFFIX +from servo.command_base import CommandBase, cd, host_triple, check_call, BIN_SUFFIX def download(desc, src, writer): diff --git a/python/servo/command_base.py b/python/servo/command_base.py index 650db517d48..ad411b3de53 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -16,9 +16,7 @@ import toml from mach.registrar import Registrar -BIN_SUFFIX = "" -if sys.platform == "win32": - BIN_SUFFIX = ".exe" +BIN_SUFFIX = ".exe" if sys.platform == "win32" else "" @contextlib.contextmanager @@ -59,10 +57,8 @@ def host_triple(): def use_nightly_rust(): - envvar = os.environ.get("SERVO_USE_NIGHTLY_RUST") - if envvar: - return envvar != "0" - return False + envvar = os.environ.get("SERVO_USE_NIGHTLY_RUST", "0") + return envvar != "0" def call(*args, **kwargs): @@ -70,11 +66,9 @@ def call(*args, **kwargs): verbose = kwargs.pop('verbose', False) if verbose: print(' '.join(args[0])) - if sys.platform == "win32": - # we have to use shell=True in order to get PATH handling - # when looking for the binary on Windows - return subprocess.call(*args, shell=True, **kwargs) - return subprocess.call(*args, **kwargs) + # we have to use shell=True in order to get PATH handling + # when looking for the binary on Windows + return subprocess.call(*args, shell=sys.platform == 'win32', **kwargs) def check_call(*args, **kwargs): @@ -82,11 +76,9 @@ def check_call(*args, **kwargs): verbose = kwargs.pop('verbose', False) if verbose: print(' '.join(args[0])) - if sys.platform == "win32": - # we have to use shell=True in order to get PATH handling - # when looking for the binary on Windows - return subprocess.check_call(*args, shell=True, **kwargs) - return subprocess.check_call(*args, **kwargs) + # we have to use shell=True in order to get PATH handling + # when looking for the binary on Windows + return subprocess.check_call(*args, shell=sys.platform == 'win32', **kwargs) class CommandBase(object): diff --git a/python/servo/devenv_commands.py b/python/servo/devenv_commands.py index 015ae3c91af..d16c4ce619c 100644 --- a/python/servo/devenv_commands.py +++ b/python/servo/devenv_commands.py @@ -10,6 +10,7 @@ from __future__ import print_function, unicode_literals from os import path, getcwd, listdir +import subprocess import sys from mach.decorators import ( |