+_tdm_monitor_server_choose_commit_per_vblank_mode(unsigned int pid, char *cwd, int argc, char *argv[], char *reply, int *len, tdm_display *dpy)
+{
+ int output_idx;
+ int mode;
+ char *arg;
+ char *end;
+ tdm_error err;
+
+ /* TODO: do we have to provide an ability to choose commit_per_vblank mode outside? */
+
+ if (argc < 4) {
+ _tdm_monitor_server_usage(argv[0], reply, len);
+ return;
+ }
+
+ arg = argv[2];
+ output_idx = strtol(arg, &end, 10);
+
+ arg = argv[3];
+ mode = strtol(arg, &end, 10);
+
+ err = tdm_output_choose_commit_per_vblank_mode(tdm_display_get_output(dpy, output_idx, NULL), mode);
+ if (err != TDM_ERROR_NONE) {
+ TDM_SNPRINTF(reply, len, "an error: output_idx or mode is wrong\n");
+ return;
+ }
+
+ TDM_SNPRINTF(reply, len, "the mode's been set\n");
+}
+
+static void
+_tdm_monitor_server_fps(unsigned int pid, char *cwd, int argc, char *argv[], char *reply, int *len, tdm_display *dpy)
+{
+ int enable;
+ char *arg;
+ char *end;
+
+ if (argc < 3) {
+ _tdm_monitor_server_usage(argv[0], reply, len);
+ return;
+ }
+
+ arg = argv[2];
+ enable = strtol(arg, &end, 10);
+
+ tdm_display_enable_fps(dpy, enable);
+
+ TDM_SNPRINTF(reply, len, "%s to print fps\n", (enable) ? "enable" : "disable");
+}
+
+static void
+_tdm_monitor_server_vblank_list(unsigned int pid, char *cwd, int argc, char *argv[],
+ char *reply, int *len, tdm_display *dpy)
+{
+ tdm_vblank_get_vblank_list_information(dpy, reply, len);
+}
+
+static void
+_tdm_monitor_server_vblank_fps(unsigned int pid, char *cwd, int argc, char *argv[],
+ char *reply, int *len, tdm_display *dpy)
+{
+ unsigned int target_pid, fps;
+ char *arg;
+ char *end;
+ char name[TDM_NAME_LEN];
+ tdm_error ret;
+
+ if (argc < 3) {
+ _tdm_monitor_server_usage(argv[0], reply, len);
+ return;
+ }
+
+ arg = argv[2];
+ target_pid = strtol(arg, &end, 10);
+
+ if (*end == ',') {
+ arg = end + 1;
+ end = strtostr(name, TDM_NAME_LEN, arg, TDM_DELIM);
+ } else {
+ strncpy(name, TDM_VBLANK_DEFAULT_NAME, TDM_NAME_LEN - 1);
+ name[TDM_NAME_LEN - 1] = '\0';
+ }
+
+ if (*end != '@') {
+ TDM_SNPRINTF(reply, len, "failed: no fps value\n");
+ return;
+ }
+
+ arg = end + 1;
+ fps = strtol(arg, &end, 10);
+
+ ret = tdm_vblank_set_client_vblank_fps(target_pid, name, fps);
+ if (ret != TDM_ERROR_NONE) {
+ TDM_SNPRINTF(reply, len, "can't set '%u' fps to '%s' client vblank(PID:%u)\n", fps, name, target_pid);
+ return;
+ }
+
+ TDM_SNPRINTF(reply, len, "success: '%u' fps for '%s' client vblank(PID:%u)\n", fps, name, target_pid);
+}
+
+static void
+_tdm_monitor_server_global_fps(unsigned int pid, char *cwd, int argc, char *argv[],
+ char *reply, int *len, tdm_display *dpy)
+{
+ unsigned int fps;
+ char *arg;
+ char *end;
+ tdm_error ret;
+
+ if (argc < 3) {
+ _tdm_monitor_server_usage(argv[0], reply, len);
+ return;
+ }
+
+ arg = argv[2];
+ fps = strtol(arg, &end, 10);
+
+ if (fps > 0)
+ ret = tdm_vblank_enable_global_fps(1, fps);
+ else
+ ret = tdm_vblank_enable_global_fps(0, 0);
+
+ if (ret != TDM_ERROR_NONE) {
+ TDM_SNPRINTF(reply, len, "can't set '%u' fps to global fps\n", fps);
+ return;
+ }
+
+ TDM_SNPRINTF(reply, len, "success: '%u' global fps\n", fps);
+}
+
+static void