diff --git a/dom/base/PerformanceCompositeTiming.cpp b/dom/base/PerformanceCompositeTiming.cpp new file mode 100644 index 000000000000..48362ce2bd60 --- /dev/null +++ b/dom/base/PerformanceCompositeTiming.cpp @@ -0,0 +1,30 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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/. */ + +#include "PerformanceCompositeTiming.h" +#include "mozilla/dom/PerformanceCompositeTimingBinding.h" + +using namespace mozilla::dom; + +PerformanceCompositeTiming::PerformanceCompositeTiming(nsISupports* aParent, + const nsAString& aName, + const DOMHighResTimeStamp& aStartTime, + uint32_t aSourceFrameNumber) +: PerformanceEntry(aParent, aName, NS_LITERAL_STRING("composite")) +, mStartTime(aStartTime) +, mSourceFrameNumber(aSourceFrameNumber) +{ + MOZ_ASSERT(aParent, "Parent performance object should be provided"); +} + +PerformanceCompositeTiming::~PerformanceCompositeTiming() +{ +} + +JSObject* +PerformanceCompositeTiming::WrapObject(JSContext* aCx, JS::Handle aGivenProto) +{ + return PerformanceCompositeTimingBinding::Wrap(aCx, this, aGivenProto); +} diff --git a/dom/base/PerformanceCompositeTiming.h b/dom/base/PerformanceCompositeTiming.h new file mode 100644 index 000000000000..deee1598ad46 --- /dev/null +++ b/dom/base/PerformanceCompositeTiming.h @@ -0,0 +1,44 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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_dom_performancecompositetiming_h___ +#define mozilla_dom_performancecompositetiming_h___ + +#include "mozilla/dom/PerformanceEntry.h" + +namespace mozilla { +namespace dom { + +// http://www.w3.org/TR/frame-timing/#performancecompositetiming +class PerformanceCompositeTiming final : public PerformanceEntry +{ +public: + PerformanceCompositeTiming(nsISupports* aParent, + const nsAString& aName, + const DOMHighResTimeStamp& aStartTime, + uint32_t aSourceFrameNumber); + + virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; + + virtual DOMHighResTimeStamp StartTime() const override + { + return mStartTime; + } + + uint32_t SourceFrameNumber() const + { + return mSourceFrameNumber; + } + +protected: + virtual ~PerformanceCompositeTiming(); + DOMHighResTimeStamp mStartTime; + uint32_t mSourceFrameNumber; +}; + +} // namespace dom +} // namespace mozilla + +#endif /* mozilla_dom_performancecompositetiming_h___ */ diff --git a/dom/base/PerformanceRenderTiming.cpp b/dom/base/PerformanceRenderTiming.cpp new file mode 100644 index 000000000000..c4f04f1dda93 --- /dev/null +++ b/dom/base/PerformanceRenderTiming.cpp @@ -0,0 +1,32 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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/. */ + +#include "PerformanceRenderTiming.h" +#include "mozilla/dom/PerformanceRenderTimingBinding.h" + +using namespace mozilla::dom; + +PerformanceRenderTiming::PerformanceRenderTiming(nsISupports* aParent, + const nsAString& aName, + const DOMHighResTimeStamp& aStartTime, + const DOMHighResTimeStamp& aDuration, + uint32_t aSourceFrameNumber) +: PerformanceEntry(aParent, aName, NS_LITERAL_STRING("render")) +, mStartTime(aStartTime) +, mDuration(aDuration) +, mSourceFrameNumber(aSourceFrameNumber) +{ + MOZ_ASSERT(aParent, "Parent performance object should be provided"); +} + +PerformanceRenderTiming::~PerformanceRenderTiming() +{ +} + +JSObject* +PerformanceRenderTiming::WrapObject(JSContext* aCx, JS::Handle aGivenProto) +{ + return PerformanceRenderTimingBinding::Wrap(aCx, this, aGivenProto); +} diff --git a/dom/base/PerformanceRenderTiming.h b/dom/base/PerformanceRenderTiming.h new file mode 100644 index 000000000000..63eeb106d931 --- /dev/null +++ b/dom/base/PerformanceRenderTiming.h @@ -0,0 +1,51 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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_dom_performancerendertiming_h___ +#define mozilla_dom_performancerendertiming_h___ + +#include "mozilla/dom/PerformanceEntry.h" + +namespace mozilla { +namespace dom { + +// http://www.w3.org/TR/frame-timing/#performancerendertiming +class PerformanceRenderTiming final : public PerformanceEntry +{ +public: + PerformanceRenderTiming(nsISupports* aParent, + const nsAString& aName, + const DOMHighResTimeStamp& aStartTime, + const DOMHighResTimeStamp& aDuration, + uint32_t aSourceFrameNumber); + + virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; + + virtual DOMHighResTimeStamp StartTime() const override + { + return mStartTime; + } + + virtual DOMHighResTimeStamp Duration() const override + { + return mDuration; + } + + uint32_t SourceFrameNumber() const + { + return mSourceFrameNumber; + } + +protected: + virtual ~PerformanceRenderTiming(); + DOMHighResTimeStamp mStartTime; + DOMHighResTimeStamp mDuration; + uint32_t mSourceFrameNumber; +}; + +} // namespace dom +} // namespace mozilla + +#endif /* mozilla_dom_performancerendertiming_h___ */ diff --git a/dom/base/moz.build b/dom/base/moz.build index 406a640c89ea..fc4bae3054eb 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build @@ -186,11 +186,13 @@ EXPORTS.mozilla.dom += [ 'NodeInfo.h', 'NodeInfoInlines.h', 'NodeIterator.h', + 'PerformanceCompositeTiming.h', 'PerformanceEntry.h', 'PerformanceMark.h', 'PerformanceMeasure.h', 'PerformanceObserver.h', 'PerformanceObserverEntryList.h', + 'PerformanceRenderTiming.h', 'PerformanceResourceTiming.h', 'ProcessGlobal.h', 'ResponsiveImageSelector.h', @@ -327,11 +329,13 @@ UNIFIED_SOURCES += [ 'nsXMLContentSerializer.cpp', 'nsXMLHttpRequest.cpp', 'nsXMLNameSpaceMap.cpp', + 'PerformanceCompositeTiming.cpp', 'PerformanceEntry.cpp', 'PerformanceMark.cpp', 'PerformanceMeasure.cpp', 'PerformanceObserver.cpp', 'PerformanceObserverEntryList.cpp', + 'PerformanceRenderTiming.cpp', 'PerformanceResourceTiming.cpp', 'PostMessageEvent.cpp', 'ProcessGlobal.cpp', diff --git a/dom/webidl/PerformanceCompositeTiming.webidl b/dom/webidl/PerformanceCompositeTiming.webidl new file mode 100644 index 000000000000..c7ccf10e4903 --- /dev/null +++ b/dom/webidl/PerformanceCompositeTiming.webidl @@ -0,0 +1,19 @@ +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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/. + * + * The origin of this IDL file is + * http://www.w3.org/TR/frame-timing/#performancecompositetiming + * + * Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C + * liability, trademark and document use rules apply. + */ + +[Pref="dom.enable_frame_timing"] +interface PerformanceCompositeTiming : PerformanceEntry +{ + readonly attribute unsigned long sourceFrameNumber; + + jsonifier; +}; diff --git a/dom/webidl/PerformanceRenderTiming.webidl b/dom/webidl/PerformanceRenderTiming.webidl new file mode 100644 index 000000000000..4ea4ebdd559b --- /dev/null +++ b/dom/webidl/PerformanceRenderTiming.webidl @@ -0,0 +1,19 @@ +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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/. + * + * The origin of this IDL file is + * http://www.w3.org/TR/frame-timing/#performancerendertiming + * + * Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C + * liability, trademark and document use rules apply. + */ + +[Pref="dom.enable_frame_timing"] +interface PerformanceRenderTiming : PerformanceEntry +{ + readonly attribute unsigned long sourceFrameNumber; + + jsonifier; +}; diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build index ebc780f40713..495557770e1c 100644 --- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -349,12 +349,14 @@ WEBIDL_FILES = [ 'PannerNode.webidl', 'ParentNode.webidl', 'Performance.webidl', + 'PerformanceCompositeTiming.webidl', 'PerformanceEntry.webidl', 'PerformanceMark.webidl', 'PerformanceMeasure.webidl', 'PerformanceNavigation.webidl', 'PerformanceObserver.webidl', 'PerformanceObserverEntryList.webidl', + 'PerformanceRenderTiming.webidl', 'PerformanceResourceTiming.webidl', 'PerformanceTiming.webidl', 'PeriodicWave.webidl',