xref: /aosp_15_r20/external/virglrenderer/server/main.c (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
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