mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 00:05:36 +00:00
Bug 1436902 part 1. Add a new NS_INLINE_DECL_REFCOUNTING_INHERITED macro that declares addref/release only for logging purposes. r=mccr8
MozReview-Commit-ID: JTT5RzJ7IVu
This commit is contained in:
parent
10ced4c995
commit
f86a73ccc5
@ -1128,25 +1128,31 @@ namespace mozilla {
|
||||
class Runnable;
|
||||
} // namespace mozilla
|
||||
|
||||
#define NS_IMPL_ADDREF_INHERITED(Class, Super) \
|
||||
NS_IMETHODIMP_(MozExternalRefCountType) Class::AddRef(void) \
|
||||
{ \
|
||||
#define NS_IMPL_ADDREF_INHERITED_GUTS(Class, Super) \
|
||||
MOZ_ASSERT_TYPE_OK_FOR_REFCOUNTING(Class) \
|
||||
nsrefcnt r = Super::AddRef(); \
|
||||
if (!mozilla::IsConvertible<Class*, mozilla::Runnable*>::value) { \
|
||||
NS_LOG_ADDREF(this, r, #Class, sizeof(*this)); \
|
||||
} \
|
||||
return r; \
|
||||
return r /* Purposefully no trailing semicolon */
|
||||
|
||||
#define NS_IMPL_ADDREF_INHERITED(Class, Super) \
|
||||
NS_IMETHODIMP_(MozExternalRefCountType) Class::AddRef(void) \
|
||||
{ \
|
||||
NS_IMPL_ADDREF_INHERITED_GUTS(Class, Super); \
|
||||
}
|
||||
|
||||
#define NS_IMPL_RELEASE_INHERITED(Class, Super) \
|
||||
NS_IMETHODIMP_(MozExternalRefCountType) Class::Release(void) \
|
||||
{ \
|
||||
#define NS_IMPL_RELEASE_INHERITED_GUTS(Class, Super) \
|
||||
nsrefcnt r = Super::Release(); \
|
||||
if (!mozilla::IsConvertible<Class*, mozilla::Runnable*>::value) { \
|
||||
NS_LOG_RELEASE(this, r, #Class); \
|
||||
} \
|
||||
return r; \
|
||||
return r /* Purposefully no trailing semicolon */
|
||||
|
||||
#define NS_IMPL_RELEASE_INHERITED(Class, Super) \
|
||||
NS_IMETHODIMP_(MozExternalRefCountType) Class::Release(void) \
|
||||
{ \
|
||||
NS_IMPL_RELEASE_INHERITED_GUTS(Class, Super); \
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1209,6 +1215,25 @@ NS_IMETHODIMP_(MozExternalRefCountType) Class::Release(void) \
|
||||
NS_IMPL_ADDREF_INHERITED(aClass, aSuper) \
|
||||
NS_IMPL_RELEASE_INHERITED(aClass, aSuper)
|
||||
|
||||
/**
|
||||
* A macro to declare and implement addref/release for a class that does not
|
||||
* need to QI to any interfaces other than the ones its parent class QIs to.
|
||||
* This can be a no-op when we're not building with refcount logging, because in
|
||||
* that case there's no real reason to have a separate addref/release on this
|
||||
* class.
|
||||
*/
|
||||
#if defined(NS_BUILD_REFCNT_LOGGING)
|
||||
#define NS_INLINE_DECL_REFCOUNTING_INHERITED(Class, Super) \
|
||||
NS_IMETHOD_(MozExternalRefCountType) AddRef() override { \
|
||||
NS_IMPL_ADDREF_INHERITED_GUTS(Class, Super); \
|
||||
} \
|
||||
NS_IMETHOD_(MozExternalRefCountType) Release() override { \
|
||||
NS_IMPL_RELEASE_INHERITED_GUTS(Class, Super); \
|
||||
}
|
||||
#else // NS_BUILD_REFCNT_LOGGING
|
||||
#define NS_INLINE_DECL_REFCOUNTING_INHERITED(Class, Super)
|
||||
#endif // NS_BUILD_REFCNT_LOGGINGx
|
||||
|
||||
/*
|
||||
* Macro to glue together a QI that starts with an interface table
|
||||
* and segues into an interface map (e.g. it uses singleton classinfo
|
||||
|
Loading…
Reference in New Issue
Block a user