Add new function to update taken_info of nodes used right after invoking user callback 85/213785/2 accepted/tizen/unified/20190917.034037 submit/tizen/20190916.053415
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 11 Sep 2019 08:09:27 +0000 (17:09 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Mon, 16 Sep 2019 00:59:53 +0000 (09:59 +0900)
It'll reduce cyclomatic complexity of SAM.

[Version] 0.12.50
[Issue Type] Refactoring

Change-Id: Ife68840f015f82ab7cfd25dc3d54ecc792a197da
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
focus_server/mm_sound_mgr_focus.c
packaging/libmm-sound.spec

index 2fbec02..568b1d8 100644 (file)
@@ -326,6 +326,71 @@ static int _mm_sound_mgr_focus_do_watch_callback(focus_type_e focus_type, focus_
        return MM_ERROR_NONE;
 }
 
+static void _update_taken_info(focus_command_e command, const _mm_sound_mgr_focus_param_t *assaulter_param, focus_node_t *victim_node, bool reacquisition_changed)
+{
+       int taken_pid = 0;
+       int taken_hid = 0;
+       int flag_for_taken_index = 0;
+       int i = 0;
+
+       /* update victim node */
+       if (command == FOCUS_COMMAND_RELEASE) {
+               taken_pid = assaulter_param->pid;
+               taken_hid = assaulter_param->handle_id;
+               flag_for_taken_index = assaulter_param->request_type & victim_node->status;
+       } else {
+               taken_pid = 0;
+               taken_hid = 0;
+               flag_for_taken_index = assaulter_param->request_type;
+       }
+
+       for (i = 0; i < NUM_OF_STREAM_IO_TYPE; i++) {
+               if (reacquisition_changed) {
+                       /* Update taken-info including other nodes here.
+                       * If the victim node's re-acquisition value is set to false,
+                       * propagates its taken-info to its victim node. */
+                       debug_msg("[---------- handling reacquisition change in callback ----------] ");
+                       if (!victim_node->reacquisition) {
+                               GList *list = NULL;
+                               focus_node_t *node = NULL;
+                               for (list = g_focus_node_list; list != NULL; list = list->next) {
+                                       SET_NODE_FROM_LIST_DATA(node, list);
+                                       if (node->taken_by_id[i].pid == victim_node->pid &&
+                                               node->taken_by_id[i].handle_id == victim_node->handle_id) {
+                                               UPDATE_FOCUS_TAKEN_INFO(backup, node, node->taken_by_id[i].pid, node->taken_by_id[i].handle_id);
+                                               UPDATE_FOCUS_TAKEN_INFO(by_id, node, taken_pid, taken_hid);
+                                       } else if (!list->next) {
+                                               if (flag_for_taken_index & (i + 1))
+                                                       UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
+                                               else
+                                                       UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, victim_node->taken_by_id[i].pid, victim_node->taken_by_id[i].handle_id);
+
+                                               UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, 0, 0);
+                                       }
+                               }
+                               continue;
+                       }
+                       if (flag_for_taken_index & (i + 1)) {
+                               UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
+                               UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, 0, 0);
+                       }
+                       continue;
+               }
+
+               if (flag_for_taken_index & (i + 1)) {
+                       if (command == FOCUS_COMMAND_ACQUIRE &&
+                               ((victim_node->taken_by_id[i].pid != assaulter_param->pid) ||
+                               (victim_node->taken_by_id[i].handle_id != assaulter_param->handle_id)))
+                               continue;
+
+                       if (victim_node->reacquisition)
+                               UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
+                       else
+                               UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
+               }
+       }
+}
+
 int _mm_sound_mgr_focus_do_callback(focus_command_e command, focus_node_t *victim_node, const _mm_sound_mgr_focus_param_t *assaulter_param)
 {
        int res = MM_ERROR_NONE;
@@ -341,9 +406,6 @@ int _mm_sound_mgr_focus_do_callback(focus_command_e command, focus_node_t *victi
        int pret = 0;
        int i = 0;
        int flag_for_focus_type = 0;
-       int flag_for_taken_index = 0;
-       int taken_pid = 0;
-       int taken_hid = 0;
        int ret_handle = -1;
        bool reacquisition_changed = false;
 
@@ -480,60 +542,7 @@ int _mm_sound_mgr_focus_do_callback(focus_command_e command, focus_node_t *victi
        endtime = time.tv_sec * 1000000 + time.tv_usec;
        debug_msg("[RETCB] CALLBACK returned (cbtimelab=%d(ms), client pid=%d, returned handle=%d)", ((endtime-starttime)/1000), cb_data.pid, ret_handle);
 
-       /* update victim node */
-       if (command == FOCUS_COMMAND_RELEASE) {
-               taken_pid = assaulter_param->pid;
-               taken_hid = assaulter_param->handle_id;
-               flag_for_taken_index = assaulter_param->request_type & victim_node->status;
-       } else {
-               taken_pid = 0;
-               taken_hid = 0;
-               flag_for_taken_index = assaulter_param->request_type;
-       }
-
-       for (i = 0; i < NUM_OF_STREAM_IO_TYPE; i++) {
-               if (reacquisition_changed) {
-                       /* Update taken-info including other nodes here.
-                        * If the victim node's re-acquisition value is set to false,
-                        * propagates its taken-info to its victim node. */
-                       debug_msg("[---------- handling reacquisition change in callback ----------->] ");
-                       if (!victim_node->reacquisition) {
-                               GList *list = NULL;
-                               focus_node_t *node = NULL;
-                               for (list = g_focus_node_list; list != NULL; list = list->next) {
-                                       SET_NODE_FROM_LIST_DATA(node, list);
-                                       if (node->taken_by_id[i].pid == victim_node->pid &&
-                                               node->taken_by_id[i].handle_id == victim_node->handle_id) {
-                                               UPDATE_FOCUS_TAKEN_INFO(backup, node, node->taken_by_id[i].pid, node->taken_by_id[i].handle_id);
-                                               UPDATE_FOCUS_TAKEN_INFO(by_id, node, taken_pid, taken_hid);
-                                       } else if (!list->next) {
-                                               if (flag_for_taken_index & (i+1))
-                                                       UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
-                                               else
-                                                       UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, victim_node->taken_by_id[i].pid, victim_node->taken_by_id[i].handle_id);
-
-                                               UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, 0, 0);
-                                       }
-                               }
-                       } else {
-                               if (flag_for_taken_index & (i+1)) {
-                                       UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
-                                       UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, 0, 0);
-                               }
-                       }
-                       debug_msg("[<----------------------------------------------------------------] ");
-               } else if (flag_for_taken_index & (i+1)) {
-                       if (command == FOCUS_COMMAND_ACQUIRE &&
-                               ((victim_node->taken_by_id[i].pid != assaulter_param->pid) ||
-                               (victim_node->taken_by_id[i].handle_id != assaulter_param->handle_id)))
-                               continue;
-
-                       if (victim_node->reacquisition)
-                               UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
-                       else
-                               UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
-               }
-       }
+       _update_taken_info(command, assaulter_param, victim_node, reacquisition_changed);
 
        if (command == FOCUS_COMMAND_RELEASE)
                victim_node->status = victim_node->status & ~(cb_data.type);
index fa7b8ec..1f0193b 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-sound
 Summary:    MMSound Package contains client lib and sound_server binary
-Version:    0.12.49
+Version:    0.12.50
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0