digraph {
rankdir = "BT"
subgraph clients {
rank = same;
browser [label = "Browser"]
vnc_client [label = "VNC Client"]
}
host_renderer [label = < gfxstream / virglrenderer >]
run_cvd
wayland_socket [label = "internal/frames.sock", shape = "rectangle"]
webrtc [label = < webrtc >, penwidth = 2]
vmm [label = < crosvm / qemu >]
subgraph cluster_android {
label = "Cuttlefish VM"
subgraph devices {
rank = same;
drm_card [label = "/dev/dri/card0", shape = "rectangle"]
drm_render [label = "/dev/dri/renderD128", shape = "rectangle"]
}
subgraph hals {
rank = same;
angle
egl [shape = "rectangle"]
hwcomposer_drm [label = "hwcomposer.drm"]
hwcomposer_ranchu [label = "hwcomposer.ranchu"]
vulkan [shape = "rectangle"]
}
minigbm
mesa
swiftshader [label = "SwiftShader Pastel"]
surfaceflinger
vulkan_ranchu [color = "blue", label = "Gfxstream Vulkan"]
}
webrtc -> browser [dir = both]
vmm -> vnc_client [dir = both, color = "red"]
webrtc -> run_cvd [dir = back]
wayland_socket -> webrtc [dir = both, color = "blue", label = < Wayland >]
vmm -> wayland_socket [dir = both, color = "blue", label = < Wayland >]
{ rank = same; host_renderer -> vmm [dir = both] }
drm_render -> vmm
drm_card -> vmm
minigbm -> drm_render
mesa -> drm_render
vulkan_ranchu -> drm_render
hwcomposer_drm -> drm_card
hwcomposer_ranchu -> drm_card
minigbm -> hwcomposer_drm [dir = both, label = "HIDL (graphics.allocator)", style = "dashed"]
hwcomposer_ranchu -> minigbm [dir = both, label = "AIDL (graphics.allocator)", style = "dashed"]
angle -> egl [dir = "back", label = "Symlink", style = "dashed"]
egl -> mesa [label = "Symlink", style = "dashed"]
vulkan -> angle [dir = "back", label = "Shared library"]
vulkan-> swiftshader [label = "Symlink", style = "dashed"]
vulkan -> vulkan_ranchu [label = "Symlink", style = "dashed"]
surfaceflinger -> egl [label = "Shared library"]
surfaceflinger -> hwcomposer_ranchu [dir = both, label = "AIDL (graphics.composer3)", style = "dashed"]
surfaceflinger -> hwcomposer_drm [dir = both, label = "HIDL (graphics.composer)", style = "dashed"]
surfaceflinger -> vulkan [label = "Shared library"]
surfaceflinger -> minigbm [dir = both, label = "HIDL (graphics.allocator)"]
}