From 8020e09de57c44fc49eb0ce5ec4af2629f4c09cd Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Mon, 13 Jan 2020 18:09:04 +0800 Subject: [PATCH] tune code for _MGSCHEMA_COMPOSITING --- src/server/layer.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/server/layer.c b/src/server/layer.c index 9fe8709a..280359a8 100644 --- a/src/server/layer.c +++ b/src/server/layer.c @@ -90,6 +90,7 @@ static BOOL do_alloc_layer (MG_Layer* layer, const char* name, ZORDERNODE* znodes; void* maskrect_usage_bmp; +#ifdef _MGSCHEMA_SHAREDFB layer->zorder_shmid = kernel_alloc_z_order_info (nr_topmosts, nr_normals); if (layer->zorder_shmid == -1) @@ -102,6 +103,11 @@ static BOOL do_alloc_layer (MG_Layer* layer, const char* name, if (shmctl (layer->zorder_shmid, IPC_RMID, NULL) < 0) return FALSE; +#else /* _MGSCHEMA_COMPOSITING */ + zi = kernel_alloc_z_order_info (nr_topmosts, nr_normals); + if (zi == NULL) + return FALSE; +#endif strcpy (layer->name, name); @@ -129,6 +135,7 @@ static BOOL do_alloc_layer (MG_Layer* layer, const char* name, zi->cli_trackmenu = -1; zi->ptmi_in_cli = HWND_INVALID; +#ifdef _MGSCHEMA_SHAREDFB zi->zi_semid = SHAREDRES_SEMID_LAYER; /* find one unused semaphore slot here */ @@ -141,6 +148,7 @@ static BOOL do_alloc_layer (MG_Layer* layer, const char* name, + zi->max_nr_topmosts + zi->max_nr_normals; semctl (zi->zi_semid, zi->zi_semnum, SETVAL, arg); } +#endif /* _MGSCHEMA_SHAREDFB */ memset (zi + 1, 0xFF, SIZE_USAGE_BMP); /* get a unused mask rect slot. */ @@ -172,8 +180,11 @@ static void do_free_layer (MG_Layer* layer) { ZORDERINFO* zi = layer->zorder_info; +#ifdef _MGSCHEMA_SHAREDFB /* free zorder_semid for reuse here... */ __mg_slot_clear_use (sem_usage, zi->zi_semnum); +#endif + kernel_free_z_order_info (zi); if (layer->prev) @@ -244,7 +255,8 @@ inline static key_t get_sem_key (void) return (key_t)(IPC_KEY_BASE + 0x03); } -void __mg_delete_zi_sem (void) +#ifdef _MGSCHEMA_SHAREDFB +static void delete_zi_sem (void) { union semun ignored; if (semctl (SHAREDRES_SEMID_LAYER, 0, IPC_RMID, ignored) < 0) @@ -255,11 +267,14 @@ void __mg_delete_zi_sem (void) error: perror("remove semaphore"); } +#endif /* _MGSCHEMA_SHAREDFB */ int __mg_init_layers () { +#ifdef _MGSCHEMA_SHAREDFB key_t sem_key; - int semid; +#endif /* _MGSCHEMA_SHAREDFB */ + int semid = 0; mgLayers = calloc (1, sizeof (MG_Layer)); @@ -268,6 +283,7 @@ int __mg_init_layers () memset (sem_usage, 0xFF, sizeof (sem_usage)); +#ifdef _MGSCHEMA_SHAREDFB if ((sem_key = get_sem_key ()) == -1) { return -1; } @@ -275,9 +291,10 @@ int __mg_init_layers () semid = semget (sem_key, MAX_NR_LAYERS, SEM_PARAM | IPC_CREAT | IPC_EXCL); if (semid == -1) return -1; - atexit (__mg_delete_zi_sem); + atexit (delete_zi_sem); SHAREDRES_SEMID_LAYER = semid; +#endif /* _MGSCHEMA_SHAREDFB */ /* allocate the first layer for the default layer. */ if (!do_alloc_layer (mgLayers, NAME_DEF_LAYER, @@ -429,7 +446,11 @@ static void do_client_join_layer (int cli, if (new_client->layer == layer) { /* duplicated calling of JoinLayer */ joined_info->cli_id = cli; +#ifdef _MGSCHEMA_SHAREDFB joined_info->zo_shmid = layer->zorder_shmid; +#else + joined_info->zo_shmid = 0; +#endif return; } @@ -451,7 +472,11 @@ static void do_client_join_layer (int cli, layer->cli_head = new_client; joined_info->cli_id = cli; +#ifdef _MGSCHEMA_SHAREDFB joined_info->zo_shmid = layer->zorder_shmid; +#else + joined_info->zo_shmid = 0; +#endif } /* Join a client to a layer, the server side of JoinLayer */