Auto merge of #26183 - tamird:patch-1, r=gterzian

Use hash_map::Entry to save a map lookup

A bit of golf noticed via https://medium.com/programming-servo/programming-servo-workers-at-your-service-db71e5943511.

r? @gterzian
This commit is contained in:
bors-servo 2020-04-15 01:00:47 -04:00 committed by GitHub
commit ce9f22a5e4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2623,32 +2623,31 @@ where
} }
fn handle_register_serviceworker(&mut self, scope_things: ScopeThings, scope: ServoUrl) { fn handle_register_serviceworker(&mut self, scope_things: ScopeThings, scope: ServoUrl) {
let origin = scope.origin(); // This match is equivalent to Entry.or_insert_with but allows for early return.
let sw_manager = match self.sw_managers.entry(scope.origin()) {
Entry::Occupied(entry) => entry.into_mut(),
Entry::Vacant(entry) => {
let (own_sender, receiver) = ipc::channel().expect("Failed to create IPC channel!");
if let Some(mgr) = self.sw_managers.get(&origin) { let sw_senders = SWManagerSenders {
let _ = mgr.send(ServiceWorkerMsg::RegisterServiceWorker(scope_things, scope)); swmanager_sender: self.swmanager_sender.clone(),
} else { resource_sender: self.public_resource_threads.sender(),
let (own_sender, receiver) = ipc::channel().expect("Failed to create IPC channel!"); own_sender: own_sender.clone(),
receiver,
};
let content = ServiceWorkerUnprivilegedContent::new(sw_senders, scope.origin());
let sw_senders = SWManagerSenders { if opts::multiprocess() {
swmanager_sender: self.swmanager_sender.clone(), if content.spawn_multiprocess().is_err() {
resource_sender: self.public_resource_threads.sender(), return warn!("Failed to spawn process for SW manager.");
own_sender: own_sender.clone(), }
receiver, } else {
}; content.start::<SWF>();
let content = ServiceWorkerUnprivilegedContent::new(sw_senders, origin.clone());
if opts::multiprocess() {
if content.spawn_multiprocess().is_err() {
return warn!("Failed to spawn process for SW manager.");
} }
} else { entry.insert(own_sender)
content.start::<SWF>(); },
} };
let _ = sw_manager.send(ServiceWorkerMsg::RegisterServiceWorker(scope_things, scope));
let _ = own_sender.send(ServiceWorkerMsg::RegisterServiceWorker(scope_things, scope));
self.sw_managers.insert(origin, own_sender);
}
} }
fn handle_broadcast_storage_event( fn handle_broadcast_storage_event(