Add --print-fps to enable FPS counter on start

The FPS counter could be enabled/disabled via MOD+i.

Add a command line option to enable it on start. This is consistent with
other features like --turn-screen-off or --fullscreen.

Fixes #468 <https://github.com/Genymobile/scrcpy/issues/468>
PR #3030 <https://github.com/Genymobile/scrcpy/pull/3030>
This commit is contained in:
Romain Vimont 2022-02-17 20:08:41 +01:00
parent fa93c8a91b
commit 4b018be789
8 changed files with 33 additions and 0 deletions

View file

@ -215,6 +215,15 @@ scrcpy --max-fps 15
This is officially supported since Android 10, but may work on earlier versions. This is officially supported since Android 10, but may work on earlier versions.
The actual capture framerate may be printed to the console:
```
scrcpy --print-fps
```
It may also be enabled or disabled at any time with <kbd>MOD</kbd>+<kbd>i</kbd>.
#### Crop #### Crop
The device screen may be cropped to mirror only part of the screen. The device screen may be cropped to mirror only part of the screen.

View file

@ -211,6 +211,10 @@ Inject alpha characters and space as text events instead of key events.
This avoids issues when combining multiple keys to enter special characters, This avoids issues when combining multiple keys to enter special characters,
but breaks the expected behavior of alpha keys in games (typically WASD). but breaks the expected behavior of alpha keys in games (typically WASD).
.TP
.B "\-\-print\-fps
Start FPS counter, to print framerate logs to the console. It can be started or stopped at any time with MOD+i.
.TP .TP
.BI "\-\-push\-target " path .BI "\-\-push\-target " path
Set the target directory for pushing files to the device by drag & drop. It is passed as\-is to "adb push". Set the target directory for pushing files to the device by drag & drop. It is passed as\-is to "adb push".

View file

@ -55,6 +55,7 @@
#define OPT_NO_DOWNSIZE_ON_ERROR 1035 #define OPT_NO_DOWNSIZE_ON_ERROR 1035
#define OPT_OTG 1036 #define OPT_OTG 1036
#define OPT_NO_CLEANUP 1037 #define OPT_NO_CLEANUP 1037
#define OPT_PRINT_FPS 1038
struct sc_option { struct sc_option {
char shortopt; char shortopt;
@ -336,6 +337,12 @@ static const struct sc_option options[] = {
"special character, but breaks the expected behavior of alpha " "special character, but breaks the expected behavior of alpha "
"keys in games (typically WASD).", "keys in games (typically WASD).",
}, },
{
.longopt_id = OPT_PRINT_FPS,
.longopt = "print-fps",
.text = "Start FPS counter, to print framerate logs to the console. "
"It can be started or stopped at any time with MOD+i.",
},
{ {
.longopt_id = OPT_PUSH_TARGET, .longopt_id = OPT_PUSH_TARGET,
.longopt = "push-target", .longopt = "push-target",
@ -1547,6 +1554,9 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[],
case OPT_NO_CLEANUP: case OPT_NO_CLEANUP:
opts->cleanup = false; opts->cleanup = false;
break; break;
case OPT_PRINT_FPS:
opts->start_fps_counter = true;
break;
case OPT_OTG: case OPT_OTG:
#ifdef HAVE_USB #ifdef HAVE_USB
opts->otg = true; opts->otg = true;

View file

@ -63,4 +63,5 @@ const struct scrcpy_options scrcpy_options_default = {
.select_tcpip = false, .select_tcpip = false,
.select_usb = false, .select_usb = false,
.cleanup = true, .cleanup = true,
.start_fps_counter = false,
}; };

View file

@ -138,6 +138,7 @@ struct scrcpy_options {
bool select_usb; bool select_usb;
bool select_tcpip; bool select_tcpip;
bool cleanup; bool cleanup;
bool start_fps_counter;
}; };
extern const struct scrcpy_options scrcpy_options_default; extern const struct scrcpy_options scrcpy_options_default;

View file

@ -588,6 +588,7 @@ aoa_hid_end:
.rotation = options->rotation, .rotation = options->rotation,
.mipmaps = options->mipmaps, .mipmaps = options->mipmaps,
.fullscreen = options->fullscreen, .fullscreen = options->fullscreen,
.start_fps_counter = options->start_fps_counter,
.buffering_time = options->display_buffer, .buffering_time = options->display_buffer,
}; };

View file

@ -386,6 +386,7 @@ sc_screen_init(struct sc_screen *screen,
screen->req.width = params->window_width; screen->req.width = params->window_width;
screen->req.height = params->window_height; screen->req.height = params->window_height;
screen->req.fullscreen = params->fullscreen; screen->req.fullscreen = params->fullscreen;
screen->req.start_fps_counter = params->start_fps_counter;
static const struct sc_video_buffer_callbacks cbs = { static const struct sc_video_buffer_callbacks cbs = {
.on_new_frame = sc_video_buffer_on_new_frame, .on_new_frame = sc_video_buffer_on_new_frame,
@ -562,6 +563,10 @@ sc_screen_show_initial_window(struct sc_screen *screen) {
sc_screen_switch_fullscreen(screen); sc_screen_switch_fullscreen(screen);
} }
if (screen->req.start_fps_counter) {
sc_fps_counter_start(&screen->fps_counter);
}
SDL_ShowWindow(screen->window); SDL_ShowWindow(screen->window);
} }

View file

@ -35,6 +35,7 @@ struct sc_screen {
uint16_t width; uint16_t width;
uint16_t height; uint16_t height;
bool fullscreen; bool fullscreen;
bool start_fps_counter;
} req; } req;
SDL_Window *window; SDL_Window *window;
@ -93,6 +94,7 @@ struct sc_screen_params {
bool mipmaps; bool mipmaps;
bool fullscreen; bool fullscreen;
bool start_fps_counter;
sc_tick buffering_time; sc_tick buffering_time;
}; };