Bug 969490. Add a Components.utils.now() that provides access in system JS to a monotonic timer, returning a fractional number milliseconds since process creation. r=bholley

This commit is contained in:
Boris Zbarsky 2014-09-04 15:26:21 -04:00
parent bbb89ac30e
commit f9250dfe0d
2 changed files with 17 additions and 1 deletions

View File

@ -122,7 +122,7 @@ interface ScheduledGCCallback : nsISupports
/**
* interface of Components.utils
*/
[scriptable, uuid(10bcc595-ccca-4ead-aae3-d12b47cd9fff)]
[scriptable, uuid(60b1ddd1-7567-41da-85f6-638096acd564)]
interface nsIXPCComponents_Utils : nsISupports
{
@ -642,6 +642,12 @@ interface nsIXPCComponents_Utils : nsISupports
[implicit_jscontext]
void setAddonInterposition(in ACString addonId, in nsIAddonInterposition interposition);
/*
* Return a fractional number of milliseconds from process
* startup, measured with a monotonic clock.
*/
double now();
};
/**

View File

@ -19,6 +19,8 @@
#include "mozilla/Attributes.h"
#include "mozilla/Preferences.h"
#include "nsJSEnvironment.h"
#include "mozilla/StartupTimeline.h"
#include "mozilla/TimeStamp.h"
#include "mozilla/XPTInterfaceInfoManager.h"
#include "mozilla/dom/DOMException.h"
#include "mozilla/dom/DOMExceptionBinding.h"
@ -3552,6 +3554,14 @@ nsXPCComponents_Utils::SetAddonInterposition(const nsACString &addonIdStr,
return NS_OK;
}
NS_IMETHODIMP
nsXPCComponents_Utils::Now(double *aRetval)
{
TimeStamp start = StartupTimeline::Get(StartupTimeline::PROCESS_CREATION);
*aRetval = (TimeStamp::Now() - start).ToMilliseconds();
return NS_OK;
}
/***************************************************************************/
/***************************************************************************/
/***************************************************************************/