10 UMLClass 200 330 370 250 ThreadRegistry::OffThreadRef -- +UnlockedConstReaderCRef() const +WithUnlockedConstReader(F&& aF) const +UnlockedConstReaderAndAtomicRWCRef() const +WithUnlockedConstReaderAndAtomicRW(F&& aF) const +UnlockedConstReaderAndAtomicRWRef() +WithUnlockedConstReaderAndAtomicRW(F&& aF) +UnlockedRWForLockedProfilerCRef() +WithUnlockedRWForLockedProfiler(F&& aF) +UnlockedRWForLockedProfilerRef() +WithUnlockedRWForLockedProfiler(F&& aF) +ConstLockedRWFromAnyThread() +WithConstLockedRWFromAnyThread(F&& aF) +LockedRWFromAnyThread() +WithLockedRWFromAnyThread(F&& aF) UMLClass 310 80 560 160 ThreadRegistry -- -sRegistryMutex: RegistryMutex (aka BaseProfilerSharedMutex) /exclusive lock used during un/registration, shared lock for other accesses/ -- friend class ThreadRegistration -Register(ThreadRegistration::OnThreadRef) -Unregister(ThreadRegistration::OnThreadRef) -- +WithOffThreadRef(ProfilerThreadId, auto&& aF) static +WithOffThreadRefOr(ProfilerThreadId, auto&& aF, auto&& aFallbackReturn) static: auto UMLClass 310 630 530 260 ThreadRegistration -- -mDataMutex: DataMutex (aka BaseProfilerMutex) -mIsOnHeap: bool -mIsRegistryLockedSharedOnThisThread: bool -tlsThreadRegistration: MOZ_THREAD_LOCAL(ThreadRegistration*) -GetTLS() static: tlsThreadRegistration* -GetFromTLS() static: ThreadRegistration* -- +ThreadRegistration(const char* aName, const void* aStackTop) +~ThreadRegistration() +RegisterThread(const char* aName, const void* aStackTop) static: ProfilingStack* +UnregisterThread() static +IsRegistered() static: bool +GetOnThreadPtr() static OnThreadPtr +WithOnThreadRefOr(auto&& aF, auto&& aFallbackReturn) static: auto +IsDataMutexLockedOnCurrentThread() static: bool UMLClass 880 620 450 290 ThreadRegistration::OnThreadRef -- +UnlockedConstReaderCRef() const +WithUnlockedConstReader(auto&& aF) const: auto +UnlockedConstReaderAndAtomicRWCRef() const +WithUnlockedConstReaderAndAtomicRW(auto&& aF) const: auto +UnlockedConstReaderAndAtomicRWRef() +WithUnlockedConstReaderAndAtomicRW(auto&& aF): auto +UnlockedRWForLockedProfilerCRef() const +WithUnlockedRWForLockedProfiler(auto&& aF) const: auto +UnlockedRWForLockedProfilerRef() +WithUnlockedRWForLockedProfiler(auto&& aF): auto +UnlockedReaderAndAtomicRWOnThreadCRef() const +WithUnlockedReaderAndAtomicRWOnThread(auto&& aF) const: auto +UnlockedReaderAndAtomicRWOnThreadRef() +WithUnlockedReaderAndAtomicRWOnThread(auto&& aF): auto +RWOnThreadWithLock LockedRWOnThread() +WithLockedRWOnThread(auto&& aF): auto UMLClass 1040 440 230 70 ThreadRegistration::OnThreadPtr -- +operator*(): OnThreadRef +operator->(): OnThreadRef UMLClass 450 940 350 240 ThreadRegistrationData -- -mProfilingStack: ProfilingStack -mStackTop: const void* const -mThread: nsCOMPtr<nsIThread> -mJSContext: JSContext* -mJsFrameBuffer: JsFrame* -mJSFlags: uint32_t -Sleep: Atomic<int> -mThreadCpuTimeInNsAtLastSleep: Atomic<uint64_t> -mWakeCount: Atomic<uint64_t, Relaxed> -mRecordWakeCountMutex: BaseProfilerMutex -mAlreadyRecordedWakeCount: uint64_t -mAlreadyRecordedCpuTimeInMs: uin64_t -mThreadProfilingFeatures: ThreadProfilingFeatures UMLClass 460 1220 330 80 ThreadRegistrationUnlockedConstReader -- +Info() const: const ThreadRegistrationInfo& +PlatformDataCRef() const: const PlatformData& +StackTop() const: const void* UMLClass 440 1340 370 190 ThreadRegistrationUnlockedConstReaderAndAtomicRW -- +ProfilingStackCRef() const: const ProfilingStack& +ProfilingStackRef(): ProfilingStack& +ProfilingFeatures() const: ThreadProfilingFeatures +SetSleeping() +SetAwake() +GetNewCpuTimeInNs(): uint64_t +RecordWakeCount() const +ReinitializeOnResume() +CanDuplicateLastSampleDueToSleep(): bool +IsSleeping(): bool UMLClass 460 1570 330 60 ThreadRegistrationUnlockedRWForLockedProfiler -- +GetProfiledThreadData(): const ProfiledThreadData* +GetProfiliedThreadData(): ProfiledThreadData* UMLClass 430 1670 390 50 ThreadRegistrationUnlockedReaderAndAtomicRWOnThread -- +GetJSContext(): JSContext* UMLClass 380 1840 490 190 ThreadRegistrationLockedRWFromAnyThread -- +SetProfilingFeaturesAndData( ThreadProfilingFeatures, ProfiledThreadData*, const PSAutoLock&) +ClearProfilingFeaturesAndData(const PSAutoLock&) +GetJsFrameBuffer() const JsFrame* +GetEventTarget() const: const nsCOMPtr<nsIEventTarget> +ResetMainThread() +GetRunningEventDelay(const TimeStamp&, TimeDuration&, TimeDuration&) +StartJSSampling(uint32_t) +StopJSSampling() UMLClass 490 2070 260 80 ThreadRegistrationLockedRWOnThread -- +SetJSContext(JSContext*) +ClearJSContext() +PollJSSampling() Relation 610 1170 30 70 lt=<<- 10.0;10.0;10.0;50.0 UMLClass 500 2190 240 60 ThreadRegistration::EmbeddedData -- Relation 610 1290 30 70 lt=<<- 10.0;10.0;10.0;50.0 Relation 610 1520 30 70 lt=<<- 10.0;10.0;10.0;50.0 Relation 610 1620 30 70 lt=<<- 10.0;10.0;10.0;50.0 Relation 650 1710 30 150 lt=<<- 10.0;10.0;10.0;130.0 Relation 610 2020 30 70 lt=<<- 10.0;10.0;10.0;50.0 Relation 610 2140 30 70 lt=<<- 10.0;10.0;10.0;50.0 Relation 340 880 180 1370 lt=->>>>> mData 160.0;1350.0;10.0;1350.0;10.0;10.0 UMLClass 990 930 210 100 ThreadRegistrationInfo -- +Name(): const char* +RegisterTime(): const TimeStamp& +ThreadId(): ProfilerThreadId +IsMainThread(): bool Relation 790 980 220 40 lt=->>>>> mInfo 200.0;20.0;10.0;20.0 UMLClass 990 1040 210 50 PlatformData -- Relation 790 1040 220 40 lt=->>>>> mPlatformData 200.0;20.0;10.0;20.0 UMLClass 990 1100 210 60 ProfiledThreadData -- Relation 790 1100 220 40 lt=->>>> mProfiledThreadData: * 200.0;20.0;10.0;20.0 Relation 710 480 350 170 lt=->>>> m1=0..1 mThreadRegistration: * 10.0;150.0;330.0;10.0 Relation 830 580 260 130 lt=->>>> m1=1 mThreadRegistration: * 10.0;110.0;40.0;20.0;220.0;20.0;240.0;40.0 Relation 1140 500 90 140 lt=<. <creates> 10.0;120.0;10.0;10.0 Relation 780 900 450 380 lt=<. <accesses> 10.0;360.0;430.0;360.0;430.0;10.0 Relation 800 900 510 560 lt=<. <accesses> 10.0;540.0;420.0;540.0;420.0;10.0 Relation 780 900 540 720 lt=<. <accesses> 10.0;700.0;450.0;700.0;450.0;10.0 Relation 810 900 520 820 lt=<. <accesses> 10.0;800.0;430.0;800.0;430.0;10.0 UMLClass 900 2070 410 80 ThreadRegistration::OnThreadRef::ConstRWOnThreadWithLock -- -mDataLock: BaseProfilerAutoLock -- +DataCRef() const: ThreadRegistrationLockedRWOnThread& +operator->() const: ThreadRegistrationLockedRWOnThread& Relation 740 2100 180 40 lt=->>>> mLockedRWOnThread 10.0;20.0;160.0;20.0 Relation 1250 900 90 1190 lt=<. <creates> 10.0;1170.0;10.0;10.0 Relation 660 440 400 210 lt=<. <creates> 380.0;10.0;10.0;190.0 Relation 740 880 160 50 lt=<. <creates> 140.0;30.0;50.0;30.0;10.0;10.0 Relation 460 230 150 120 lt=->>>> m1=0..N sRegistryContainer: static Vector<> 10.0;100.0;10.0;10.0 UMLClass 800 250 470 150 ThreadRegistry::LockedRegistry -- -mRegistryLock: RegistryLockShared (aka BaseProfilerAutoLockShared) -- +LockedRegistry() +~LockedRegistry() +begin() const: const OffThreadRef* +end() const: const OffThreadRef* +begin(): OffThreadRef* +end(): OffThreadRef* Relation 560 350 260 50 lt=<. <accesses with shared lock> 10.0;20.0;240.0;20.0 Relation 550 390 330 260 lt=<. <updates mIsRegistryLockedSharedOnThisThread> 10.0;240.0;310.0;10.0 Relation 330 570 170 80 lt=->>>> m1=1 mThreadRegistration: * 120.0;60.0;40.0;10.0 Relation 280 570 200 710 lt=<. <accesses> 180.0;690.0;10.0;690.0;10.0;10.0 Relation 270 570 190 890 lt=<. <accesses> 170.0;870.0;10.0;870.0;10.0;10.0 UMLClass 200 1740 440 80 ThreadRegistry::OffThreadRef::{,Const}RWFromAnyThreadWithLock -- -mDataLock: BaseProfilerAutoLock -- +DataCRef() {,const}: ThreadRegistrationLockedRWOnThread& +operator->() {,const}: ThreadRegistrationLockedRWOnThread& Relation 250 570 90 1190 lt=<. <creates> 10.0;1170.0;10.0;10.0 Relation 180 1810 220 120 lt=->>>> mLockedRWFromAnyThread 200.0;100.0;80.0;100.0;80.0;10.0