10
UMLClass
70
110
300
70
/PProfilerParent/
bg=light_gray
--
*+SendAwaitNextChunkManagerUpdate()*
*+SendDestroyReleasedChunksAtOrBefore()*
UMLClass
470
20
210
70
*ProfileBufferChunkMetadata*
bg=light_gray
--
+doneTimeStamp
+bufferBytes
UMLClass
780
110
330
70
/PProfilerChild/
bg=light_gray
--
*/+RecvAwaitNextChunkManagerUpdate() = 0/*
*/+RecvDestroyReleasedChunksAtOrBefore() = 0/*
UMLClass
110
260
220
70
ProfilerParent
--
*-processId*
--
Relation
210
170
30
110
lt=<<-
10.0;10.0;10.0;90.0
UMLClass
740
250
410
90
ProfilerChild
--
-UpdateStorage: unreleased bytes, released: {pid, rangeStart[ ]}
--
*+RecvAwaitNextChunkUpdate()*
*+RecvDestroyReleasedChunksAtOrBefore()*
Relation
930
170
30
100
lt=<<-
10.0;10.0;10.0;80.0
UMLClass
110
400
220
70
ProfilerParentTracker
--
_+Enumerate()_
_*+ForChild()*_
Relation
210
320
190
100
lt=<-
m1=0..n
nsTArray<ProfilerParent*>
10.0;10.0;10.0;80.0
UMLClass
80
1070
150
30
ProfileBufferChunk
UMLClass
380
1070
210
30
/ProfileBufferChunkManager/
UMLClass
180
900
700
50
ProfileBufferChunkManagerWithLocalLimit
--
-mUpdateCallback
Relation
480
940
30
150
lt=<<-
10.0;130.0;10.0;10.0
UMLClass
380
1200
210
30
ProfileChunkedBuffer
Relation
410
1090
140
130
lt=->>>>
mChunkManager
10.0;10.0;10.0;110.0
UMLClass
960
1200
100
30
CorePS
UMLClass
960
1040
100
30
ActivePS
Relation
580
1200
400
40
lt=->>>>>
mCoreBuffer
10.0;20.0;380.0;20.0
Relation
870
940
250
120
lt=->>>>>
mProfileBufferChunkManager
10.0;10.0;90.0;100.0
UMLClass
830
1140
100
30
ProfileBuffer
Relation
920
1060
130
110
lt=->>>>>
mProfileBuffer
10.0;90.0;40.0;10.0
Relation
580
1160
270
70
lt=->>>>
mEntries
10.0;50.0;250.0;10.0
Relation
90
1090
310
150
lt=->>>>>
m1=0..1
mCurrentChunk: UniquePtr<>
10.0;10.0;10.0;130.0;290.0;130.0
Relation
210
1080
200
150
lt=->>>>>
m1=0..N
mNextChunks: UniquePtr<>
20.0;10.0;170.0;130.0
Relation
200
940
230
150
lt=->>>>>
m1=0..N
mReleasedChunks: UniquePtr<>
10.0;130.0;10.0;10.0
Relation
530
1090
270
130
lt=->>>>>
mOwnedChunkManager: UniquePtr<>
10.0;10.0;10.0;110.0
UMLClass
480
390
550
150
*ProfileBufferGlobalController*
--
-mMaximumBytes
-mCurrentUnreleasedBytesTotal
-mCurrentUnreleasedBytes: {pid, unreleased bytes}[ ] sorted by pid
-mCurrentReleasedBytes
-mReleasedChunks: {doneTimeStamp, bytes, pid}[ ] sorted by timestamp
-mDestructionCallback: function<void(pid, rangeStart)>
--
+Update(pid, unreleased bytes, released: ProfileBufferChunkMetadata[ ])
Relation
320
420
180
40
lt=->>>>>
mController
160.0;20.0;10.0;20.0
Relation
20
400
110
80
lt=->>>>>
_sInstance_
90.0;60.0;10.0;60.0;10.0;10.0;90.0;10.0
UMLNote
480
250
220
120
The controller is only needed
if there *are* child processes,
so we can create it with the first
child (at which point the tracker
can register itself with the local
profiler), and destroyed with the
last child.
bg=blue
Relation
690
330
100
80
10.0;10.0;80.0;60.0
Relation
130
460
200
380
lt=->>>>
mParentChunkManager
180.0;360.0;10.0;360.0;10.0;10.0
Relation
740
330
350
510
lt=->>>>
mLocalBufferChunkManager
10.0;490.0;330.0;490.0;330.0;10.0
UMLClass
470
650
400
100
*ProfileBufferControlledChunkManager::Update*
--
-mUnreleasedBytes
-mReleasedBytes
-mOldestDoneTimeStamp
-mNewReleasedChunks: ChunkMetadata[ ]
UMLClass
470
560
400
60
*ProfileBufferControlledChunkManager::ChunkMetadata*
--
-mDoneTimeStamp
-mBufferBytes
Relation
670
610
30
60
lt=<.
10.0;10.0;10.0;40.0
Relation
670
740
30
60
lt=<.
10.0;10.0;10.0;40.0
Relation
670
50
130
110
lt=<.
10.0;10.0;110.0;90.0
Relation
360
50
130
110
lt=<.
110.0;10.0;10.0;90.0
UMLClass
400
130
350
100
*ProfileBufferChunkManagerUpdate*
bg=light_gray
--
-unreleasedBytes
-releasedBytes
-oldestDoneTimeStamp
-newlyReleasedChunks: ProfileBufferChunkMetadata[ ]
UMLClass
310
780
440
70
*ProfileBufferControlledChunkManager*
--
*/+SetUpdateCallback(function<void(update: Update&&)>)/*
*/+DestroyChunksAtOrBefore(timeStamp)/*
Relation
480
840
30
80
lt=<<-
10.0;10.0;10.0;60.0