mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-26 19:55:39 +00:00
042ac19155
Currently, the document entry is created at the first time when some JS code tries to access it. But for the case when server timing headers exist for a document loading channel, we need to create the document entry and save the server timing data in the document entry. If we don’t do this, the server timing data would be lost since the http channel will be deleted. MozReview-Commit-ID: B5ksAZvZACq --HG-- extra : rebase_source : 27bc6284ec417b2ff430a59cd9eeddc56b7a77ac
98 lines
3.0 KiB
C++
98 lines
3.0 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_dom_PerformanceMainThread_h
|
|
#define mozilla_dom_PerformanceMainThread_h
|
|
|
|
#include "Performance.h"
|
|
#include "PerformanceStorage.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
class PerformanceMainThread final : public Performance
|
|
, public PerformanceStorage
|
|
{
|
|
public:
|
|
PerformanceMainThread(nsPIDOMWindowInner* aWindow,
|
|
nsDOMNavigationTiming* aDOMTiming,
|
|
nsITimedChannel* aChannel);
|
|
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(PerformanceMainThread,
|
|
Performance)
|
|
|
|
PerformanceStorage* AsPerformanceStorage() override
|
|
{
|
|
return this;
|
|
}
|
|
|
|
virtual PerformanceTiming* Timing() override;
|
|
|
|
virtual PerformanceNavigation* Navigation() override;
|
|
|
|
virtual void AddEntry(nsIHttpChannel* channel,
|
|
nsITimedChannel* timedChannel) override;
|
|
|
|
void CreateDocumentEntry(nsITimedChannel* aChannel) override;
|
|
|
|
TimeStamp CreationTimeStamp() const override;
|
|
|
|
DOMHighResTimeStamp CreationTime() const override;
|
|
|
|
virtual void GetMozMemory(JSContext *aCx,
|
|
JS::MutableHandle<JSObject*> aObj) override;
|
|
|
|
virtual nsDOMNavigationTiming* GetDOMTiming() const override
|
|
{
|
|
return mDOMTiming;
|
|
}
|
|
|
|
virtual uint64_t GetRandomTimelineSeed() override
|
|
{
|
|
return GetDOMTiming()->GetRandomTimelineSeed();
|
|
}
|
|
|
|
virtual nsITimedChannel* GetChannel() const override
|
|
{
|
|
return mChannel;
|
|
}
|
|
|
|
// The GetEntries* methods need to be overriden in order to add the
|
|
// the document entry of type navigation.
|
|
virtual void GetEntries(nsTArray<RefPtr<PerformanceEntry>>& aRetval) override;
|
|
virtual void GetEntriesByType(const nsAString& aEntryType,
|
|
nsTArray<RefPtr<PerformanceEntry>>& aRetval) override;
|
|
virtual void GetEntriesByName(const nsAString& aName,
|
|
const Optional<nsAString>& aEntryType,
|
|
nsTArray<RefPtr<PerformanceEntry>>& aRetval) override;
|
|
|
|
protected:
|
|
~PerformanceMainThread();
|
|
|
|
void InsertUserEntry(PerformanceEntry* aEntry) override;
|
|
|
|
bool IsPerformanceTimingAttribute(const nsAString& aName) override;
|
|
|
|
DOMHighResTimeStamp
|
|
GetPerformanceTimingFromString(const nsAString& aTimingName) override;
|
|
|
|
void DispatchBufferFullEvent() override;
|
|
void EnsureDocEntry();
|
|
|
|
RefPtr<PerformanceEntry> mDocEntry;
|
|
RefPtr<nsDOMNavigationTiming> mDOMTiming;
|
|
nsCOMPtr<nsITimedChannel> mChannel;
|
|
RefPtr<PerformanceTiming> mTiming;
|
|
RefPtr<PerformanceNavigation> mNavigation;
|
|
JS::Heap<JSObject*> mMozMemory;
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_PerformanceMainThread_h
|