From 91ff5e401f4f389ada17b7a21fe6c4e4dc6df142 Mon Sep 17 00:00:00 2001 From: Honza Bambas Date: Wed, 17 Jun 2020 16:14:27 +0000 Subject: [PATCH] Bug 1638925 - Log names of nsINamed runnables, r=froydnj Differential Revision: https://phabricator.services.mozilla.com/D79620 --- xpcom/threads/nsThreadUtils.cpp | 20 ++++++++++++++++++++ xpcom/threads/nsThreadUtils.h | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/xpcom/threads/nsThreadUtils.cpp b/xpcom/threads/nsThreadUtils.cpp index b919360f9673..dbbb43a1e7fa 100644 --- a/xpcom/threads/nsThreadUtils.cpp +++ b/xpcom/threads/nsThreadUtils.cpp @@ -39,6 +39,8 @@ static LazyLogModule sEventDispatchAndRunLog("events"); #endif #define LOG1(args) \ MOZ_LOG(sEventDispatchAndRunLog, mozilla::LogLevel::Error, args) +#define LOG1_ENABLED() \ + MOZ_LOG_TEST(sEventDispatchAndRunLog, mozilla::LogLevel::Error) using namespace mozilla; @@ -619,6 +621,24 @@ LogTaskBase::Run::Run(T* aEvent, bool aWillRunAgain) LOG1(("EXEC %p", mEvent)); } +template <> +LogTaskBase::Run::Run(nsIRunnable* aEvent, bool aWillRunAgain) + : mEvent(aEvent), mWillRunAgain(aWillRunAgain) { + if (!LOG1_ENABLED()) { + return; + } + + nsCOMPtr named(do_QueryInterface(aEvent)); + if (!named) { + LOG1(("EXEC %p", mEvent)); + return; + } + + nsAutoCString name; + named->GetName(name); + LOG1(("EXEC %p [%s]", aEvent, name.BeginReading())); +} + template LogTaskBase::Run::~Run() { LOG1((mWillRunAgain ? "INTERRUPTED %p" : "DONE %p", mEvent)); diff --git a/xpcom/threads/nsThreadUtils.h b/xpcom/threads/nsThreadUtils.h index f3d9f0bf4d55..ece90506097d 100644 --- a/xpcom/threads/nsThreadUtils.h +++ b/xpcom/threads/nsThreadUtils.h @@ -1905,6 +1905,10 @@ class LogTaskBase { }; }; +// Specialized constructor; must be explicitly declared. +template <> +LogTaskBase::Run::Run(nsIRunnable* aEvent, bool aWillRunAgain); + class MicroTaskRunnable; typedef LogTaskBase LogRunnable;