refactor: omit redundant map searches (#19929)

* refactor: don't walk maps twice to remove elements

* refactor: don't walk maps twice to read elements

* refactor: don't walk maps twice to insert elements

* refactor: don't walk map 3x on UvTaskRunner timeout

* refactor: more don't-walk-maps-twice cleanup

* fixup! refactor: don't walk maps twice to insert elements

* refactor: don't walk containers twice when erasing

* refactor: omit excess lookups in RemoteObjectFreer
This commit is contained in:
Charles Kerr 2019-08-28 09:39:21 -05:00 committed by GitHub
parent 27ce6a9cd3
commit 987300c97a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 88 additions and 86 deletions

View file

@ -107,10 +107,9 @@ bool GlobalShortcut::Register(const ui::Accelerator& accelerator,
}
void GlobalShortcut::Unregister(const ui::Accelerator& accelerator) {
if (!base::Contains(accelerator_callback_map_, accelerator))
if (accelerator_callback_map_.erase(accelerator) == 0)
return;
accelerator_callback_map_.erase(accelerator);
GlobalShortcutListener::GetInstance()->UnregisterAccelerator(accelerator,
this);
}

View file

@ -176,21 +176,15 @@ void ProtocolNS::RegisterURLLoaderFactories(
ProtocolError ProtocolNS::RegisterProtocol(ProtocolType type,
const std::string& scheme,
const ProtocolHandler& handler) {
ProtocolError error = ProtocolError::OK;
if (!base::Contains(handlers_, scheme))
handlers_[scheme] = std::make_pair(type, handler);
else
error = ProtocolError::REGISTERED;
return error;
const bool added = base::TryEmplace(handlers_, scheme, type, handler).second;
return added ? ProtocolError::OK : ProtocolError::REGISTERED;
}
void ProtocolNS::UnregisterProtocol(const std::string& scheme,
mate::Arguments* args) {
ProtocolError error = ProtocolError::OK;
if (base::Contains(handlers_, scheme))
handlers_.erase(scheme);
else
error = ProtocolError::NOT_REGISTERED;
const bool removed = handlers_.erase(scheme) != 0;
const auto error =
removed ? ProtocolError::OK : ProtocolError::NOT_REGISTERED;
HandleOptionalCallback(args, error);
}
@ -201,21 +195,16 @@ bool ProtocolNS::IsProtocolRegistered(const std::string& scheme) {
ProtocolError ProtocolNS::InterceptProtocol(ProtocolType type,
const std::string& scheme,
const ProtocolHandler& handler) {
ProtocolError error = ProtocolError::OK;
if (!base::Contains(intercept_handlers_, scheme))
intercept_handlers_[scheme] = std::make_pair(type, handler);
else
error = ProtocolError::INTERCEPTED;
return error;
const bool added =
base::TryEmplace(intercept_handlers_, scheme, type, handler).second;
return added ? ProtocolError::OK : ProtocolError::INTERCEPTED;
}
void ProtocolNS::UninterceptProtocol(const std::string& scheme,
mate::Arguments* args) {
ProtocolError error = ProtocolError::OK;
if (base::Contains(intercept_handlers_, scheme))
intercept_handlers_.erase(scheme);
else
error = ProtocolError::NOT_INTERCEPTED;
const bool removed = intercept_handlers_.erase(scheme) != 0;
const auto error =
removed ? ProtocolError::OK : ProtocolError::NOT_INTERCEPTED;
HandleOptionalCallback(args, error);
}

View file

@ -972,9 +972,6 @@ bool TopLevelWindow::HookWindowMessage(UINT message,
}
void TopLevelWindow::UnhookWindowMessage(UINT message) {
if (!base::Contains(messages_callback_map_, message))
return;
messages_callback_map_.erase(message);
}

View file

@ -396,10 +396,11 @@ template <typename... Args>
void WebRequestNS::HandleSimpleEvent(SimpleEvent event,
extensions::WebRequestInfo* request_info,
Args... args) {
if (!base::Contains(simple_listeners_, event))
const auto iter = simple_listeners_.find(event);
if (iter == std::end(simple_listeners_))
return;
const auto& info = simple_listeners_[event];
const auto& info = iter->second;
if (!MatchesFilterCondition(request_info, info.url_patterns))
return;
@ -416,10 +417,11 @@ int WebRequestNS::HandleResponseEvent(ResponseEvent event,
net::CompletionOnceCallback callback,
Out out,
Args... args) {
if (!base::Contains(response_listeners_, event))
const auto iter = response_listeners_.find(event);
if (iter == std::end(response_listeners_))
return net::OK;
const auto& info = response_listeners_[event];
const auto& info = iter->second;
if (!MatchesFilterCondition(request_info, info.url_patterns))
return net::OK;
@ -441,7 +443,8 @@ template <typename T>
void WebRequestNS::OnListenerResult(uint64_t id,
T out,
v8::Local<v8::Value> response) {
if (!base::Contains(callbacks_, id))
const auto iter = callbacks_.find(id);
if (iter == std::end(callbacks_))
return;
int result = net::OK;
@ -461,7 +464,7 @@ void WebRequestNS::OnListenerResult(uint64_t id,
// asynchronously, because it used to work on IO thread before NetworkService.
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(std::move(callbacks_[id]), result));
callbacks_.erase(id);
callbacks_.erase(iter);
}
// static