From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- dom/media/webrtc/jsapi/WebrtcGlobalStatsHistory.h | 88 +++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 dom/media/webrtc/jsapi/WebrtcGlobalStatsHistory.h (limited to 'dom/media/webrtc/jsapi/WebrtcGlobalStatsHistory.h') diff --git a/dom/media/webrtc/jsapi/WebrtcGlobalStatsHistory.h b/dom/media/webrtc/jsapi/WebrtcGlobalStatsHistory.h new file mode 100644 index 0000000000..aa820e787d --- /dev/null +++ b/dom/media/webrtc/jsapi/WebrtcGlobalStatsHistory.h @@ -0,0 +1,88 @@ +/* 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/. */ + +#pragma once + +#include +#include "domstubs.h" +#include "mozilla/LinkedList.h" +#include "mozilla/UniquePtr.h" +#include "mozilla/dom/BindingDeclarations.h" +#include "mozilla/dom/DOMString.h" +#include "mozilla/dom/RTCStatsReportBinding.h" +#include "nsDOMNavigationTiming.h" +#include "nsHashKeys.h" +#include "nsTHashMap.h" + +namespace mozilla::dom { +class WebrtcGlobalStatisticsHistoryCallback; +struct RTCStatsReportInternal; + +struct WebrtcGlobalStatsHistory { + // History preferences + struct Pref { + static auto Enabled() -> bool; + static auto PollIntervalMs() -> uint32_t; + static auto StorageWindowS() -> uint32_t; + static auto PruneAfterM() -> uint32_t; + static auto ClosedStatsToRetain() -> uint32_t; + Pref() = delete; + ~Pref() = delete; + }; + + struct Entry { + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(Entry) + // We need to wrap the report in an element + struct ReportElement : public LinkedListElement { + UniquePtr report; + auto Timestamp() const -> DOMHighResTimeStamp; + virtual ~ReportElement() = default; + }; + // And likewise for the SDP history + struct SdpElement : public LinkedListElement { + RTCSdpHistoryEntryInternal sdp; + auto Timestamp() const -> DOMHighResTimeStamp; + virtual ~SdpElement() = default; + }; + + explicit Entry(const nsString& aPcid, const bool aIsLongTermStatsDisabled) + : mPcid(aPcid), mIsLongTermStatsDisabled(aIsLongTermStatsDisabled) {} + + nsString mPcid; + AutoCleanLinkedList mReports; + AutoCleanLinkedList mSdp; + bool mIsLongTermStatsDisabled; + bool mIsClosed = false; + + auto Since(const Maybe& aAfter) const + -> nsTArray; + auto SdpSince(const Maybe& aAfter) const + -> RTCSdpHistoryInternal; + + static auto MakeReportElement(UniquePtr aReport) + -> ReportElement*; + static auto MakeSdpElementsSince( + Sequence&& aSdpHistory, + const Maybe& aSdpAfter) + -> AutoCleanLinkedList; + auto Prune(const DOMHighResTimeStamp aBefore) -> void; + + private: + virtual ~Entry() = default; + }; + using StatsMap = nsTHashMap >; + static auto InitHistory(const nsAString& aPcId, + const bool aIsLongTermStatsDisabled) -> void; + static auto Record(UniquePtr aReport) -> void; + static auto CloseHistory(const nsAString& aPcId) -> void; + static auto GetHistory(const nsAString& aPcId) -> Maybe >; + static auto Clear() -> void; + static auto PcIds() -> dom::Sequence; + + WebrtcGlobalStatsHistory() = delete; + + private: + static auto Get() -> StatsMap&; +}; +} // namespace mozilla::dom -- cgit v1.2.3