digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__android_opengl_shaders_cache {
label="AndroidOpenglShadersCache";
graph[style=dotted];
android_opengl_shaders_cache__seq [label=<
pos | size | type | id |
0 | 4 | | magic |
4 | 4 | u4le | crc32 |
8 | ⇲ | Cache | contents |
>];
subgraph cluster__alignment {
label="AndroidOpenglShadersCache::Alignment";
graph[style=dotted];
alignment__seq [label=<
pos | size | type | id |
0 | ((_io.pos + 3) & (~3 - _io.pos)) | | alignment |
>];
}
subgraph cluster__prefixed_string {
label="AndroidOpenglShadersCache::PrefixedString";
graph[style=dotted];
prefixed_string__seq [label=<
pos | size | type | id |
0 | 4 | u4le | len_str |
4 | len_str | str(ascii) | str |
... | ... | Alignment | alignment |
>];
}
subgraph cluster__cache {
label="AndroidOpenglShadersCache::Cache";
graph[style=dotted];
cache__seq [label=<
pos | size | type | id |
0 | 4 | | magic |
4 | 4 | u4le | version |
8 | 4 | u4le | device_version |
12 | 4 | u4le | num_entries |
16 | ... | PrefixedString | build_id |
... | ... | Entry | entries |
repeat num_entries times |
>];
subgraph cluster__entry {
label="AndroidOpenglShadersCache::Cache::Entry";
graph[style=dotted];
entry__seq [label=<
pos | size | type | id |
0 | 4 | u4le | len_key |
4 | 4 | u4le | len_value |
8 | len_key | | key |
... | len_value | | value |
... | ... | Alignment | alignment |
>];
}
}
}
android_opengl_shaders_cache__seq:contents_type -> cache__seq [style=bold];
prefixed_string__seq:len_str_type -> prefixed_string__seq:str_size [color="#404040"];
prefixed_string__seq:alignment_type -> alignment__seq [style=bold];
cache__seq:build_id_type -> prefixed_string__seq [style=bold];
cache__seq:entries_type -> entry__seq [style=bold];
cache__seq:num_entries_type -> cache__seq:entries__repeat [color="#404040"];
entry__seq:len_key_type -> entry__seq:key_size [color="#404040"];
entry__seq:len_value_type -> entry__seq:value_size [color="#404040"];
entry__seq:alignment_type -> alignment__seq [style=bold];
}