Commit e19cd93e authored by Andrew Grieve's avatar Andrew Grieve Committed by Chromium LUCI CQ

ForEachObserver -> NotifyObservers to save binary size

Using function pointers rather than lambdas to address binary
size regression from the introduction of ForEachObserver.
Recovers 11,468 of the original 15,600 regression.

Bug: 1116531

Change-Id: I56352c559931859610b00a7dfad615052147ffbf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2639396
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: default avatarNasko Oskov <nasko@chromium.org>
Reviewed-by: default avatarAlexander Timin <altimin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845967}
parent 5733a963
......@@ -1443,14 +1443,15 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents,
void AddObserver(WebContentsObserver* observer);
void RemoveObserver(WebContentsObserver* observer);
template <class ForEachCallable>
void ForEachObserver(const ForEachCallable& callable) {
TRACE_EVENT0("content", "Iterating over WebContentsObservers");
// T1 must be a pointer to a WebContentsObserver method.
template <typename T1, typename... P1>
void NotifyObservers(T1 func, P1&&... args) {
TRACE_EVENT0("content", "WebContentsObserverList::NotifyObservers");
base::AutoReset<bool> scope(&is_notifying_observers_, true);
for (WebContentsObserver& observer : observers_) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("content.verbose"),
"Dispatching WebContentsObserver callback");
callable(&observer);
((observer).*(func))(std::forward<P1>(args)...);
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment