1 <?xml version=
"1.0" encoding=
"UTF-8" standalone=
"no"?>
2 <diagram program=
"umlet" version=
"15.0.0">
3 <zoom_level>10</zoom_level>
12 <panel_attributes>ThreadRegistry::OffThreadRef
14 +UnlockedConstReaderCRef() const
15 +WithUnlockedConstReader(F
&& aF) const
16 +UnlockedConstReaderAndAtomicRWCRef() const
17 +WithUnlockedConstReaderAndAtomicRW(F
&& aF) const
18 +UnlockedConstReaderAndAtomicRWRef()
19 +WithUnlockedConstReaderAndAtomicRW(F
&& aF)
20 +UnlockedRWForLockedProfilerCRef()
21 +WithUnlockedRWForLockedProfiler(F
&& aF)
22 +UnlockedRWForLockedProfilerRef()
23 +WithUnlockedRWForLockedProfiler(F
&& aF)
24 +ConstLockedRWFromAnyThread()
25 +WithConstLockedRWFromAnyThread(F
&& aF)
26 +LockedRWFromAnyThread()
27 +WithLockedRWFromAnyThread(F
&& aF)
</panel_attributes>
28 <additional_attributes/>
38 <panel_attributes>ThreadRegistry
40 -sRegistryMutex: RegistryMutex (aka BaseProfilerSharedMutex)
41 /exclusive lock used during un/registration, shared lock for other accesses/
43 friend class ThreadRegistration
44 -Register(ThreadRegistration::OnThreadRef)
45 -Unregister(ThreadRegistration::OnThreadRef)
47 +WithOffThreadRef(ProfilerThreadId, auto
&& aF) static
48 +WithOffThreadRefOr(ProfilerThreadId, auto
&& aF, auto
&& aFallbackReturn) static: auto
</panel_attributes>
49 <additional_attributes/>
59 <panel_attributes>ThreadRegistration
61 -mDataMutex: DataMutex (aka BaseProfilerMutex)
63 -mIsRegistryLockedSharedOnThisThread: bool
64 -tlsThreadRegistration: MOZ_THREAD_LOCAL(ThreadRegistration*)
65 -GetTLS() static: tlsThreadRegistration*
66 -GetFromTLS() static: ThreadRegistration*
68 +ThreadRegistration(const char* aName, const void* aStackTop)
69 +~ThreadRegistration()
70 +RegisterThread(const char* aName, const void* aStackTop) static: ProfilingStack*
71 +UnregisterThread() static
72 +IsRegistered() static: bool
73 +GetOnThreadPtr() static OnThreadPtr
74 +WithOnThreadRefOr(auto
&& aF, auto
&& aFallbackReturn) static: auto
75 +IsDataMutexLockedOnCurrentThread() static: bool
</panel_attributes>
76 <additional_attributes/>
86 <panel_attributes>ThreadRegistration::OnThreadRef
88 +UnlockedConstReaderCRef() const
89 +WithUnlockedConstReader(auto
&& aF) const: auto
90 +UnlockedConstReaderAndAtomicRWCRef() const
91 +WithUnlockedConstReaderAndAtomicRW(auto
&& aF) const: auto
92 +UnlockedConstReaderAndAtomicRWRef()
93 +WithUnlockedConstReaderAndAtomicRW(auto
&& aF): auto
94 +UnlockedRWForLockedProfilerCRef() const
95 +WithUnlockedRWForLockedProfiler(auto
&& aF) const: auto
96 +UnlockedRWForLockedProfilerRef()
97 +WithUnlockedRWForLockedProfiler(auto
&& aF): auto
98 +UnlockedReaderAndAtomicRWOnThreadCRef() const
99 +WithUnlockedReaderAndAtomicRWOnThread(auto
&& aF) const: auto
100 +UnlockedReaderAndAtomicRWOnThreadRef()
101 +WithUnlockedReaderAndAtomicRWOnThread(auto
&& aF): auto
102 +RWOnThreadWithLock LockedRWOnThread()
103 +WithLockedRWOnThread(auto
&& aF): auto
</panel_attributes>
104 <additional_attributes/>
114 <panel_attributes>ThreadRegistration::OnThreadPtr
116 +operator*(): OnThreadRef
117 +operator-
>(): OnThreadRef
</panel_attributes>
118 <additional_attributes/>
128 <panel_attributes>ThreadRegistrationData
130 -mProfilingStack: ProfilingStack
131 -mStackTop: const void* const
132 -mThread: nsCOMPtr
<nsIThread
>
133 -mJSContext: JSContext*
134 -mJsFrameBuffer: JsFrame*
136 -Sleep: Atomic
<int
>
137 -mThreadCpuTimeInNsAtLastSleep: Atomic
<uint64_t
>
138 -mWakeCount: Atomic
<uint64_t, Relaxed
>
139 -mRecordWakeCountMutex: BaseProfilerMutex
140 -mAlreadyRecordedWakeCount: uint64_t
141 -mAlreadyRecordedCpuTimeInMs: uin64_t
142 -mThreadProfilingFeatures: ThreadProfilingFeatures
</panel_attributes>
143 <additional_attributes/>
153 <panel_attributes>ThreadRegistrationUnlockedConstReader
155 +Info() const: const ThreadRegistrationInfo
&
156 +PlatformDataCRef() const: const PlatformData
&
157 +StackTop() const: const void*
</panel_attributes>
158 <additional_attributes/>
168 <panel_attributes>ThreadRegistrationUnlockedConstReaderAndAtomicRW
170 +ProfilingStackCRef() const: const ProfilingStack
&
171 +ProfilingStackRef(): ProfilingStack
&
172 +ProfilingFeatures() const: ThreadProfilingFeatures
175 +GetNewCpuTimeInNs(): uint64_t
176 +RecordWakeCount() const
177 +ReinitializeOnResume()
178 +CanDuplicateLastSampleDueToSleep(): bool
179 +IsSleeping(): bool
</panel_attributes>
180 <additional_attributes/>
190 <panel_attributes>ThreadRegistrationUnlockedRWForLockedProfiler
192 +GetProfiledThreadData(): const ProfiledThreadData*
193 +GetProfiliedThreadData(): ProfiledThreadData*
</panel_attributes>
194 <additional_attributes/>
204 <panel_attributes>ThreadRegistrationUnlockedReaderAndAtomicRWOnThread
206 +GetJSContext(): JSContext*
</panel_attributes>
207 <additional_attributes/>
217 <panel_attributes>ThreadRegistrationLockedRWFromAnyThread
219 +SetProfilingFeaturesAndData(
220 ThreadProfilingFeatures, ProfiledThreadData*, const PSAutoLock
&)
221 +ClearProfilingFeaturesAndData(const PSAutoLock
&)
222 +GetJsFrameBuffer() const JsFrame*
223 +GetEventTarget() const: const nsCOMPtr
<nsIEventTarget
>
225 +GetRunningEventDelay(const TimeStamp
&, TimeDuration
&, TimeDuration
&)
226 +StartJSSampling(uint32_t)
227 +StopJSSampling()
</panel_attributes>
228 <additional_attributes/>
238 <panel_attributes>ThreadRegistrationLockedRWOnThread
240 +SetJSContext(JSContext*)
242 +PollJSSampling()
</panel_attributes>
243 <additional_attributes/>
253 <panel_attributes>lt=
<<-
</panel_attributes>
254 <additional_attributes>10.0;
10.0;
10.0;
50.0</additional_attributes>
264 <panel_attributes>ThreadRegistration::EmbeddedData
265 --
</panel_attributes>
266 <additional_attributes/>
276 <panel_attributes>lt=
<<-
</panel_attributes>
277 <additional_attributes>10.0;
10.0;
10.0;
50.0</additional_attributes>
287 <panel_attributes>lt=
<<-
</panel_attributes>
288 <additional_attributes>10.0;
10.0;
10.0;
50.0</additional_attributes>
298 <panel_attributes>lt=
<<-
</panel_attributes>
299 <additional_attributes>10.0;
10.0;
10.0;
50.0</additional_attributes>
309 <panel_attributes>lt=
<<-
</panel_attributes>
310 <additional_attributes>10.0;
10.0;
10.0;
130.0</additional_attributes>
320 <panel_attributes>lt=
<<-
</panel_attributes>
321 <additional_attributes>10.0;
10.0;
10.0;
50.0</additional_attributes>
331 <panel_attributes>lt=
<<-
</panel_attributes>
332 <additional_attributes>10.0;
10.0;
10.0;
50.0</additional_attributes>
342 <panel_attributes>lt=-
>>>>>
343 mData
</panel_attributes>
344 <additional_attributes>160.0;
1350.0;
10.0;
1350.0;
10.0;
10.0</additional_attributes>
354 <panel_attributes>ThreadRegistrationInfo
357 +RegisterTime(): const TimeStamp
&
358 +ThreadId(): ProfilerThreadId
359 +IsMainThread(): bool
</panel_attributes>
360 <additional_attributes/>
370 <panel_attributes>lt=-
>>>>>
371 mInfo
</panel_attributes>
372 <additional_attributes>200.0;
20.0;
10.0;
20.0</additional_attributes>
382 <panel_attributes>PlatformData
385 <additional_attributes/>
395 <panel_attributes>lt=-
>>>>>
396 mPlatformData
</panel_attributes>
397 <additional_attributes>200.0;
20.0;
10.0;
20.0</additional_attributes>
407 <panel_attributes>ProfiledThreadData
408 --
</panel_attributes>
409 <additional_attributes/>
419 <panel_attributes>lt=-
>>>>
420 mProfiledThreadData: *
</panel_attributes>
421 <additional_attributes>200.0;
20.0;
10.0;
20.0</additional_attributes>
431 <panel_attributes>lt=-
>>>>
433 mThreadRegistration: *
</panel_attributes>
434 <additional_attributes>10.0;
150.0;
330.0;
10.0</additional_attributes>
444 <panel_attributes>lt=-
>>>>
446 mThreadRegistration: *
</panel_attributes>
447 <additional_attributes>10.0;
110.0;
40.0;
20.0;
220.0;
20.0;
240.0;
40.0</additional_attributes>
457 <panel_attributes>lt=
<.
458 <creates
></panel_attributes>
459 <additional_attributes>10.0;
120.0;
10.0;
10.0</additional_attributes>
469 <panel_attributes>lt=
<.
470 <accesses
></panel_attributes>
471 <additional_attributes>10.0;
360.0;
430.0;
360.0;
430.0;
10.0</additional_attributes>
481 <panel_attributes>lt=
<.
482 <accesses
></panel_attributes>
483 <additional_attributes>10.0;
540.0;
420.0;
540.0;
420.0;
10.0</additional_attributes>
493 <panel_attributes>lt=
<.
494 <accesses
></panel_attributes>
495 <additional_attributes>10.0;
700.0;
450.0;
700.0;
450.0;
10.0</additional_attributes>
505 <panel_attributes>lt=
<.
506 <accesses
></panel_attributes>
507 <additional_attributes>10.0;
800.0;
430.0;
800.0;
430.0;
10.0</additional_attributes>
517 <panel_attributes>ThreadRegistration::OnThreadRef::ConstRWOnThreadWithLock
519 -mDataLock: BaseProfilerAutoLock
521 +DataCRef() const: ThreadRegistrationLockedRWOnThread
&
522 +operator-
>() const: ThreadRegistrationLockedRWOnThread
&</panel_attributes>
523 <additional_attributes/>
533 <panel_attributes>lt=-
>>>>
534 mLockedRWOnThread
</panel_attributes>
535 <additional_attributes>10.0;
20.0;
160.0;
20.0</additional_attributes>
545 <panel_attributes>lt=
<.
546 <creates
></panel_attributes>
547 <additional_attributes>10.0;
1170.0;
10.0;
10.0</additional_attributes>
557 <panel_attributes>lt=
<.
558 <creates
></panel_attributes>
559 <additional_attributes>380.0;
10.0;
10.0;
190.0</additional_attributes>
569 <panel_attributes>lt=
<.
570 <creates
></panel_attributes>
571 <additional_attributes>140.0;
30.0;
50.0;
30.0;
10.0;
10.0</additional_attributes>
581 <panel_attributes>lt=-
>>>>
584 static Vector
<></panel_attributes>
585 <additional_attributes>10.0;
100.0;
10.0;
10.0</additional_attributes>
595 <panel_attributes>ThreadRegistry::LockedRegistry
597 -mRegistryLock: RegistryLockShared (aka BaseProfilerAutoLockShared)
601 +begin() const: const OffThreadRef*
602 +end() const: const OffThreadRef*
603 +begin(): OffThreadRef*
604 +end(): OffThreadRef*
</panel_attributes>
605 <additional_attributes/>
615 <panel_attributes>lt=
<.
617 shared lock
></panel_attributes>
618 <additional_attributes>10.0;
20.0;
240.0;
20.0</additional_attributes>
628 <panel_attributes>lt=
<.
630 mIsRegistryLockedSharedOnThisThread
></panel_attributes>
631 <additional_attributes>10.0;
240.0;
310.0;
10.0</additional_attributes>
641 <panel_attributes>lt=-
>>>>
643 mThreadRegistration: *
</panel_attributes>
644 <additional_attributes>120.0;
60.0;
40.0;
10.0</additional_attributes>
654 <panel_attributes>lt=
<.
655 <accesses
></panel_attributes>
656 <additional_attributes>180.0;
690.0;
10.0;
690.0;
10.0;
10.0</additional_attributes>
666 <panel_attributes>lt=
<.
667 <accesses
></panel_attributes>
668 <additional_attributes>170.0;
870.0;
10.0;
870.0;
10.0;
10.0</additional_attributes>
678 <panel_attributes>ThreadRegistry::OffThreadRef::{,Const}RWFromAnyThreadWithLock
680 -mDataLock: BaseProfilerAutoLock
682 +DataCRef() {,const}: ThreadRegistrationLockedRWOnThread
&
683 +operator-
>() {,const}: ThreadRegistrationLockedRWOnThread
&</panel_attributes>
684 <additional_attributes/>
694 <panel_attributes>lt=
<.
695 <creates
></panel_attributes>
696 <additional_attributes>10.0;
1170.0;
10.0;
10.0</additional_attributes>
706 <panel_attributes>lt=-
>>>>
707 mLockedRWFromAnyThread
</panel_attributes>
708 <additional_attributes>200.0;
100.0;
80.0;
100.0;
80.0;
10.0</additional_attributes>