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