# Generate png with: dot -Tpng -O ownership.gv
digraph shaka2_ownership {
label=<Shaka 2 Ownership Diagram>
labelloc=t
node [ shape=rectangle ]
MediaSource [ shape=oval ]
SourceBuffer [ shape=oval ]
TextTrack [ shape=oval ]
AbrManager [ shape=trapezium ]
HttpFetchPlugin [ shape=trapezium ]
ManifestParser [ shape=trapezium ]
TextDisplayer [ shape=trapezium ]
TextParser [ shape=trapezium ]
Player -> AbrManager
Player -> NetworkingEngine
Player -> ManifestParser
Player -> MediaSourceEngine
Player -> StreamingEngine
Player -> DrmEngine
Player -> Manifest
Player -> TextDisplayer
TextDisplayer -> TextTrack
NetworkingEngine -> HttpFetchPlugin
ManifestParser -> NetworkingEngine [ style=dotted ]
DrmEngine -> NetworkingEngine [ style=dotted ]
StreamingEngine -> MediaSourceEngine [ style=dotted ]
StreamingEngine -> Manifest [ style=dotted ]
StreamingEngine -> NetworkingEngine [ style=dotted ]
MediaSourceEngine -> MediaSource
# MediaSourceEngine owns multiple SourceBuffers, so we represent that here
# with two edges:
MediaSourceEngine -> SourceBuffer
MediaSourceEngine -> SourceBuffer
MediaSourceEngine -> Transmuxer
MediaSourceEngine -> TextEngine
TextEngine -> TextDisplayer [ style=dotted ]
TextEngine -> TextParser
# Player does not own MediaSource since v2.4, but without this link, the graph
# becomes unbalanced and harder to read. This is a hack.
Player -> MediaSource [ style=invisible arrowhead=none ]
subgraph cluster_legend {
style=rounded
color="#444444"
label=<Legend>
fontsize=12
fontcolor="#444444"
node [ shape=plaintext color="#444444" fontsize=10 fontcolor="#444444" ]
edge [ color="#444444" ]
blank1 [ label="" fixedsize=true height=0 ]
blank2 [ label="" fixedsize=true height=0 ]
"weak reference" -> blank2 [ style=dotted ]
ownership -> blank1
plugin [ shape=trapezium ]
"browser built-in" [ shape=oval ]
"internal class" [ shape=rectangle ]
}
# Hack to move the legend beneath the main graph:
TextParser -> "internal class" [ style=invisible arrowhead=none ]
}