e_info: print fps of hwc window 99/199199/3
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 31 Jan 2019 07:19:49 +0000 (16:19 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Thu, 7 Feb 2019 07:13:47 +0000 (16:13 +0900)
Change-Id: I3b20b35c0ae726c985411b75dcdd1436359ff7fd

src/bin/e_info_client.c
src/bin/e_info_server.c
src/bin/e_info_shared_types.h

index a4331ea0f3842cb0543a62e0b7c7b2826527bf1e..a4c045ccbed0e15323755b8add547cea9ac3aeff 100644 (file)
@@ -30,7 +30,7 @@ typedef struct _E_Info_Client
    Eina_List         *pending_commit_list;
 
    /* layer fps */
-   Eina_List         *layer_fps_list;
+   Eina_List         *fps_list;
 
    /* dump_buffers */
    const char *dump_fullpath;
@@ -78,19 +78,21 @@ typedef struct _E_Pending_Commit_Info
    unsigned int tsurface;
 } E_Pending_Commit_Info;
 
-typedef struct _E_Layer_Fps_Info
+typedef struct _E_Fps_Info
 {
+   E_Info_Fps_Type type;
    const char *output;
    int zpos;
+   unsigned int window;
    double fps;
-} E_Layer_Fps_Info;
+} E_Fps_Info;
 
 #define VALUE_TYPE_FOR_TOPVWINS "uuisiiiiibbbiiibbiiusb"
 #define VALUE_TYPE_REQUEST_RESLIST "ui"
 #define VALUE_TYPE_REPLY_RESLIST "ssi"
 #define VALUE_TYPE_FOR_INPUTDEV "ssi"
 #define VALUE_TYPE_FOR_PENDING_COMMIT "uiuu"
-#define VALUE_TYPE_FOR_LAYER_FPS "sid"
+#define VALUE_TYPE_FOR_FPS "usiud"
 #define VALUE_TYPE_REQUEST_FOR_KILL "uts"
 #define VALUE_TYPE_REPLY_KILL "s"
 #define VALUE_TYPE_REQUEST_FOR_WININFO "t"
@@ -3235,29 +3237,31 @@ _e_info_client_proc_show_pending_commit(int argc, char **argv)
    E_FREE_LIST(e_info_client.pending_commit_list, _e_pending_commit_info_free);
 }
 
-static E_Layer_Fps_Info *
-_e_player_fps_info_new(const char *output, int zpos, double fps)
+static E_Fps_Info *
+_e_fps_info_new(E_Info_Fps_Type type, const char *output, int zpos, unsigned int window, double fps)
 {
-   E_Layer_Fps_Info *layer_fps = NULL;
+   E_Fps_Info *fps_info = NULL;
 
-   layer_fps = E_NEW(E_Layer_Fps_Info, 1);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(layer_fps, NULL);
+   fps_info = E_NEW(E_Fps_Info, 1);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(fps_info, NULL);
 
-   layer_fps->output = output;
-   layer_fps->zpos = zpos;
-   layer_fps->fps = fps;
+   fps_info->type = type;
+   fps_info->output = output;
+   fps_info->zpos = zpos;
+   fps_info->window = window;
+   fps_info->fps = fps;
 
-   return layer_fps;
+   return fps_info;
 }
 
 static void
-_e_layer_fps_info_free(E_Layer_Fps_Info *layer_fps)
+_e_fps_info_free(E_Fps_Info *fps)
 {
-   E_FREE(layer_fps);
+   E_FREE(fps);
 }
 
 static void
-_cb_layer_fps_info_get(const Eldbus_Message *msg)
+_cb_fps_info_get(const Eldbus_Message *msg)
 {
    const char *name = NULL, *text = NULL;
    Eldbus_Message_Iter *array, *eldbus_msg;
@@ -3266,30 +3270,33 @@ _cb_layer_fps_info_get(const Eldbus_Message *msg)
    res = eldbus_message_error_get(msg, &name, &text);
    EINA_SAFETY_ON_TRUE_GOTO(res, finish);
 
-   res = eldbus_message_arguments_get(msg, "a("VALUE_TYPE_FOR_LAYER_FPS")", &array);
+   res = eldbus_message_arguments_get(msg, "a("VALUE_TYPE_FOR_FPS")", &array);
    EINA_SAFETY_ON_FALSE_GOTO(res, finish);
 
    while (eldbus_message_iter_get_and_next(array, 'r', &eldbus_msg))
      {
-        E_Layer_Fps_Info *layer_fps = NULL;
+        E_Fps_Info *fps_info = NULL;
         const char *output;
-        int zpos;
+        int zpos, type;
         double fps;
+        unsigned int window;
         res = eldbus_message_iter_arguments_get(eldbus_msg,
-                                                VALUE_TYPE_FOR_LAYER_FPS,
+                                                VALUE_TYPE_FOR_FPS,
+                                                &type,
                                                 &output,
                                                 &zpos,
+                                                &window,
                                                 &fps);
         if (!res)
           {
-             printf("Failed to get player_fps info\n");
+             printf("Failed to get fps info\n");
              continue;
           }
 
-        layer_fps = _e_player_fps_info_new(output, zpos, fps);
-        if (!layer_fps) continue;
+        fps_info = _e_fps_info_new(type, output, zpos, window, fps);
+        if (!fps_info) continue;
 
-        e_info_client.layer_fps_list = eina_list_append(e_info_client.layer_fps_list, layer_fps);
+        e_info_client.fps_list = eina_list_append(e_info_client.fps_list, fps_info);
      }
 
 finish:
@@ -3300,29 +3307,52 @@ finish:
 }
 
 static void
-_e_info_client_proc_fps_layer_info(int argc, char **argv)
+_e_info_client_proc_fps_info(int argc, char **argv)
 {
    do
      {
         Eina_List *l;
-        E_Layer_Fps_Info *layer_fps;
+        E_Fps_Info *fps;
 
-        if (!_e_info_client_eldbus_message("get_layer_fps_info", _cb_layer_fps_info_get))
+        if (!_e_info_client_eldbus_message("get_fps_info", _cb_fps_info_get))
           return;
 
-        if (!e_info_client.layer_fps_list)
-          goto fps_layer_done;
+        if (!e_info_client.fps_list)
+          goto fps_done;
 
-        EINA_LIST_FOREACH(e_info_client.layer_fps_list, l, layer_fps)
+        EINA_LIST_FOREACH(e_info_client.fps_list, l, fps)
           {
-             printf("%3s-ZPos@%d...%3.1f\n",
-                    layer_fps->output,
-                    layer_fps->zpos,
-                    layer_fps->fps);
+             if (fps->type == E_INFO_FPS_TYPE_OUTPUT)
+               {
+                  printf("%3s-OUTPUT...%3.1f\n",
+                         fps->output,
+                         fps->fps);
+               }
+             else if (fps->type == E_INFO_FPS_TYPE_LAYER)
+               {
+                  printf("%3s-Layer-ZPos@%d...%3.1f\n",
+                         fps->output,
+                         fps->zpos,
+                         fps->fps);
+               }
+             else if (fps->type == E_INFO_FPS_TYPE_HWC_WIN)
+               {
+                  printf("%3s-HWC-Win_ID(0x%x)-ZPos@%d...%3.1f\n",
+                         fps->output,
+                         fps->window,
+                         fps->zpos,
+                         fps->fps);
+               }
+             else if (fps->type == E_INFO_FPS_TYPE_HWC_COMP)
+               {
+                  printf("%3s-HWC-COMP...%3.1f\n",
+                         fps->output,
+                         fps->fps);
+               }
           }
 
-        E_FREE_LIST(e_info_client.layer_fps_list, _e_layer_fps_info_free);
-fps_layer_done:
+        E_FREE_LIST(e_info_client.fps_list, _e_fps_info_free);
+fps_done:
         usleep(500000);
      }
    while (1);
@@ -5093,8 +5123,8 @@ static ProcInfo procs_to_printinfo[] =
    },
    {
       "fps", NULL,
-      "Print FPS in every sec per layer",
-      _e_info_client_proc_fps_layer_info
+      "Print FPS in every sec per",
+      _e_info_client_proc_fps_info
    },
    {
       "keymap", NULL,
index 1311cd92538af81b08dfa64227bc215f96c652f1..9699ddd173eae5dbe222d8f9b994b43b3bab5c95 100644 (file)
@@ -79,7 +79,7 @@ static Eina_List *module_hook = NULL;
 #define VALUE_TYPE_REPLY_RESLIST "ssi"
 #define VALUE_TYPE_FOR_INPUTDEV "ssi"
 #define VALUE_TYPE_FOR_PENDING_COMMIT "uiuu"
-#define VALUE_TYPE_FOR_LAYER_FPS "sid"
+#define VALUE_TYPE_FOR_FPS "usiud"
 #define VALUE_TYPE_REQUEST_FOR_KILL "uts"
 #define VALUE_TYPE_REPLY_KILL "s"
 #define VALUE_TYPE_REQUEST_FOR_WININFO "t"
@@ -4478,17 +4478,18 @@ e_info_server_cb_show_pending_commit(const Eldbus_Service_Interface *iface EINA_
 }
 
 static void
-_msg_layer_fps_append(Eldbus_Message_Iter *iter)
+_msg_fps_append(Eldbus_Message_Iter *iter)
 {
-   Eina_List *output_l, *plane_l;
-   Eldbus_Message_Iter *array_of_layer_fps;
+   Eina_List *output_l, *plane_l, *hwc_l;
+   Eldbus_Message_Iter *array_of_fps;
    E_Comp_Screen *e_comp_screen = NULL;
+   E_Hwc_Window *hwc_window = NULL;
    E_Output *output = NULL;
    E_Plane *plane = NULL;
    double fps = 0.0;
    char output_name[30];
 
-   eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_LAYER_FPS")", &array_of_layer_fps);
+   eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_FPS")", &array_of_fps);
 
    e_comp_screen = e_comp->e_comp_screen;
 
@@ -4502,19 +4503,46 @@ _msg_layer_fps_append(Eldbus_Message_Iter *iter)
           {
              if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_WINDOWS)
                {
-                  if (!e_hwc_windows_fps_get(output->hwc, &fps)) continue;
+                  if (e_hwc_windows_fps_get(output->hwc, &fps))
+                    {
+                       Eldbus_Message_Iter* struct_of_fps;
 
-                  Eldbus_Message_Iter* struct_of_layer_fps;
+                       eldbus_message_iter_arguments_append(array_of_fps, "("VALUE_TYPE_FOR_FPS")", &struct_of_fps);
 
-                  eldbus_message_iter_arguments_append(array_of_layer_fps, "("VALUE_TYPE_FOR_LAYER_FPS")", &struct_of_layer_fps);
+                       eldbus_message_iter_arguments_append
+                           (struct_of_fps, VALUE_TYPE_FOR_FPS,
+                             E_INFO_FPS_TYPE_OUTPUT,
+                             output_name,
+                             -999,
+                             0,
+                             fps);
 
-                  eldbus_message_iter_arguments_append
-                      (struct_of_layer_fps, VALUE_TYPE_FOR_LAYER_FPS,
-                        output_name,
-                        -999,
-                        fps);
+                       eldbus_message_iter_container_close(array_of_fps, struct_of_fps);
+                    }
+
+                  EINA_LIST_FOREACH(output->hwc->hwc_windows, hwc_l, hwc_window)
+                    {
+                       E_Hwc_Window_State state;
+                       Eldbus_Message_Iter* struct_of_fps;
+
+                       if(!hwc_window) continue;
+
+                       state = e_hwc_window_accepted_state_get(hwc_window);
+                       if ((state == E_HWC_WINDOW_STATE_CLIENT) || (state == E_HWC_WINDOW_STATE_NONE)) continue;
+                       if (!e_hwc_window_fps_get(hwc_window, &fps)) continue;
 
-                  eldbus_message_iter_container_close(array_of_layer_fps, struct_of_layer_fps);
+                       eldbus_message_iter_arguments_append(array_of_fps, "("VALUE_TYPE_FOR_FPS")", &struct_of_fps);
+
+                       eldbus_message_iter_arguments_append
+                           (struct_of_fps, VALUE_TYPE_FOR_FPS,
+                             hwc_window->is_target ? E_INFO_FPS_TYPE_HWC_COMP : E_INFO_FPS_TYPE_HWC_WIN,
+                             output_name,
+                             hwc_window->zpos,
+                             hwc_window->is_target ? 0 : e_client_util_win_get(hwc_window->ec),
+                             fps);
+
+                       eldbus_message_iter_container_close(array_of_fps, struct_of_fps);
+                    }
                }
              else
                {
@@ -4523,17 +4551,19 @@ _msg_layer_fps_append(Eldbus_Message_Iter *iter)
                         if (!plane) continue;
                         if (!e_plane_fps_get(plane, &fps)) continue;
 
-                        Eldbus_Message_Iter* struct_of_layer_fps;
+                        Eldbus_Message_Iter* struct_of_fps;
 
-                        eldbus_message_iter_arguments_append(array_of_layer_fps, "("VALUE_TYPE_FOR_LAYER_FPS")", &struct_of_layer_fps);
+                        eldbus_message_iter_arguments_append(array_of_fps, "("VALUE_TYPE_FOR_FPS")", &struct_of_fps);
 
                         eldbus_message_iter_arguments_append
-                          (struct_of_layer_fps, VALUE_TYPE_FOR_LAYER_FPS,
+                          (struct_of_fps, VALUE_TYPE_FOR_FPS,
+                            E_INFO_FPS_TYPE_LAYER,
                             output_name,
                             plane->zpos,
+                            0,
                             plane->fps);
 
-                        eldbus_message_iter_container_close(array_of_layer_fps, struct_of_layer_fps);
+                        eldbus_message_iter_container_close(array_of_fps, struct_of_fps);
                     }
                }
           }
@@ -4543,11 +4573,11 @@ _msg_layer_fps_append(Eldbus_Message_Iter *iter)
         memset(output_name, 0x0, sizeof(char)*30);
      }
 
-   eldbus_message_iter_container_close(iter, array_of_layer_fps);
+   eldbus_message_iter_container_close(iter, array_of_fps);
 }
 
 static Eldbus_Message *
-_e_info_server_cb_layer_fps_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+_e_info_server_cb_fps_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
 {
    Eldbus_Message *reply = eldbus_message_method_return_new(msg);
 
@@ -4556,7 +4586,7 @@ _e_info_server_cb_layer_fps_info_get(const Eldbus_Service_Interface *iface EINA_
         e_comp->calc_fps = 1;
      }
 
-   _msg_layer_fps_append(eldbus_message_iter_get(reply));
+   _msg_fps_append(eldbus_message_iter_get(reply));
 
    return reply;
 }
@@ -5958,7 +5988,7 @@ static const Eldbus_Method methods[] = {
    { "hwc", ELDBUS_ARGS({"i", "hwc"}), NULL, e_info_server_cb_hwc, 0},
    { "show_plane_state", NULL, NULL, e_info_server_cb_show_plane_state, 0},
    { "show_pending_commit", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_PENDING_COMMIT")", "array of pending commit"}), e_info_server_cb_show_pending_commit, 0},
-   { "get_layer_fps_info", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_LAYER_FPS")", "array of pending commit"}), _e_info_server_cb_layer_fps_info_get, 0},
+   { "get_fps_info", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_FPS")", "array of fps"}), _e_info_server_cb_fps_info_get, 0},
    { "get_keymap", NULL, ELDBUS_ARGS({"hi", "keymap fd"}), _e_info_server_cb_keymap_info_get, 0},
    { "effect_control", ELDBUS_ARGS({"i", "effect_control"}), NULL, e_info_server_cb_effect_control, 0},
    { "get_keygrab_status", ELDBUS_ARGS({"s", "get_keygrab_status"}), NULL, _e_info_server_cb_keygrab_status_get, 0},
index 8d70b4955986202128b5e03ffdc6498316772378..e255adcccd5ba1261601ec5aec09a1b92779fbda 100644 (file)
@@ -261,4 +261,15 @@ typedef enum
    "\twinfo -hwc_wins no\n  "                                                  \
    "\twinfo -hwc_wins queue\n  "
 
+/* -------------------------------------------------------------------------- */
+/* FPS                                                                        */
+/* -------------------------------------------------------------------------- */
+typedef enum
+{
+   E_INFO_FPS_TYPE_OUTPUT,
+   E_INFO_FPS_TYPE_LAYER,
+   E_INFO_FPS_TYPE_HWC_WIN,
+   E_INFO_FPS_TYPE_HWC_COMP,
+} E_Info_Fps_Type;
+
 #endif /* end of _E_INFO_SHARED_TYPES_ */