xref: /aosp_15_r20/external/cronet/net/docs/pools.dot (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1digraph SocketPools {
2    subgraph cluster_legend {
3	label="Legend";
4
5	## The following legend is an attempt to match UML notation,
6	## except for template_class and Factory->object, which are
7	## invented for this diagram.
8	BaseClass;
9	SubClass [label="Derived Class"];
10	Whole;
11	Part;
12	A;
13	B;
14	Interface [label="Interface / ABC", style=dashed];
15	template_class [shape=diamond]; # Link will name parameter(s)
16
17	SubClass -> BaseClass [arrowhead="empty"];
18	SubClass -> Interface [arrowhead="empty", style=dashed];
19	Part -> Whole [arrowhead="diamond", label="ownership"];
20	Part -> Whole [arrowhead="odiamond", label="pointer"];
21	RefCountedPart -> Whole [arrowhead="diamond", color=red,
22		                 label="partial\nownership"];
23	A -> B [arrowhead="none", headlabel="?..?", taillabel="?..?",
24		label="association"];
25	// Often a "subgraph { rank=same; .. }" is used to wrap the
26	// below to make the generative relationship distinctive
27	// from the other class relationships.
28	Factory -> object [arrowhead=veevee];
29    };
30
31    ClientSocketPoolBase [shape=diamond];
32    ClientSocketPoolBaseHelper;
33
34    ClientSocketPoolBaseHelper_ConnectJobFactory
35        [style=dotted, label="ClientSocketPoolBaseHelper::\nConnectJobFactory"];
36    ClientSocketPoolBase_ConnectJobFactory
37        [style=dotted, shape=diamond,
38	 label="ClientSocketPoolBase::\nConnectJobFactory"];
39    ClientSocketPoolBase_ConnectJobFactoryAdaptor
40        [shape=diamond,
41	 label="ClientSocketPoolBase::\nConnectJobFactoryAdaptor"];
42
43    HigherLayeredPool [style=dotted];
44    LowerLayeredPool [style=dotted];
45    ClientSocketPool [style=dotted];
46
47    ConnectJob [style=dashed];
48    ConnectJob_Delegate [style=dotted, label="ConnectJob::Delegate"];
49
50    ClientSocketFactory [style=dotted];
51    DefaultClientSocketFactory;
52    TCPClientSocket;
53    TransportClientSocket [style=dotted]
54    StreamSocket [style=dotted]
55    Socket;
56
57    TransportSocketParams;
58    TransportConnectJobHelper;
59    TransportConnectJobFactory;
60    TransportConnectJob;
61
62    TransportClientSocketPool -> ClientSocketPool [arrowhead=empty];
63    ClientSocketPool -> LowerLayeredPool [arrowhead=empty];
64    ClientSocketPoolBaseHelper -> ConnectJob_Delegate [arrowhead=empty];
65    TransportConnectJobFactory -> ClientSocketPoolBase_ConnectJobFactory
66        [arrowhead=empty, label="TransportSocketParams"];
67    ClientSocketPoolBase_ConnectJobFactoryAdaptor ->
68        ClientSocketPoolBaseHelper_ConnectJobFactory
69 	    [arrowhead=empty, arrowtail=none];
70    TransportConnectJob -> ConnectJob [arrowhead=empty];
71    DefaultClientSocketFactory -> ClientSocketFactory [arrowhead=empty];
72    StreamSocket -> Socket [arrowhead=empty]
73    TCPClientSocket -> TransportClientSocket [arrowhead=empty]
74    TransportClientSocket -> StreamSocket [arrowhead=empty]
75
76    ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
77    ClientSocketPoolBase -> TransportClientSocketPool
78        [arrowhead=diamond, label="TransportSocketParams"];
79    ClientSocketPoolBase_ConnectJobFactory ->
80        ClientSocketPoolBase_ConnectJobFactoryAdaptor [arrowhead=diamond];
81    ClientSocketPoolBaseHelper_ConnectJobFactory ->
82        ClientSocketPoolBaseHelper [arrowhead=diamond];
83    TransportConnectJobHelper -> TransportConnectJob [arrowhead=diamond];
84    TransportSocketParams -> TransportConnectJobHelper
85        [arrowhead=diamond, color=red];
86
87    ConnectJob -> ConnectJob_Delegate
88        [dir=back, arrowhead=none, arrowtail=odiamond];
89    HigherLayeredPool -> ClientSocketPoolBaseHelper
90        [arrowhead=odiamond, taillabel="*"];
91    LowerLayeredPool -> ClientSocketPoolBaseHelper
92        [arrowhead=odiamond, taillabel="*"];
93    ClientSocketFactory -> ClientSocketPoolBaseHelper [arrowhead=odiamond];
94
95    subgraph {
96        rank=same;
97        ClientSocketPoolBaseHelper_ConnectJobFactory -> ConnectJob
98            [arrowhead=veevee];
99    }
100    ClientSocketPoolBase_ConnectJobFactory -> ConnectJob [arrowhead=veevee];
101    ClientSocketFactory -> TCPClientSocket [arrowhead=veevee]
102}
103
104