Bug 1839315: part 4) Link from `SheetLoadData::mWasAlternate` to spec. r=emilio DONTBUILD
[gecko.git] / tools / profiler / docs / profilerthreadregistration.umlet.uxf
blob3e07215db429424aa12fc9eabf4209ca790cd603
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <diagram program="umlet" version="15.0.0">
3 <zoom_level>10</zoom_level>
4 <element>
5 <id>UMLClass</id>
6 <coordinates>
7 <x>200</x>
8 <y>330</y>
9 <w>370</w>
10 <h>250</h>
11 </coordinates>
12 <panel_attributes>ThreadRegistry::OffThreadRef
14 +UnlockedConstReaderCRef() const
15 +WithUnlockedConstReader(F&amp;&amp; aF) const
16 +UnlockedConstReaderAndAtomicRWCRef() const
17 +WithUnlockedConstReaderAndAtomicRW(F&amp;&amp; aF) const
18 +UnlockedConstReaderAndAtomicRWRef()
19 +WithUnlockedConstReaderAndAtomicRW(F&amp;&amp; aF)
20 +UnlockedRWForLockedProfilerCRef()
21 +WithUnlockedRWForLockedProfiler(F&amp;&amp; aF)
22 +UnlockedRWForLockedProfilerRef()
23 +WithUnlockedRWForLockedProfiler(F&amp;&amp; aF)
24 +ConstLockedRWFromAnyThread()
25 +WithConstLockedRWFromAnyThread(F&amp;&amp; aF)
26 +LockedRWFromAnyThread()
27 +WithLockedRWFromAnyThread(F&amp;&amp; aF)</panel_attributes>
28 <additional_attributes/>
29 </element>
30 <element>
31 <id>UMLClass</id>
32 <coordinates>
33 <x>310</x>
34 <y>80</y>
35 <w>560</w>
36 <h>160</h>
37 </coordinates>
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&amp;&amp; aF) static
48 +WithOffThreadRefOr(ProfilerThreadId, auto&amp;&amp; aF, auto&amp;&amp; aFallbackReturn) static: auto</panel_attributes>
49 <additional_attributes/>
50 </element>
51 <element>
52 <id>UMLClass</id>
53 <coordinates>
54 <x>310</x>
55 <y>630</y>
56 <w>530</w>
57 <h>260</h>
58 </coordinates>
59 <panel_attributes>ThreadRegistration
61 -mDataMutex: DataMutex (aka BaseProfilerMutex)
62 -mIsOnHeap: bool
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&amp;&amp; aF, auto&amp;&amp; aFallbackReturn) static: auto
75 +IsDataMutexLockedOnCurrentThread() static: bool</panel_attributes>
76 <additional_attributes/>
77 </element>
78 <element>
79 <id>UMLClass</id>
80 <coordinates>
81 <x>880</x>
82 <y>620</y>
83 <w>450</w>
84 <h>290</h>
85 </coordinates>
86 <panel_attributes>ThreadRegistration::OnThreadRef
88 +UnlockedConstReaderCRef() const
89 +WithUnlockedConstReader(auto&amp;&amp; aF) const: auto
90 +UnlockedConstReaderAndAtomicRWCRef() const
91 +WithUnlockedConstReaderAndAtomicRW(auto&amp;&amp; aF) const: auto
92 +UnlockedConstReaderAndAtomicRWRef()
93 +WithUnlockedConstReaderAndAtomicRW(auto&amp;&amp; aF): auto
94 +UnlockedRWForLockedProfilerCRef() const
95 +WithUnlockedRWForLockedProfiler(auto&amp;&amp; aF) const: auto
96 +UnlockedRWForLockedProfilerRef()
97 +WithUnlockedRWForLockedProfiler(auto&amp;&amp; aF): auto
98 +UnlockedReaderAndAtomicRWOnThreadCRef() const
99 +WithUnlockedReaderAndAtomicRWOnThread(auto&amp;&amp; aF) const: auto
100 +UnlockedReaderAndAtomicRWOnThreadRef()
101 +WithUnlockedReaderAndAtomicRWOnThread(auto&amp;&amp; aF): auto
102 +RWOnThreadWithLock LockedRWOnThread()
103 +WithLockedRWOnThread(auto&amp;&amp; aF): auto</panel_attributes>
104 <additional_attributes/>
105 </element>
106 <element>
107 <id>UMLClass</id>
108 <coordinates>
109 <x>1040</x>
110 <y>440</y>
111 <w>230</w>
112 <h>70</h>
113 </coordinates>
114 <panel_attributes>ThreadRegistration::OnThreadPtr
116 +operator*(): OnThreadRef
117 +operator-&gt;(): OnThreadRef</panel_attributes>
118 <additional_attributes/>
119 </element>
120 <element>
121 <id>UMLClass</id>
122 <coordinates>
123 <x>450</x>
124 <y>940</y>
125 <w>350</w>
126 <h>240</h>
127 </coordinates>
128 <panel_attributes>ThreadRegistrationData
130 -mProfilingStack: ProfilingStack
131 -mStackTop: const void* const
132 -mThread: nsCOMPtr&lt;nsIThread&gt;
133 -mJSContext: JSContext*
134 -mJsFrameBuffer: JsFrame*
135 -mJSFlags: uint32_t
136 -Sleep: Atomic&lt;int&gt;
137 -mThreadCpuTimeInNsAtLastSleep: Atomic&lt;uint64_t&gt;
138 -mWakeCount: Atomic&lt;uint64_t, Relaxed&gt;
139 -mRecordWakeCountMutex: BaseProfilerMutex
140 -mAlreadyRecordedWakeCount: uint64_t
141 -mAlreadyRecordedCpuTimeInMs: uin64_t
142 -mThreadProfilingFeatures: ThreadProfilingFeatures</panel_attributes>
143 <additional_attributes/>
144 </element>
145 <element>
146 <id>UMLClass</id>
147 <coordinates>
148 <x>460</x>
149 <y>1220</y>
150 <w>330</w>
151 <h>80</h>
152 </coordinates>
153 <panel_attributes>ThreadRegistrationUnlockedConstReader
155 +Info() const: const ThreadRegistrationInfo&amp;
156 +PlatformDataCRef() const: const PlatformData&amp;
157 +StackTop() const: const void*</panel_attributes>
158 <additional_attributes/>
159 </element>
160 <element>
161 <id>UMLClass</id>
162 <coordinates>
163 <x>440</x>
164 <y>1340</y>
165 <w>370</w>
166 <h>190</h>
167 </coordinates>
168 <panel_attributes>ThreadRegistrationUnlockedConstReaderAndAtomicRW
170 +ProfilingStackCRef() const: const ProfilingStack&amp;
171 +ProfilingStackRef(): ProfilingStack&amp;
172 +ProfilingFeatures() const: ThreadProfilingFeatures
173 +SetSleeping()
174 +SetAwake()
175 +GetNewCpuTimeInNs(): uint64_t
176 +RecordWakeCount() const
177 +ReinitializeOnResume()
178 +CanDuplicateLastSampleDueToSleep(): bool
179 +IsSleeping(): bool</panel_attributes>
180 <additional_attributes/>
181 </element>
182 <element>
183 <id>UMLClass</id>
184 <coordinates>
185 <x>460</x>
186 <y>1570</y>
187 <w>330</w>
188 <h>60</h>
189 </coordinates>
190 <panel_attributes>ThreadRegistrationUnlockedRWForLockedProfiler
192 +GetProfiledThreadData(): const ProfiledThreadData*
193 +GetProfiliedThreadData(): ProfiledThreadData*</panel_attributes>
194 <additional_attributes/>
195 </element>
196 <element>
197 <id>UMLClass</id>
198 <coordinates>
199 <x>430</x>
200 <y>1670</y>
201 <w>390</w>
202 <h>50</h>
203 </coordinates>
204 <panel_attributes>ThreadRegistrationUnlockedReaderAndAtomicRWOnThread
206 +GetJSContext(): JSContext*</panel_attributes>
207 <additional_attributes/>
208 </element>
209 <element>
210 <id>UMLClass</id>
211 <coordinates>
212 <x>380</x>
213 <y>1840</y>
214 <w>490</w>
215 <h>190</h>
216 </coordinates>
217 <panel_attributes>ThreadRegistrationLockedRWFromAnyThread
219 +SetProfilingFeaturesAndData(
220 ThreadProfilingFeatures, ProfiledThreadData*, const PSAutoLock&amp;)
221 +ClearProfilingFeaturesAndData(const PSAutoLock&amp;)
222 +GetJsFrameBuffer() const JsFrame*
223 +GetEventTarget() const: const nsCOMPtr&lt;nsIEventTarget&gt;
224 +ResetMainThread()
225 +GetRunningEventDelay(const TimeStamp&amp;, TimeDuration&amp;, TimeDuration&amp;)
226 +StartJSSampling(uint32_t)
227 +StopJSSampling()</panel_attributes>
228 <additional_attributes/>
229 </element>
230 <element>
231 <id>UMLClass</id>
232 <coordinates>
233 <x>490</x>
234 <y>2070</y>
235 <w>260</w>
236 <h>80</h>
237 </coordinates>
238 <panel_attributes>ThreadRegistrationLockedRWOnThread
240 +SetJSContext(JSContext*)
241 +ClearJSContext()
242 +PollJSSampling()</panel_attributes>
243 <additional_attributes/>
244 </element>
245 <element>
246 <id>Relation</id>
247 <coordinates>
248 <x>610</x>
249 <y>1170</y>
250 <w>30</w>
251 <h>70</h>
252 </coordinates>
253 <panel_attributes>lt=&lt;&lt;-</panel_attributes>
254 <additional_attributes>10.0;10.0;10.0;50.0</additional_attributes>
255 </element>
256 <element>
257 <id>UMLClass</id>
258 <coordinates>
259 <x>500</x>
260 <y>2190</y>
261 <w>240</w>
262 <h>60</h>
263 </coordinates>
264 <panel_attributes>ThreadRegistration::EmbeddedData
265 --</panel_attributes>
266 <additional_attributes/>
267 </element>
268 <element>
269 <id>Relation</id>
270 <coordinates>
271 <x>610</x>
272 <y>1290</y>
273 <w>30</w>
274 <h>70</h>
275 </coordinates>
276 <panel_attributes>lt=&lt;&lt;-</panel_attributes>
277 <additional_attributes>10.0;10.0;10.0;50.0</additional_attributes>
278 </element>
279 <element>
280 <id>Relation</id>
281 <coordinates>
282 <x>610</x>
283 <y>1520</y>
284 <w>30</w>
285 <h>70</h>
286 </coordinates>
287 <panel_attributes>lt=&lt;&lt;-</panel_attributes>
288 <additional_attributes>10.0;10.0;10.0;50.0</additional_attributes>
289 </element>
290 <element>
291 <id>Relation</id>
292 <coordinates>
293 <x>610</x>
294 <y>1620</y>
295 <w>30</w>
296 <h>70</h>
297 </coordinates>
298 <panel_attributes>lt=&lt;&lt;-</panel_attributes>
299 <additional_attributes>10.0;10.0;10.0;50.0</additional_attributes>
300 </element>
301 <element>
302 <id>Relation</id>
303 <coordinates>
304 <x>650</x>
305 <y>1710</y>
306 <w>30</w>
307 <h>150</h>
308 </coordinates>
309 <panel_attributes>lt=&lt;&lt;-</panel_attributes>
310 <additional_attributes>10.0;10.0;10.0;130.0</additional_attributes>
311 </element>
312 <element>
313 <id>Relation</id>
314 <coordinates>
315 <x>610</x>
316 <y>2020</y>
317 <w>30</w>
318 <h>70</h>
319 </coordinates>
320 <panel_attributes>lt=&lt;&lt;-</panel_attributes>
321 <additional_attributes>10.0;10.0;10.0;50.0</additional_attributes>
322 </element>
323 <element>
324 <id>Relation</id>
325 <coordinates>
326 <x>610</x>
327 <y>2140</y>
328 <w>30</w>
329 <h>70</h>
330 </coordinates>
331 <panel_attributes>lt=&lt;&lt;-</panel_attributes>
332 <additional_attributes>10.0;10.0;10.0;50.0</additional_attributes>
333 </element>
334 <element>
335 <id>Relation</id>
336 <coordinates>
337 <x>340</x>
338 <y>880</y>
339 <w>180</w>
340 <h>1370</h>
341 </coordinates>
342 <panel_attributes>lt=-&gt;&gt;&gt;&gt;&gt;
343 mData</panel_attributes>
344 <additional_attributes>160.0;1350.0;10.0;1350.0;10.0;10.0</additional_attributes>
345 </element>
346 <element>
347 <id>UMLClass</id>
348 <coordinates>
349 <x>990</x>
350 <y>930</y>
351 <w>210</w>
352 <h>100</h>
353 </coordinates>
354 <panel_attributes>ThreadRegistrationInfo
356 +Name(): const char*
357 +RegisterTime(): const TimeStamp&amp;
358 +ThreadId(): ProfilerThreadId
359 +IsMainThread(): bool</panel_attributes>
360 <additional_attributes/>
361 </element>
362 <element>
363 <id>Relation</id>
364 <coordinates>
365 <x>790</x>
366 <y>980</y>
367 <w>220</w>
368 <h>40</h>
369 </coordinates>
370 <panel_attributes>lt=-&gt;&gt;&gt;&gt;&gt;
371 mInfo</panel_attributes>
372 <additional_attributes>200.0;20.0;10.0;20.0</additional_attributes>
373 </element>
374 <element>
375 <id>UMLClass</id>
376 <coordinates>
377 <x>990</x>
378 <y>1040</y>
379 <w>210</w>
380 <h>50</h>
381 </coordinates>
382 <panel_attributes>PlatformData
384 </panel_attributes>
385 <additional_attributes/>
386 </element>
387 <element>
388 <id>Relation</id>
389 <coordinates>
390 <x>790</x>
391 <y>1040</y>
392 <w>220</w>
393 <h>40</h>
394 </coordinates>
395 <panel_attributes>lt=-&gt;&gt;&gt;&gt;&gt;
396 mPlatformData</panel_attributes>
397 <additional_attributes>200.0;20.0;10.0;20.0</additional_attributes>
398 </element>
399 <element>
400 <id>UMLClass</id>
401 <coordinates>
402 <x>990</x>
403 <y>1100</y>
404 <w>210</w>
405 <h>60</h>
406 </coordinates>
407 <panel_attributes>ProfiledThreadData
408 --</panel_attributes>
409 <additional_attributes/>
410 </element>
411 <element>
412 <id>Relation</id>
413 <coordinates>
414 <x>790</x>
415 <y>1100</y>
416 <w>220</w>
417 <h>40</h>
418 </coordinates>
419 <panel_attributes>lt=-&gt;&gt;&gt;&gt;
420 mProfiledThreadData: *</panel_attributes>
421 <additional_attributes>200.0;20.0;10.0;20.0</additional_attributes>
422 </element>
423 <element>
424 <id>Relation</id>
425 <coordinates>
426 <x>710</x>
427 <y>480</y>
428 <w>350</w>
429 <h>170</h>
430 </coordinates>
431 <panel_attributes>lt=-&gt;&gt;&gt;&gt;
432 m1=0..1
433 mThreadRegistration: *</panel_attributes>
434 <additional_attributes>10.0;150.0;330.0;10.0</additional_attributes>
435 </element>
436 <element>
437 <id>Relation</id>
438 <coordinates>
439 <x>830</x>
440 <y>580</y>
441 <w>260</w>
442 <h>130</h>
443 </coordinates>
444 <panel_attributes>lt=-&gt;&gt;&gt;&gt;
445 m1=1
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>
448 </element>
449 <element>
450 <id>Relation</id>
451 <coordinates>
452 <x>1140</x>
453 <y>500</y>
454 <w>90</w>
455 <h>140</h>
456 </coordinates>
457 <panel_attributes>lt=&lt;.
458 &lt;creates&gt;</panel_attributes>
459 <additional_attributes>10.0;120.0;10.0;10.0</additional_attributes>
460 </element>
461 <element>
462 <id>Relation</id>
463 <coordinates>
464 <x>780</x>
465 <y>900</y>
466 <w>450</w>
467 <h>380</h>
468 </coordinates>
469 <panel_attributes>lt=&lt;.
470 &lt;accesses&gt;</panel_attributes>
471 <additional_attributes>10.0;360.0;430.0;360.0;430.0;10.0</additional_attributes>
472 </element>
473 <element>
474 <id>Relation</id>
475 <coordinates>
476 <x>800</x>
477 <y>900</y>
478 <w>510</w>
479 <h>560</h>
480 </coordinates>
481 <panel_attributes>lt=&lt;.
482 &lt;accesses&gt;</panel_attributes>
483 <additional_attributes>10.0;540.0;420.0;540.0;420.0;10.0</additional_attributes>
484 </element>
485 <element>
486 <id>Relation</id>
487 <coordinates>
488 <x>780</x>
489 <y>900</y>
490 <w>540</w>
491 <h>720</h>
492 </coordinates>
493 <panel_attributes>lt=&lt;.
494 &lt;accesses&gt;</panel_attributes>
495 <additional_attributes>10.0;700.0;450.0;700.0;450.0;10.0</additional_attributes>
496 </element>
497 <element>
498 <id>Relation</id>
499 <coordinates>
500 <x>810</x>
501 <y>900</y>
502 <w>520</w>
503 <h>820</h>
504 </coordinates>
505 <panel_attributes>lt=&lt;.
506 &lt;accesses&gt;</panel_attributes>
507 <additional_attributes>10.0;800.0;430.0;800.0;430.0;10.0</additional_attributes>
508 </element>
509 <element>
510 <id>UMLClass</id>
511 <coordinates>
512 <x>900</x>
513 <y>2070</y>
514 <w>410</w>
515 <h>80</h>
516 </coordinates>
517 <panel_attributes>ThreadRegistration::OnThreadRef::ConstRWOnThreadWithLock
519 -mDataLock: BaseProfilerAutoLock
521 +DataCRef() const: ThreadRegistrationLockedRWOnThread&amp;
522 +operator-&gt;() const: ThreadRegistrationLockedRWOnThread&amp;</panel_attributes>
523 <additional_attributes/>
524 </element>
525 <element>
526 <id>Relation</id>
527 <coordinates>
528 <x>740</x>
529 <y>2100</y>
530 <w>180</w>
531 <h>40</h>
532 </coordinates>
533 <panel_attributes>lt=-&gt;&gt;&gt;&gt;
534 mLockedRWOnThread</panel_attributes>
535 <additional_attributes>10.0;20.0;160.0;20.0</additional_attributes>
536 </element>
537 <element>
538 <id>Relation</id>
539 <coordinates>
540 <x>1250</x>
541 <y>900</y>
542 <w>90</w>
543 <h>1190</h>
544 </coordinates>
545 <panel_attributes>lt=&lt;.
546 &lt;creates&gt;</panel_attributes>
547 <additional_attributes>10.0;1170.0;10.0;10.0</additional_attributes>
548 </element>
549 <element>
550 <id>Relation</id>
551 <coordinates>
552 <x>660</x>
553 <y>440</y>
554 <w>400</w>
555 <h>210</h>
556 </coordinates>
557 <panel_attributes>lt=&lt;.
558 &lt;creates&gt;</panel_attributes>
559 <additional_attributes>380.0;10.0;10.0;190.0</additional_attributes>
560 </element>
561 <element>
562 <id>Relation</id>
563 <coordinates>
564 <x>740</x>
565 <y>880</y>
566 <w>160</w>
567 <h>50</h>
568 </coordinates>
569 <panel_attributes>lt=&lt;.
570 &lt;creates&gt;</panel_attributes>
571 <additional_attributes>140.0;30.0;50.0;30.0;10.0;10.0</additional_attributes>
572 </element>
573 <element>
574 <id>Relation</id>
575 <coordinates>
576 <x>460</x>
577 <y>230</y>
578 <w>150</w>
579 <h>120</h>
580 </coordinates>
581 <panel_attributes>lt=-&gt;&gt;&gt;&gt;
582 m1=0..N
583 sRegistryContainer:
584 static Vector&lt;&gt;</panel_attributes>
585 <additional_attributes>10.0;100.0;10.0;10.0</additional_attributes>
586 </element>
587 <element>
588 <id>UMLClass</id>
589 <coordinates>
590 <x>800</x>
591 <y>250</y>
592 <w>470</w>
593 <h>150</h>
594 </coordinates>
595 <panel_attributes>ThreadRegistry::LockedRegistry
597 -mRegistryLock: RegistryLockShared (aka BaseProfilerAutoLockShared)
599 +LockedRegistry()
600 +~LockedRegistry()
601 +begin() const: const OffThreadRef*
602 +end() const: const OffThreadRef*
603 +begin(): OffThreadRef*
604 +end(): OffThreadRef*</panel_attributes>
605 <additional_attributes/>
606 </element>
607 <element>
608 <id>Relation</id>
609 <coordinates>
610 <x>560</x>
611 <y>350</y>
612 <w>260</w>
613 <h>50</h>
614 </coordinates>
615 <panel_attributes>lt=&lt;.
616 &lt;accesses with
617 shared lock&gt;</panel_attributes>
618 <additional_attributes>10.0;20.0;240.0;20.0</additional_attributes>
619 </element>
620 <element>
621 <id>Relation</id>
622 <coordinates>
623 <x>550</x>
624 <y>390</y>
625 <w>330</w>
626 <h>260</h>
627 </coordinates>
628 <panel_attributes>lt=&lt;.
629 &lt;updates
630 mIsRegistryLockedSharedOnThisThread&gt;</panel_attributes>
631 <additional_attributes>10.0;240.0;310.0;10.0</additional_attributes>
632 </element>
633 <element>
634 <id>Relation</id>
635 <coordinates>
636 <x>330</x>
637 <y>570</y>
638 <w>170</w>
639 <h>80</h>
640 </coordinates>
641 <panel_attributes>lt=-&gt;&gt;&gt;&gt;
642 m1=1
643 mThreadRegistration: *</panel_attributes>
644 <additional_attributes>120.0;60.0;40.0;10.0</additional_attributes>
645 </element>
646 <element>
647 <id>Relation</id>
648 <coordinates>
649 <x>280</x>
650 <y>570</y>
651 <w>200</w>
652 <h>710</h>
653 </coordinates>
654 <panel_attributes>lt=&lt;.
655 &lt;accesses&gt;</panel_attributes>
656 <additional_attributes>180.0;690.0;10.0;690.0;10.0;10.0</additional_attributes>
657 </element>
658 <element>
659 <id>Relation</id>
660 <coordinates>
661 <x>270</x>
662 <y>570</y>
663 <w>190</w>
664 <h>890</h>
665 </coordinates>
666 <panel_attributes>lt=&lt;.
667 &lt;accesses&gt;</panel_attributes>
668 <additional_attributes>170.0;870.0;10.0;870.0;10.0;10.0</additional_attributes>
669 </element>
670 <element>
671 <id>UMLClass</id>
672 <coordinates>
673 <x>200</x>
674 <y>1740</y>
675 <w>440</w>
676 <h>80</h>
677 </coordinates>
678 <panel_attributes>ThreadRegistry::OffThreadRef::{,Const}RWFromAnyThreadWithLock
680 -mDataLock: BaseProfilerAutoLock
682 +DataCRef() {,const}: ThreadRegistrationLockedRWOnThread&amp;
683 +operator-&gt;() {,const}: ThreadRegistrationLockedRWOnThread&amp;</panel_attributes>
684 <additional_attributes/>
685 </element>
686 <element>
687 <id>Relation</id>
688 <coordinates>
689 <x>250</x>
690 <y>570</y>
691 <w>90</w>
692 <h>1190</h>
693 </coordinates>
694 <panel_attributes>lt=&lt;.
695 &lt;creates&gt;</panel_attributes>
696 <additional_attributes>10.0;1170.0;10.0;10.0</additional_attributes>
697 </element>
698 <element>
699 <id>Relation</id>
700 <coordinates>
701 <x>180</x>
702 <y>1810</y>
703 <w>220</w>
704 <h>120</h>
705 </coordinates>
706 <panel_attributes>lt=-&gt;&gt;&gt;&gt;
707 mLockedRWFromAnyThread</panel_attributes>
708 <additional_attributes>200.0;100.0;80.0;100.0;80.0;10.0</additional_attributes>
709 </element>
710 </diagram>