/* pending_commit */
Eina_List *pending_commit_list;
+
+ /* layer fps */
+ Eina_List *layer_fps_list;
} E_Info_Client;
typedef struct _E_Win_Info
unsigned int tsurface;
} E_Pending_Commit_Info;
+typedef struct _E_Layer_Fps_Info
+{
+ const char *output;
+ int zpos;
+ double fps;
+} E_Layer_Fps_Info;
+
#define VALUE_TYPE_FOR_TOPVWINS "uuisiiiiibbiibbbiius"
#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_REQUEST_FOR_KILL "uts"
#define VALUE_TYPE_REPLY_KILL "s"
#define VALUE_TYPE_REQUEST_FOR_WININFO "t"
}
-static void
-_cb_fps_info_get(const Eldbus_Message *msg)
-{
- const char *name = NULL, *text = NULL;
- Eina_Bool res;
- const char *fps;
-
- res = eldbus_message_error_get(msg, &name, &text);
- EINA_SAFETY_ON_TRUE_GOTO(res, finish);
-
- res = eldbus_message_arguments_get(msg, "s", &fps);
- EINA_SAFETY_ON_FALSE_GOTO(res, finish);
- if (strcmp(fps, "no_update"))
- printf("%s\n", fps);
-
-finish:
- if ((name) || (text ))
- {
- printf("errname:%s errmsg:%s\n", name, text);
- }
-}
-
-static void
-_e_info_client_proc_fps_info(int argc, char **argv)
-{
- do
- {
- if (!_e_info_client_eldbus_message("get_fps_info", _cb_fps_info_get))
- return;
- usleep(500000);
- }
- while (1);
-}
-
static Eina_Bool
_opt_parse(char *opt, char *delims, int *vals, int n_vals)
{
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)
+{
+ E_Layer_Fps_Info *layer_fps = NULL;
+
+ layer_fps = E_NEW(E_Layer_Fps_Info, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(layer_fps, NULL);
+
+ layer_fps->output = output;
+ layer_fps->zpos = zpos;
+ layer_fps->fps = fps;
+
+ return layer_fps;
+}
+
+static void
+_e_layer_fps_info_free(E_Layer_Fps_Info *layer_fps)
+{
+ E_FREE(layer_fps);
+}
+
+static void
+_cb_layer_fps_info_get(const Eldbus_Message *msg)
+{
+ const char *name = NULL, *text = NULL;
+ Eldbus_Message_Iter *array, *eldbus_msg;
+ Eina_Bool res;
+
+ 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);
+ 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;
+ const char *output;
+ int zpos;
+ double fps;
+ res = eldbus_message_iter_arguments_get(eldbus_msg,
+ VALUE_TYPE_FOR_LAYER_FPS,
+ &output,
+ &zpos,
+ &fps);
+ if (!res)
+ {
+ printf("Failed to get player_fps info\n");
+ continue;
+ }
+
+ layer_fps = _e_player_fps_info_new(output, zpos, fps);
+ if (!layer_fps) continue;
+
+ e_info_client.layer_fps_list = eina_list_append(e_info_client.layer_fps_list, layer_fps);
+ }
+
+finish:
+ if ((name) || (text))
+ {
+ printf("errname:%s errmsg:%s\n", name, text);
+ }
+}
+
+static void
+_e_info_client_proc_fps_layer_info(int argc, char **argv)
+{
+ do
+ {
+ Eina_List *l;
+ E_Layer_Fps_Info *layer_fps;
+
+ if (!_e_info_client_eldbus_message("get_layer_fps_info", _cb_layer_fps_info_get))
+ return;
+
+ if (!e_info_client.layer_fps_list)
+ goto fps_layer_done;
+
+ EINA_LIST_FOREACH(e_info_client.layer_fps_list, l, layer_fps)
+ {
+ printf("%3s-ZPos@%d...%3.1f\n",
+ layer_fps->output,
+ layer_fps->zpos,
+ layer_fps->fps);
+ }
+
+ E_FREE_LIST(e_info_client.layer_fps_list, _e_layer_fps_info_free);
+fps_layer_done:
+ usleep(500000);
+ }
+ while (1);
+}
+#else
+static void
+_cb_fps_info_get(const Eldbus_Message *msg)
+{
+ const char *name = NULL, *text = NULL;
+ Eina_Bool res;
+ const char *fps;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ res = eldbus_message_arguments_get(msg, "s", &fps);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+ if (strcmp(fps, "no_update"))
+ printf("%s\n", fps);
+
+finish:
+ if ((name) || (text ))
+ {
+ printf("errname:%s errmsg:%s\n", name, text);
+ }
+}
+
+static void
+_e_info_client_proc_fps_info(int argc, char **argv)
+{
+ do
+ {
+ if (!_e_info_client_eldbus_message("get_fps_info", _cb_fps_info_get))
+ return;
+ usleep(500000);
+ }
+ while (1);
+}
#endif
static void
_e_info_client_proc_input_device_info
},
{
- "fps", NULL,
- "Print FPS in every sec",
- _e_info_client_proc_fps_info
- },
- {
"punch", "[on/off] [<X>x<H>+<X>+<Y>] [<a>,<r>,<g>,<b>]",
"HWC should be disabled first with \"-hwc\" option. Punch a UI framebuffer [on/off].",
_e_info_client_proc_punch
"show state of pending commit",
_e_info_client_proc_show_pending_commit
},
+ {
+ "fps", NULL,
+ "Print FPS in every sec per layer",
+ _e_info_client_proc_fps_layer_info
+ },
+#else
+ {
+ "fps", NULL,
+ "Print FPS in every sec",
+ _e_info_client_proc_fps_info
+ },
#endif
{
"keymap", 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_REQUEST_FOR_KILL "uts"
#define VALUE_TYPE_REPLY_KILL "s"
#define VALUE_TYPE_REQUEST_FOR_WININFO "t"
}
static Eldbus_Message *
-_e_info_server_cb_fps_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
-{
- static double old_fps = 0;
-
- Eldbus_Message *reply = eldbus_message_method_return_new(msg);
- char buf[128] = {};
-
- if (!e_comp->calc_fps)
- {
- e_comp->calc_fps = 1;
- }
-
- if (old_fps == e_comp->fps)
- {
- snprintf(buf, sizeof(buf), "no_update");
- }
- else if (e_comp->fps > 0.0)
- {
- snprintf(buf, sizeof(buf), "... FPS %3.1f", e_comp->fps);
- old_fps = e_comp->fps;
- }
- else
- {
- snprintf(buf, sizeof(buf), "... FPS N/A");
- }
-
- eldbus_message_arguments_append(reply, "s", buf);
- return reply;
-}
-
-static Eldbus_Message *
_e_info_server_cb_punch(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
{
Eldbus_Message *reply = eldbus_message_method_return_new(msg);
return reply;
}
+
+static void
+_msg_layer_fps_append(Eldbus_Message_Iter *iter)
+{
+ Eina_List *output_l, *plane_l;
+ Eldbus_Message_Iter *array_of_layer_fps;
+ E_Comp_Screen *e_comp_screen = NULL;
+ E_Output *output = NULL;
+ E_Plane *plane = NULL;
+ double fps = 0.0;
+ char output_name[30];
+ int size = 0;
+
+ eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_LAYER_FPS")", &array_of_layer_fps);
+
+ e_comp_screen = e_comp->e_comp_screen;
+
+ EINA_LIST_FOREACH(e_comp_screen->outputs, output_l, output)
+ {
+ if (!output) continue;
+
+ strncpy(output_name, output->id, sizeof(char)*30);
+
+ EINA_LIST_FOREACH(output->planes, plane_l, plane)
+ {
+ if (!plane) continue;
+ if (!e_plane_fps_get(plane, &fps)) continue;
+
+ Eldbus_Message_Iter* struct_of_layer_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_layer_fps, VALUE_TYPE_FOR_LAYER_FPS,
+ output_name,
+ plane->zpos,
+ plane->fps);
+
+ eldbus_message_iter_container_close(array_of_layer_fps, struct_of_layer_fps);
+ }
+ memset(output_name, 0x0, sizeof(char)*30);
+ }
+
+ eldbus_message_iter_container_close(iter, array_of_layer_fps);
+}
+
+static Eldbus_Message *
+_e_info_server_cb_layer_fps_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+ Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+
+ if (!e_comp->calc_fps)
+ {
+ e_comp->calc_fps = 1;
+ }
+
+ _msg_layer_fps_append(eldbus_message_iter_get(reply));
+
+ return reply;
+}
+#else
+static Eldbus_Message *
+_e_info_server_cb_fps_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+ static double old_fps = 0;
+
+ Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+ char buf[128] = {};
+
+ if (!e_comp->calc_fps)
+ {
+ e_comp->calc_fps = 1;
+ }
+
+ if (old_fps == e_comp->fps)
+ {
+ snprintf(buf, sizeof(buf), "no_update");
+ }
+ else if (e_comp->fps > 0.0)
+ {
+ snprintf(buf, sizeof(buf), "... FPS %3.1f", e_comp->fps);
+ old_fps = e_comp->fps;
+ }
+ else
+ {
+ snprintf(buf, sizeof(buf), "... FPS N/A");
+ }
+
+ eldbus_message_arguments_append(reply, "s", buf);
+ return reply;
+}
#endif
static Eldbus_Message *
{ "get_input_devices", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_INPUTDEV")", "array of input"}), _e_info_server_cb_input_device_info_get, 0},
{ "protocol_trace", ELDBUS_ARGS({"s", "protocol_trace"}), NULL, _e_info_server_cb_protocol_trace, 0},
{ "protocol_rule", ELDBUS_ARGS({"sss", "protocol_rule"}), ELDBUS_ARGS({"s", "rule request"}), _e_info_server_cb_protocol_rule, 0},
- { "get_fps_info", NULL, ELDBUS_ARGS({"s", "fps request"}), _e_info_server_cb_fps_info_get, 0},
{ "punch", ELDBUS_ARGS({"iiiiiiiii", "punch_geometry"}), NULL, _e_info_server_cb_punch, 0},
{ "transform_message", ELDBUS_ARGS({"siiiiiiii", "transform_message"}), NULL, e_info_server_cb_transform_message, 0},
{ "dump_buffers", ELDBUS_ARGS({"iisd", "start"}), NULL, _e_info_server_cb_buffer_dump, 0 },
{ "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},
+#else
+ { "get_fps_info", NULL, ELDBUS_ARGS({"s", "fps request"}), _e_info_server_cb_fps_info_get, 0},
#endif
{ "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},