mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-02-08 11:52:02 +08:00
tune code for _MGSCHEMA_COMPOSITING
This commit is contained in:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user