Mark ObserverList DCHECK stacks as expensive
This puts ObserverList StackTrace gathering under EXPENSIVE_DCHECKS_ARE_ON() to be able to selectively exclude them without disabling DCHECKs. Anecdotal data (off-the-tracker) suggest that this is one of the top-10 overheads for running with DCHECKs right now. Bug: None Change-Id: Ife3cbc4326d84f8af1e3ea67e94791a02e35b304 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3017493 Reviewed-by: danakj <danakj@chromium.org> Commit-Queue: Peter Boström <pbos@chromium.org> Cr-Commit-Position: refs/heads/master@{#900121}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
ba6ecee942
commit
51b93219e5
@ -336,14 +336,17 @@ class ObserverList {
|
||||
}
|
||||
|
||||
std::string GetObserversCreationStackString() const {
|
||||
#if EXPENSIVE_DCHECKS_ARE_ON()
|
||||
std::string result;
|
||||
#if DCHECK_IS_ON()
|
||||
for (const auto& observer : observers_) {
|
||||
result += observer.GetCreationStackString();
|
||||
result += "\n";
|
||||
}
|
||||
#endif
|
||||
return result;
|
||||
#else
|
||||
return "For observer stack traces, build with "
|
||||
"`enable_expensive_dchecks=true`.";
|
||||
#endif // EXPENSIVE_DCHECKS_ARE_ON()
|
||||
}
|
||||
|
||||
std::vector<ObserverStorageType> observers_;
|
||||
|
@ -42,15 +42,15 @@ class BASE_EXPORT UncheckedObserverAdapter {
|
||||
return static_cast<ObserverType*>(adapter.ptr_);
|
||||
}
|
||||
|
||||
#if DCHECK_IS_ON()
|
||||
#if EXPENSIVE_DCHECKS_ARE_ON()
|
||||
std::string GetCreationStackString() const { return stack_.ToString(); }
|
||||
#endif
|
||||
#endif // EXPENSIVE_DCHECKS_ARE_ON()
|
||||
|
||||
private:
|
||||
void* ptr_;
|
||||
#if DCHECK_IS_ON()
|
||||
#if EXPENSIVE_DCHECKS_ARE_ON()
|
||||
base::debug::StackTrace stack_;
|
||||
#endif
|
||||
#endif // EXPENSIVE_DCHECKS_ARE_ON()
|
||||
};
|
||||
|
||||
// Adapter for CheckedObserver types so that they can use the same syntax as a
|
||||
|
Reference in New Issue
Block a user