Source code
Revision control
Copy as Markdown
Other Tools
<?xml version="1.0" encoding="UTF-8" standalone="no"?>↩
<diagram program="umlet" version="15.0.0">↩
<zoom_level>10</zoom_level>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>80</x>↩
<y>370</y>↩
<w>340</w>↩
<h>190</h>↩
</coordinates>↩
<panel_attributes>ThreadInfo↩
--↩
-mName: nsCString↩
-mRegisterTime: TimeStamp↩
-mThreadId: int↩
-mIsMainThread: bool↩
--↩
NS_INLINE_DECL_THREADSAFE_REFCOUNTING↩
+Name()↩
+RegisterTime()↩
+ThreadId()↩
+IsMainThread()↩
</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>470</x>↩
<y>300</y>↩
<w>600</w>↩
<h>260</h>↩
</coordinates>↩
<panel_attributes>RacyRegisteredThread↩
--↩
-mProfilingStackOwner: NotNull<RefPtr<ProfilingStackOwner>>↩
-mThreadId↩
-mSleep: Atomic<int> /* AWAKE, SLEEPING_NOT_OBSERVED, SLEEPING_OBSERVED */↩
-mIsBeingProfiled: Atomic<bool, Relaxed>↩
--↩
+SetIsBeingProfiled()↩
+IsBeingProfiled()↩
+ReinitializeOnResume()↩
+CanDuplicateLastSampleDueToSleep()↩
+SetSleeping()↩
+SetAwake()↩
+IsSleeping()↩
+ThreadId()↩
+ProfilingStack()↩
+ProfilingStackOwner()</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>470</x>↩
<y>650</y>↩
<w>350</w>↩
<h>360</h>↩
</coordinates>↩
<panel_attributes>RegisteredThread↩
--↩
-mPlatformData: UniquePlatformData↩
-mStackTop: const void*↩
-mThread: nsCOMPtr<nsIThread>↩
-mContext: JSContext*↩
-mJSSampling: enum {INACTIVE, ACTIVE_REQUESTED, ACTIVE, INACTIVE_REQUESTED}↩
-mmJSFlags: uint32_t↩
--↩
+RacyRegisteredThread()↩
+GetPlatformData()↩
+StackTop()↩
+GetRunningEventDelay()↩
+SizeOfIncludingThis()↩
+SetJSContext()↩
+ClearJSContext()↩
+GetJSContext()↩
+Info(): RefPtr<ThreadInfo>↩
+GetEventTarget(): nsCOMPtr<nsIEventTarget>↩
+ResetMainThread(nsIThread*)↩
+StartJSSampling()↩
+StopJSSampling()↩
+PollJSSampling()↩
</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>750</x>↩
<y>550</y>↩
<w>180</w>↩
<h>120</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<<-↩
mRacyRegisteredThread</panel_attributes>↩
<additional_attributes>10.0;100.0;10.0;10.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>290</x>↩
<y>550</y>↩
<w>230</w>↩
<h>120</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mThreadInfo: RefPtr<></panel_attributes>↩
<additional_attributes>210.0;100.0;10.0;10.0</additional_attributes>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>70</x>↩
<y>660</y>↩
<w>340</w>↩
<h>190</h>↩
</coordinates>↩
<panel_attributes>PageInformation↩
--↩
-mBrowsingContextID: uint64_t↩
-mInnerWindowID: uint64_t↩
-mUrl: nsCString↩
-mEmbedderInnerWindowID: uint64_t↩
--↩
NS_INLINE_DECL_THREADSAFE_REFCOUNTING↩
+SizeOfIncludingThis(MallocSizeOf)↩
+Equals(PageInformation*)↩
+StreamJSON(SpliceableJSONWriter&)↩
+InnerWindowID()↩
+BrowsingContextID()↩
+Url()↩
+EmbedderInnerWindowID()↩
+BufferPositionWhenUnregistered(): Maybe<uint64_t>↩
+NotifyUnregistered(aBufferPosition: uint64_t)</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>760</x>↩
<y>1890</y>↩
<w>570</w>↩
<h>120</h>↩
</coordinates>↩
<panel_attributes>ProfilerBacktrace↩
--↩
-mName: UniqueFreePtr<char>↩
-mThreadId: int↩
-mProfileChunkedBuffer: UniquePtr<ProfileChunkedBuffer>↩
-mProfileBuffer: UniquePtr<ProfileBuffer>↩
--↩
+StreamJSON(SpliceableJSONWriter&, aProcessStartTime: TimeStamp, UniqueStacks&)↩
</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>20</x>↩
<y>2140</y>↩
<w>620</w>↩
<h>580</h>↩
</coordinates>↩
<panel_attributes>ProfileChunkedBuffer↩
--↩
-mMutex: BaseProfilerMaybeMutex↩
-mChunkManager: ProfileBufferChunkManager*↩
-mOwnedChunkManager: UniquePtr<ProfileBufferChunkManager>↩
-mCurrentChunk: UniquePtr<ProfileBufferChunk>↩
-mNextChunks: UniquePtr<ProfileBufferChunk>↩
-mRequestedChunkHolder: RefPtr<RequestedChunkRefCountedHolder>↩
-mNextChunkRangeStart: ProfileBufferIndex↩
-mRangeStart: Atomic<ProfileBufferIndex, ReleaseAcquire>↩
-mRangeEnd: ProfileBufferIndex↩
-mPushedBlockCount: uint64_t↩
-mClearedBlockCount: Atomic<uint64_t, ReleaseAcquire>↩
--↩
+Byte = ProfileBufferChunk::Byte↩
+Length = ProfileBufferChunk::Length↩
+IsThreadSafe()↩
+IsInSession()↩
+ResetChunkManager()↩
+SetChunkManager()↩
+Clear()↩
+BufferLength(): Maybe<size_t>↩
+SizeOfExcludingThis(MallocSizeOf)↩
+SizeOfIncludingThis(MallocSizeOf)↩
+GetState()↩
+IsThreadSafeAndLockedOnCurrentThread(): bool↩
+LockAndRun(Callback&&)↩
+ReserveAndPut(CallbackEntryBytes&&, Callback<auto(Maybe<ProfileBufferEntryWriter>&)>&&)↩
+Put(aEntryBytes: Length, Callback<auto(Maybe<ProfileBufferEntryWriter>&)>&&)↩
+PutFrom(const void*, Length)↩
+PutObjects(const Ts&...)↩
+PutObject(const T&)↩
+GetAllChunks()↩
+Read(Callback<void(Reader&)>&&): bool↩
+ReadEach(Callback<void(ProfileBufferEntryReader& [, ProfileBufferBlockIndex])>&&)↩
+ReadAt(ProfileBufferBlockIndex, Callback<void(Maybe<ProfileBufferEntryReader>&&)>&&)↩
+AppendContents</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>810</x>↩
<y>2100</y>↩
<w>500</w>↩
<h>620</h>↩
</coordinates>↩
<panel_attributes>ProfileBufferChunk↩
--↩
+Header: {↩
mOffsetFirstBlock; mOffsetPastLastBlock; mDoneTimeStamp;↩
mBufferBytes; mBlockCount; mRangeStart; mProcessId;↩
}↩
-InternalHeader: { mHeader: Header; mNext: UniquePtr<ProfileBufferChunk>; }↩
--↩
-mInternalHeader: InternalHeader↩
-mBuffer: Byte /* First byte */↩
--↩
+Byte = uint8_t↩
+Length = uint32_t↩
+SpanOfBytes = Span<Byte>↩
/+Create(aMinBufferBytes: Length): UniquePtr<ProfileBufferChunk>/↩
+ReserveInitialBlockAsTail(Length): SpanOfBytes↩
+ReserveBlock(Length): { SpanOfBytes, ProfileBufferBlockIndex }↩
+MarkDone()↩
+MarkRecycled()↩
+ChunkHeader()↩
+BufferBytes()↩
+ChunkBytes()↩
+SizeOfExcludingThis(MallocSizeOf)↩
+SizeOfIncludingThis(MallocSizeOf)↩
+RemainingBytes(): Length↩
+OffsetFirstBlock(): Length↩
+OffsetPastLastBlock(): Length↩
+BlockCount(): Length↩
+ProcessId(): int↩
+SetProcessId(int)↩
+RangeStart(): ProfileBufferIndex↩
+SetRangeStart(ProfileBufferIndex)↩
+BufferSpan(): Span<const Byte>↩
+ByteAt(aOffset: Length)↩
+GetNext(): maybe-const ProfileBufferChunk*↩
+ReleaseNext(): UniquePtr<ProfileBufferChunk>↩
+InsertNext(UniquePtr<ProfileBufferChunk>&&)↩
+Last(): const ProfileBufferChunk*↩
+SetLast(UniquePtr<ProfileBufferChunk>&&)↩
/+Join(UniquePtr<ProfileBufferChunk>&&, UniquePtr<ProfileBufferChunk>&&)/↩
</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>120</x>↩
<y>2850</y>↩
<w>570</w>↩
<h>350</h>↩
</coordinates>↩
<panel_attributes>ProfileBufferEntryReader↩
--↩
-mCurrentSpan: SpanOfConstBytes↩
-mNextSpanOrEmpty: SpanOfConstBytes↩
-mCurrentBlockIndex: ProfileBufferBlockIndex↩
-mNextBlockIndex: ProfileBufferBlockIndex↩
--↩
+RemainingBytes(): Length↩
+SetRemainingBytes(Length)↩
+CurrentBlockIndex(): ProfileBufferBlockIndex↩
+NextBlockIndex(): ProfileBufferBlockIndex↩
+EmptyIteratorAtOffset(Length): ProfileBufferEntryReader↩
+operator*(): const Byte&↩
+operator++(): ProfileBufferEntryReader&↩
+operator+=(Length): ProfileBufferEntryReader&↩
+operator==(const ProfileBufferEntryReader&)↩
+operator!=(const ProfileBufferEntryReader&)↩
+ReadULEB128<T>(): T↩
+ReadBytes(void*, Length)↩
+ReadIntoObject(T&)↩
+ReadIntoObjects(Ts&...)↩
+ReadObject<T>(): T</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>740</x>↩
<y>2850</y>↩
<w>570</w>↩
<h>300</h>↩
</coordinates>↩
<panel_attributes>ProfileBufferEntryWriter↩
--↩
-mCurrentSpan: SpanOfBytes↩
-mNextSpanOrEmpty: SpanOfBytes↩
-mCurrentBlockIndex: ProfileBufferBlockIndex↩
-mNextBlockIndex: ProfileBufferBlockIndex↩
--↩
+RemainingBytes(): Length↩
+CurrentBlockIndex(): ProfileBufferBlockIndex↩
+NextBlockIndex(): ProfileBufferBlockIndex↩
+operator*(): Byte&↩
+operator++(): ProfileBufferEntryReader&↩
+operator+=(Length): ProfileBufferEntryReader&↩
/+ULEB128Size(T): unsigned/↩
+WriteULEB128(T)↩
/+SumBytes(const Ts&...): Length/↩
+WriteFromReader(ProfileBufferEntryReader&, Length)↩
+WriteObject(const T&)↩
+WriteObjects(const T&)</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>120</x>↩
<y>3270</y>↩
<w>570</w>↩
<h>80</h>↩
</coordinates>↩
<panel_attributes>ProfileBufferEntryReader::Deserializer<T>↩
/to be specialized for all types read from ProfileBufferEntryReader/↩
--↩
/+ReadInto(ProfileBufferEntryReader&, T&)/↩
/+Read<T>(ProfileBufferEntryReader&): T/</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>740</x>↩
<y>3270</y>↩
<w>570</w>↩
<h>80</h>↩
</coordinates>↩
<panel_attributes>ProfileBufferEntryWriter::Serializer<T>↩
/to be specialized for all types written into ProfileBufferEntryWriter/↩
--↩
/+Bytes(const T&): Length/↩
/+Write(ProfileBufferEntryWriter&, const T&)/</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>330</x>↩
<y>2710</y>↩
<w>110</w>↩
<h>160</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<creates>></panel_attributes>↩
<additional_attributes>10.0;10.0;60.0;140.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>430</x>↩
<y>2710</y>↩
<w>360</w>↩
<h>160</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<creates>></panel_attributes>↩
<additional_attributes>10.0;10.0;340.0;140.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>660</x>↩
<y>2710</y>↩
<w>260</w>↩
<h>160</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<points into>></panel_attributes>↩
<additional_attributes>10.0;140.0;240.0;10.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>870</x>↩
<y>2710</y>↩
<w>140</w>↩
<h>160</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<points into>></panel_attributes>↩
<additional_attributes>10.0;140.0;80.0;10.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>630</x>↩
<y>2170</y>↩
<w>200</w>↩
<h>40</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mCurrentChunk</panel_attributes>↩
<additional_attributes>10.0;20.0;180.0;20.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>630</x>↩
<y>2230</y>↩
<w>200</w>↩
<h>40</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mNextChunks</panel_attributes>↩
<additional_attributes>10.0;20.0;180.0;20.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>1100</x>↩
<y>2030</y>↩
<w>170</w>↩
<h>90</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mInternalHeader.mNext</panel_attributes>↩
<additional_attributes>10.0;70.0;10.0;20.0;150.0;20.0;150.0;70.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>490</x>↩
<y>3190</y>↩
<w>70</w>↩
<h>100</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<uses>></panel_attributes>↩
<additional_attributes>10.0;10.0;10.0;80.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>580</x>↩
<y>3190</y>↩
<w>230</w>↩
<h>100</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<uses>></panel_attributes>↩
<additional_attributes>10.0;10.0;210.0;80.0</additional_attributes>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>50</x>↩
<y>1620</y>↩
<w>570</w>↩
<h>410</h>↩
</coordinates>↩
<panel_attributes>ProfileBuffer↩
--↩
-mFirstSamplingTimeNs: double↩
-mLastSamplingTimeNs: double↩
-mIntervalNs, etc.: ProfilerStats↩
--↩
+IsThreadSafe(): bool↩
+AddEntry(const ProfileBufferEntry&): uint64_t↩
+AddThreadIdEntry(int): uint64_t↩
+PutObjects(Kind, const Ts&...): ProfileBufferBlockIndex↩
+CollectCodeLocation(...)↩
+AddJITInfoForRange(...)↩
+StreamSamplesToJSON(SpliceableJSONWriter&, aThreadId: int, aSinceTime: double, UniqueStacks&)↩
+StreamMarkersToJSON(SpliceableJSONWriter&, ...)↩
+StreamPausedRangesToJSON(SpliceableJSONWriter&, aSinceTime: double)↩
+StreamProfilerOverheadToJSON(SpliceableJSONWriter&, ...)↩
+StreamCountersToJSON(SpliceableJSONWriter&, ...)↩
+DuplicateLsstSample↩
+DiscardSamplesBeforeTime(aTime: double)↩
+GetEntry(aPosition: uint64_t): ProfileBufferEntry↩
+SizeOfExcludingThis(MallocSizeOf)↩
+SizeOfIncludingThis(MallocSizeOf)↩
+CollectOverheadStats(...)↩
+GetProfilerBufferInfo(): ProfilerBufferInfo↩
+BufferRangeStart(): uint64_t↩
+BufferRangeEnd(): uint64_t</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>690</x>↩
<y>1620</y>↩
<w>230</w>↩
<h>60</h>↩
</coordinates>↩
<panel_attributes>ProfileBufferEntry↩
--↩
+mKind: Kind↩
+mStorage: uint8_t[kNumChars=8]</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>930</x>↩
<y>1620</y>↩
<w>440</w>↩
<h>130</h>↩
</coordinates>↩
<panel_attributes>UniqueJSONStrings↩
--↩
-mStringTableWriter: SpliceableChunkedJSONWriter↩
-mStringHashToIndexMap: HashMap<HashNumber, uint32_t>↩
--↩
+SpliceStringTableElements(SpliceableJSONWriter&)↩
+WriteProperty(JSONWriter&, aName: const char*, aStr: const char*)↩
+WriteElement(JSONWriter&, aStr: const char*)↩
+GetOrAddIndex(const char*): uint32_t</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>680</x>↩
<y>1760</y>↩
<w>470</w>↩
<h>110</h>↩
</coordinates>↩
<panel_attributes>UniqueStack↩
--↩
-mFrameTableWriter: SpliceableChunkedJSONWriter↩
-mFrameToIndexMap: HashMap<FrameKey, uint32_t, FrameKeyHasher>↩
-mStackTableWriter: SpliceableChunkedJSONWriter↩
-mStackToIndexMap: HashMap<StackKey, uint32_t, StackKeyHasher>↩
-mJITInfoRanges: Vector<JITFrameInfoForBufferRange></panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>320</x>↩
<y>2020</y>↩
<w>230</w>↩
<h>140</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mEntries: ProfileChunkedBuffer&</panel_attributes>↩
<additional_attributes>10.0;10.0;10.0;120.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>610</x>↩
<y>1640</y>↩
<w>100</w>↩
<h>40</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<uses>></panel_attributes>↩
<additional_attributes>10.0;20.0;80.0;20.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>610</x>↩
<y>1710</y>↩
<w>340</w>↩
<h>40</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<uses>></panel_attributes>↩
<additional_attributes>10.0;20.0;320.0;20.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>610</x>↩
<y>1800</y>↩
<w>90</w>↩
<h>40</h>↩
</coordinates>↩
<panel_attributes>lt=.>↩
<<uses>></panel_attributes>↩
<additional_attributes>10.0;20.0;70.0;20.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>610</x>↩
<y>1900</y>↩
<w>170</w>↩
<h>40</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mProfileBuffer</panel_attributes>↩
<additional_attributes>150.0;20.0;10.0;20.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>590</x>↩
<y>1940</y>↩
<w>250</w>↩
<h>220</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mProfileChunkedBuffer</panel_attributes>↩
<additional_attributes>170.0;10.0;10.0;200.0</additional_attributes>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>20</x>↩
<y>1030</y>↩
<w>490</w>↩
<h>550</h>↩
</coordinates>↩
<panel_attributes>CorePS↩
--↩
/-sInstance: CorePS*/↩
-mMainThreadId: int↩
-mProcessStartTime: TimeStamp↩
-mCoreBuffer: ProfileChunkedBuffer↩
-mRegisteredThreads: Vector<UniquePtr<RegisteredThread>>↩
-mRegisteredPages: Vector<RefPtr<PageInformation>>↩
-mCounters: Vector<BaseProfilerCount*>↩
-mLul: UniquePtr<lul::LUL> /* linux only */↩
-mProcessName: nsAutoCString↩
-mJsFrames: JsFrameBuffer↩
--↩
+Create↩
+Destroy↩
+Exists(): bool↩
+AddSizeOf(...)↩
+MainThreadId()↩
+ProcessStartTime()↩
+CoreBuffer()↩
+RegisteredThreads(PSLockRef)↩
+JsFrames(PSLockRef)↩
/+AppendRegisteredThread(PSLockRef, UniquePtr<RegisteredThread>)/↩
/+RemoveRegisteredThread(PSLockRef, RegisteredThread*)/↩
+RegisteredPages(PSLockRef)↩
/+AppendRegisteredPage(PSLockRef, RefPtr<PageInformation>)/↩
/+RemoveRegisteredPage(PSLockRef, aRegisteredInnerWindowID: uint64_t)/↩
/+ClearRegisteredPages(PSLockRef)/↩
+Counters(PSLockRef)↩
+AppendCounter↩
+RemoveCounter↩
+Lul(PSLockRef)↩
+SetLul(PSLockRef, UniquePtr<lul::LUL>)↩
+ProcessName(PSLockRef)↩
+SetProcessName(PSLockRef, const nsACString&)↩
</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>20</x>↩
<y>1570</y>↩
<w>110</w>↩
<h>590</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<<-↩
mCoreBuffer</panel_attributes>↩
<additional_attributes>10.0;10.0;10.0;570.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>160</x>↩
<y>840</y>↩
<w>150</w>↩
<h>210</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mRegisteredPages</panel_attributes>↩
<additional_attributes>10.0;190.0;10.0;10.0</additional_attributes>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>250</x>↩
<y>840</y>↩
<w>240</w>↩
<h>210</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mRegisteredThreads</panel_attributes>↩
<additional_attributes>10.0;190.0;220.0;10.0</additional_attributes>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>920</x>↩
<y>860</y>↩
<w>340</w>↩
<h>190</h>↩
</coordinates>↩
<panel_attributes>SamplerThread↩
--↩
-mSampler: Sampler↩
-mActivityGeneration: uint32_t↩
-mIntervalMicroseconds: int↩
-mThread /* OS-specific */↩
-mPostSamplingCallbackList: UniquePtr<PostSamplingCallbackListItem>↩
--↩
+Run()↩
+Stop(PSLockRef)↩
+AppendPostSamplingCallback(PSLockRef, PostSamplingCallback&&)</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>1060</x>↩
<y>600</y>↩
<w>340</w>↩
<h>190</h>↩
</coordinates>↩
<panel_attributes>Sampler↩
--↩
-mOldSigprofHandler: sigaction↩
-mMyPid: int↩
-mSamplerTid: int↩
+sSigHandlerCoordinator↩
--↩
+Disable(PSLockRef)↩
+SuspendAndSampleAndResumeThread(PSLockRef, const RegisteredThread&, aNow: TimeStamp, const Func&)↩
</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>1190</x>↩
<y>780</y>↩
<w>90</w>↩
<h>100</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<<-↩
mSampler</panel_attributes>↩
<additional_attributes>10.0;80.0;10.0;10.0</additional_attributes>↩
</element>↩
<element>↩
<id>UMLClass</id>↩
<coordinates>↩
<x>610</x>↩
<y>1130</y>↩
<w>470</w>↩
<h>400</h>↩
</coordinates>↩
<panel_attributes>ActivePS↩
--↩
/-sInstance: ActivePS*/↩
-mGeneration: const uint32_t↩
/-sNextGeneration: uint32_t/↩
-mCapacity: const PowerOfTwo↩
-mDuration: const Maybe<double>↩
-mInterval: const double /* milliseconds */↩
-mFeatures: const uint32_t↩
-mFilters: Vector<std::string>↩
-mActiveBrowsingContextID: uint64_t↩
-mProfileBufferChunkManager: ProfileBufferChunkManagerWithLocalLimit↩
-mProfileBuffer: ProfileBuffer↩
-mLiveProfiledThreads: Vector<LiveProfiledThreadData>↩
-mDeadProfiledThreads: Vector<UniquePtr<ProfiledThreadData>>↩
-mDeadProfiledPages: Vector<RefPtr<PageInformation>>↩
-mSamplerThread: SamplerThread* const↩
-mInterposeObserver: RefPtr<ProfilerIOInterposeObserver>↩
-mPaused: bool↩
-mWasPaused: bool /* linux */↩
-mBaseProfileThreads: UniquePtr<char[]>↩
-mGeckoIndexWhenBaseProfileAdded: ProfileBufferBlockIndex↩
-mExitProfiles: Vector<ExitProfile>↩
--↩
+</panel_attributes>↩
<additional_attributes/>↩
</element>↩
<element>↩
<id>Relation</id>↩
<coordinates>↩
<x>970</x>↩
<y>1040</y>↩
<w>140</w>↩
<h>110</h>↩
</coordinates>↩
<panel_attributes>lt=<<<<-↩
mSamplerThread</panel_attributes>↩
<additional_attributes>10.0;90.0;10.0;10.0</additional_attributes>↩
</element>↩
<element>↩
<id>UMLNote</id>↩
<coordinates>↩
<x>500</x>↩
<y>160</y>↩
<w>510</w>↩
<h>100</h>↩
</coordinates>↩
<panel_attributes>bg=red↩
This document pre-dates the generated image profilerclasses-20220913.png!↩
Unfortunately, the changes to make the image were lost.↩
↩
This previous version may still be useful to start reconstructing the image,↩
if there is a need to update it.</panel_attributes>↩
<additional_attributes/>↩
</element>↩
</diagram>↩