From f0020297f58cfa85b06577ab4e8ce7be7a01ac6d Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Fri, 11 Nov 2016 21:31:44 -0500 Subject: [PATCH 1/2] Don't unnecessarily clone entire `opts::Opt` structure. `opts::Opt` is a pretty big structure, so cloning everything is excessive when we only need a few items. --- components/servo/lib.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 909daec3002..8962c2f47d7 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -87,9 +87,11 @@ use profile::time as profile_time; use profile_traits::mem; use profile_traits::time; use script_traits::{ConstellationMsg, SWManagerSenders, ScriptMsg}; +use std::borrow::Cow; use std::cmp::max; use std::rc::Rc; use std::sync::mpsc::Sender; +use url::Url; use util::opts; use util::prefs::PREFS; use util::resource_files::resources_dir_path; @@ -173,7 +175,9 @@ impl Browser where Window: WindowMethods + 'static { // Create the constellation, which maintains the engine // pipelines, including the script and layout threads, as well // as the navigation context. - let (constellation_chan, sw_senders) = create_constellation(opts.clone(), + let (constellation_chan, sw_senders) = create_constellation(opts.user_agent.clone(), + opts.config_dir.clone(), + opts.url.clone(), compositor_proxy.clone_compositor_proxy(), time_profiler_chan.clone(), mem_profiler_chan.clone(), @@ -238,7 +242,9 @@ impl Browser where Window: WindowMethods + 'static { } } -fn create_constellation(opts: opts::Opts, +fn create_constellation(user_agent: Cow<'static, str>, + config_dir: Option, + url: Option, compositor_proxy: Box, time_profiler_chan: time::ProfilerChan, mem_profiler_chan: mem::ProfilerChan, @@ -250,10 +256,10 @@ fn create_constellation(opts: opts::Opts, let bluetooth_thread: IpcSender = BluetoothThreadFactory::new(); let (public_resource_threads, private_resource_threads) = - new_resource_threads(opts.user_agent, + new_resource_threads(user_agent, devtools_chan.clone(), time_profiler_chan.clone(), - opts.config_dir.map(Into::into)); + config_dir.map(Into::into)); let image_cache_thread = new_image_cache_thread(public_resource_threads.sender(), webrender_api_sender.create_api()); let font_cache_thread = FontCacheThread::new(public_resource_threads.sender(), @@ -280,7 +286,7 @@ fn create_constellation(opts: opts::Opts, layout_thread::LayoutThread, script::script_thread::ScriptThread>::start(initial_state); - if let Some(url) = opts.url { + if let Some(url) = url { constellation_chan.send(ConstellationMsg::InitLoadUrl(url)).unwrap(); }; From 6a101921c469b3e90e945cc86397ce520f3d5981 Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Fri, 11 Nov 2016 21:43:50 -0500 Subject: [PATCH 2/2] Store directory path as `PathBuf` instead of `String`. --- components/servo/lib.rs | 5 +++-- components/util/opts.rs | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 8962c2f47d7..21ad6a134a0 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -89,6 +89,7 @@ use profile_traits::time; use script_traits::{ConstellationMsg, SWManagerSenders, ScriptMsg}; use std::borrow::Cow; use std::cmp::max; +use std::path::PathBuf; use std::rc::Rc; use std::sync::mpsc::Sender; use url::Url; @@ -243,7 +244,7 @@ impl Browser where Window: WindowMethods + 'static { } fn create_constellation(user_agent: Cow<'static, str>, - config_dir: Option, + config_dir: Option, url: Option, compositor_proxy: Box, time_profiler_chan: time::ProfilerChan, @@ -259,7 +260,7 @@ fn create_constellation(user_agent: Cow<'static, str>, new_resource_threads(user_agent, devtools_chan.clone(), time_profiler_chan.clone(), - config_dir.map(Into::into)); + config_dir); let image_cache_thread = new_image_cache_thread(public_resource_threads.sender(), webrender_api_sender.create_api()); let font_cache_thread = FontCacheThread::new(public_resource_threads.sender(), diff --git a/components/util/opts.rs b/components/util/opts.rs index cf7c5cafed2..1d032a07d08 100644 --- a/components/util/opts.rs +++ b/components/util/opts.rs @@ -215,7 +215,7 @@ pub struct Opts { pub use_msaa: bool, /// Directory for a default config directory - pub config_dir: Option, + pub config_dir: Option, // don't skip any backtraces on panic pub full_backtraces: bool, @@ -857,7 +857,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult { enable_vsync: !debug_options.disable_vsync, webrender_stats: debug_options.webrender_stats, use_msaa: debug_options.use_msaa, - config_dir: opt_match.opt_str("config-dir"), + config_dir: opt_match.opt_str("config-dir").map(Into::into), full_backtraces: debug_options.full_backtraces, is_printing_version: is_printing_version, webrender_debug: debug_options.webrender_debug,