зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1141614 - Part 1: Maintain a list of docshells whose timeline markers are being observed; r=smaug
This commit is contained in:
Родитель
492600a381
Коммит
9a58f89b9d
|
@ -944,7 +944,7 @@ nsDocShell::nsDocShell()
|
|||
|
||||
nsDocShell::~nsDocShell()
|
||||
{
|
||||
MOZ_ASSERT(!mProfileTimelineRecording);
|
||||
MOZ_ASSERT(!IsObserved());
|
||||
|
||||
Destroy();
|
||||
|
||||
|
@ -2927,6 +2927,8 @@ nsDocShell::HistoryTransactionRemoved(int32_t aIndex)
|
|||
|
||||
unsigned long nsDocShell::gProfileTimelineRecordingsCount = 0;
|
||||
|
||||
mozilla::LinkedList<nsDocShell::ObservedDocShell>* nsDocShell::gObservedDocShells = nullptr;
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocShell::SetRecordProfileTimelineMarkers(bool aValue)
|
||||
{
|
||||
|
@ -2935,11 +2937,16 @@ nsDocShell::SetRecordProfileTimelineMarkers(bool aValue)
|
|||
if (aValue) {
|
||||
++gProfileTimelineRecordingsCount;
|
||||
UseEntryScriptProfiling();
|
||||
mProfileTimelineRecording = true;
|
||||
|
||||
MOZ_ASSERT(!mObserved);
|
||||
mObserved.reset(new ObservedDocShell(this));
|
||||
GetOrCreateObservedDocShells().insertFront(mObserved.get());
|
||||
} else {
|
||||
--gProfileTimelineRecordingsCount;
|
||||
UnuseEntryScriptProfiling();
|
||||
mProfileTimelineRecording = false;
|
||||
|
||||
mObserved.reset(nullptr);
|
||||
|
||||
ClearProfileTimelineMarkers();
|
||||
}
|
||||
}
|
||||
|
@ -2950,7 +2957,7 @@ nsDocShell::SetRecordProfileTimelineMarkers(bool aValue)
|
|||
NS_IMETHODIMP
|
||||
nsDocShell::GetRecordProfileTimelineMarkers(bool* aValue)
|
||||
{
|
||||
*aValue = mProfileTimelineRecording;
|
||||
*aValue = IsObserved();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -3090,7 +3097,7 @@ void
|
|||
nsDocShell::AddProfileTimelineMarker(const char* aName,
|
||||
TracingMetadata aMetaData)
|
||||
{
|
||||
if (mProfileTimelineRecording) {
|
||||
if (IsObserved()) {
|
||||
TimelineMarker* marker = new TimelineMarker(this, aName, aMetaData);
|
||||
mProfileTimelineMarkers.AppendElement(marker);
|
||||
}
|
||||
|
@ -3099,7 +3106,7 @@ nsDocShell::AddProfileTimelineMarker(const char* aName,
|
|||
void
|
||||
nsDocShell::AddProfileTimelineMarker(UniquePtr<TimelineMarker>&& aMarker)
|
||||
{
|
||||
if (mProfileTimelineRecording) {
|
||||
if (IsObserved()) {
|
||||
mProfileTimelineMarkers.AppendElement(Move(aMarker));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "mozilla/TimeStamp.h"
|
||||
#include "GeckoProfiler.h"
|
||||
#include "mozilla/dom/ProfileTimelineMarkerBinding.h"
|
||||
#include "mozilla/LinkedList.h"
|
||||
#include "jsapi.h"
|
||||
|
||||
// Helper Classes
|
||||
|
@ -266,6 +267,43 @@ public:
|
|||
// timeline markers
|
||||
static unsigned long gProfileTimelineRecordingsCount;
|
||||
|
||||
class ObservedDocShell : public mozilla::LinkedListElement<ObservedDocShell>
|
||||
{
|
||||
public:
|
||||
explicit ObservedDocShell(nsDocShell* aDocShell)
|
||||
: mDocShell(aDocShell)
|
||||
{ }
|
||||
|
||||
nsDocShell* operator*() const { return mDocShell.get(); }
|
||||
|
||||
private:
|
||||
nsRefPtr<nsDocShell> mDocShell;
|
||||
};
|
||||
|
||||
private:
|
||||
static mozilla::LinkedList<ObservedDocShell>* gObservedDocShells;
|
||||
|
||||
static mozilla::LinkedList<ObservedDocShell>& GetOrCreateObservedDocShells()
|
||||
{
|
||||
if (!gObservedDocShells) {
|
||||
gObservedDocShells = new mozilla::LinkedList<ObservedDocShell>();
|
||||
}
|
||||
return *gObservedDocShells;
|
||||
}
|
||||
|
||||
// Never null if timeline markers are being observed.
|
||||
mozilla::UniquePtr<ObservedDocShell> mObserved;
|
||||
|
||||
// Return true if timeline markers are being observed for this docshell. False
|
||||
// otherwise.
|
||||
bool IsObserved() const { return !!mObserved; }
|
||||
|
||||
public:
|
||||
static const mozilla::LinkedList<ObservedDocShell>& GetObservedDocShells()
|
||||
{
|
||||
return GetOrCreateObservedDocShells();
|
||||
}
|
||||
|
||||
// Tell the favicon service that aNewURI has the same favicon as aOldURI.
|
||||
static void CopyFavicon(nsIURI* aOldURI,
|
||||
nsIURI* aNewURI,
|
||||
|
@ -973,9 +1011,6 @@ private:
|
|||
// has been called without a matching NotifyRunToCompletionStop.
|
||||
uint32_t mJSRunToCompletionDepth;
|
||||
|
||||
// True if recording profiles.
|
||||
bool mProfileTimelineRecording;
|
||||
|
||||
nsTArray<mozilla::UniquePtr<TimelineMarker>> mProfileTimelineMarkers;
|
||||
|
||||
// Get rid of all the timeline markers accumulated so far
|
||||
|
|
Загрузка…
Ссылка в новой задаче