gecko-dev/ipc/mscom/MainThreadInvoker.h
Aaron Klotz eb3882c42d Bug 1409538: Add durations to MSCOM log; r=jimm
This patch adds two additional fields to each mscom log entry: The first is
the duration, in microseconds, of time spent in mscom overhead when executing
a call from the MTA on behalf of a remote client.

The second field is the duration, in microseconds, of time spent actually
executing the method within Gecko itself.

(In other words, the sum of the two fields will equal the total duration of
time spent executing the call.)

MozReview-Commit-ID: EhFieEPrhE5
2017-07-25 15:57:18 -06:00

60 lines
1.6 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_mscom_MainThreadInvoker_h
#define mozilla_mscom_MainThreadInvoker_h
#include "mozilla/AlreadyAddRefed.h"
#include "mozilla/Move.h"
#include "mozilla/StaticPtr.h"
#include "mozilla/TimeStamp.h"
#include "nsCOMPtr.h"
#include "nsThreadUtils.h"
#include <windows.h>
class nsIRunnable;
namespace mozilla {
namespace mscom {
class MainThreadInvoker
{
public:
MainThreadInvoker();
bool Invoke(already_AddRefed<nsIRunnable>&& aRunnable);
const TimeDuration& GetDuration() const { return mDuration; }
static HANDLE GetTargetThread() { return sMainThread; }
private:
TimeDuration mDuration;
static bool InitStatics();
static VOID CALLBACK MainThreadAPC(ULONG_PTR aParam);
static HANDLE sMainThread;
};
template <typename Class, typename... Args>
inline bool
InvokeOnMainThread(const char* aName,
Class* aObject, void (Class::*aMethod)(Args...),
Args... aArgs)
{
nsCOMPtr<nsIRunnable> runnable(
NewNonOwningRunnableMethod<Args...>(aName, aObject, aMethod,
Forward<Args>(aArgs)...));
MainThreadInvoker invoker;
return invoker.Invoke(runnable.forget());
}
} // namespace mscom
} // namespace mozilla
#endif // mozilla_mscom_MainThreadInvoker_h