summaryrefslogtreecommitdiffstats
path: root/base/observer_list.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/observer_list.h')
-rw-r--r--base/observer_list.h18
1 files changed, 12 insertions, 6 deletions
diff --git a/base/observer_list.h b/base/observer_list.h
index d30cc6e..22b9ed2 100644
--- a/base/observer_list.h
+++ b/base/observer_list.h
@@ -203,14 +203,20 @@ class ObserverList : public ObserverListBase<ObserverType> {
DCHECK_EQ(ObserverListBase<ObserverType>::size(), 0U);
}
}
+
+ bool might_have_observers() const {
+ return ObserverListBase<ObserverType>::size() != 0;
+ }
};
-#define FOR_EACH_OBSERVER(ObserverType, observer_list, func) \
- do { \
- ObserverListBase<ObserverType>::Iterator it(observer_list); \
- ObserverType* obs; \
- while ((obs = it.GetNext()) != NULL) \
- obs->func; \
+#define FOR_EACH_OBSERVER(ObserverType, observer_list, func) \
+ do { \
+ if ((observer_list).might_have_observers()) { \
+ ObserverListBase<ObserverType>::Iterator it(observer_list); \
+ ObserverType* obs; \
+ while ((obs = it.GetNext()) != NULL) \
+ obs->func; \
+ } \
} while (0)
#endif // BASE_OBSERVER_LIST_H__