1*bbecb9d1SAndroid Build Coastguard Worker /*
2*bbecb9d1SAndroid Build Coastguard Worker * Copyright 2021 Google LLC
3*bbecb9d1SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
4*bbecb9d1SAndroid Build Coastguard Worker */
5*bbecb9d1SAndroid Build Coastguard Worker
6*bbecb9d1SAndroid Build Coastguard Worker #include "render_context.h"
7*bbecb9d1SAndroid Build Coastguard Worker #include "render_server.h"
8*bbecb9d1SAndroid Build Coastguard Worker
9*bbecb9d1SAndroid Build Coastguard Worker /* The main process is the server process. It enters render_server_main and
10*bbecb9d1SAndroid Build Coastguard Worker * never returns except on fatal errors.
11*bbecb9d1SAndroid Build Coastguard Worker *
12*bbecb9d1SAndroid Build Coastguard Worker * The server process supports only one connection currently. It creates a
13*bbecb9d1SAndroid Build Coastguard Worker * render_client to manage the connection. There is a client process at the
14*bbecb9d1SAndroid Build Coastguard Worker * other end of the connection. When the client process requests a new
15*bbecb9d1SAndroid Build Coastguard Worker * context to be created, the server process creates a worker. It also sets
16*bbecb9d1SAndroid Build Coastguard Worker * up a socket pair, with one end owned by the worker and the other end sent
17*bbecb9d1SAndroid Build Coastguard Worker * to and owned by the client process.
18*bbecb9d1SAndroid Build Coastguard Worker *
19*bbecb9d1SAndroid Build Coastguard Worker * A worker can be a subprocess forked from the server process, or a thread
20*bbecb9d1SAndroid Build Coastguard Worker * created by the server process. When a worker is a subprocess, the
21*bbecb9d1SAndroid Build Coastguard Worker * subprocess returns from render_server_main and enters render_context_main.
22*bbecb9d1SAndroid Build Coastguard Worker *
23*bbecb9d1SAndroid Build Coastguard Worker * When a worker is a thread, the thread enters render_context_main directly
24*bbecb9d1SAndroid Build Coastguard Worker * from its start function. In this case, render_context_main must be
25*bbecb9d1SAndroid Build Coastguard Worker * thread-safe.
26*bbecb9d1SAndroid Build Coastguard Worker */
27*bbecb9d1SAndroid Build Coastguard Worker int
main(int argc,char ** argv)28*bbecb9d1SAndroid Build Coastguard Worker main(int argc, char **argv)
29*bbecb9d1SAndroid Build Coastguard Worker {
30*bbecb9d1SAndroid Build Coastguard Worker render_log_init();
31*bbecb9d1SAndroid Build Coastguard Worker
32*bbecb9d1SAndroid Build Coastguard Worker struct render_context_args ctx_args;
33*bbecb9d1SAndroid Build Coastguard Worker bool ok = render_server_main(argc, argv, &ctx_args);
34*bbecb9d1SAndroid Build Coastguard Worker
35*bbecb9d1SAndroid Build Coastguard Worker /* this is a subprocess */
36*bbecb9d1SAndroid Build Coastguard Worker if (ok && ctx_args.valid)
37*bbecb9d1SAndroid Build Coastguard Worker ok = render_context_main(&ctx_args);
38*bbecb9d1SAndroid Build Coastguard Worker
39*bbecb9d1SAndroid Build Coastguard Worker return ok ? 0 : -1;
40*bbecb9d1SAndroid Build Coastguard Worker }
41