diff --git a/.github/workflows/clang-tidy-post.yml b/.github/workflows/clang-tidy-post.yml new file mode 100644 index 000000000000..f698f103ce4b --- /dev/null +++ b/.github/workflows/clang-tidy-post.yml @@ -0,0 +1,22 @@ +name: Post clang-tidy review comments + +on: + workflow_run: + workflows: ["clang-tidy-review"] + types: + - completed + +permissions: + pull-requests: write + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: ZedThree/clang-tidy-review/post@v0.19.0 + # lgtm_comment_body, max_comments, and annotations need to be set on the posting workflow in a split setup + with: + lgtm_comment_body: '' + annotations: true + max_comments: 10 diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index 95189e510f27..73c961751c22 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -3,9 +3,6 @@ on: pull_request: branches: [ master, stable* ] -permissions: - pull-requests: write - jobs: build: runs-on: ubuntu-latest @@ -13,17 +10,18 @@ jobs: steps: - uses: actions/checkout@v4 # Run clang-tidy - - uses: ZedThree/clang-tidy-review@v0.17.1 + - uses: ZedThree/clang-tidy-review@v0.19.0 id: review with: + split_workflow: true clang_tidy_checks: '' # List of packages to install - apt_packages: libkrb5-dev,libxkbcommon-dev,libxkbfile-dev,libx11-dev,libwayland-dev,libxrandr-dev,libxi-dev,libxrender-dev,libxext-dev,libxinerama-dev,libxfixes-dev,libxcursor-dev,libxv-dev,libxdamage-dev,libxtst-dev,libcups2-dev,libcairo2-dev,libpcsclite-dev,libasound2-dev,libswscale-dev,libpulse-dev,libavcodec-dev,libavutil-dev,libfuse3-dev,libswresample-dev,libusb-1.0-0-dev,libudev-dev,libdbus-glib-1-dev,libpam0g-dev,uuid-dev,libxml2-dev,libcjson-dev,libsdl2-2.0-0,libsdl2-dev,libsdl2-ttf-dev,libsdl2-image-dev,libsystemd-dev,libwebkit2gtk-4.0-dev,liburiparser-dev,libopus-dev,libwebp-dev,libjpeg-dev,libpng-dev,xsltproc,docbook-xsl,libgsm1-dev,libfaac-dev,libfaad-dev,libsoxr-dev,opencl-c-headers,opencl-headers,ocl-icd-opencl-dev,libssl-dev + apt_packages: libkrb5-dev,libxkbcommon-dev,libxkbfile-dev,libx11-dev,libwayland-dev,libxrandr-dev,libxi-dev,libxrender-dev,libxext-dev,libxinerama-dev,libxfixes-dev,libxcursor-dev,libxv-dev,libxdamage-dev,libxtst-dev,libcups2-dev,libcairo2-dev,libpcsclite-dev,libasound2-dev,libswscale-dev,libpulse-dev,libavcodec-dev,libavutil-dev,libfuse3-dev,libswresample-dev,libusb-1.0-0-dev,libudev-dev,libdbus-glib-1-dev,libpam0g-dev,uuid-dev,libxml2-dev,libcjson-dev,libsdl2-2.0-0,libsdl2-dev,libsdl2-ttf-dev,libsdl2-image-dev,libsystemd-dev,liburiparser-dev,libopus-dev,libwebp-dev,libjpeg-dev,libpng-dev,xsltproc,docbook-xsl,libgsm1-dev,libfaac-dev,libfaad-dev,libsoxr-dev,opencl-c-headers,opencl-headers,ocl-icd-opencl-dev,libssl-dev # CMake command to run in order to generate compile_commands.json build_dir: tidy - cmake_command: cmake -Btidy -S. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_DEBUG_ALL=ON -DWITH_INTERNAL_MD4=ON -DWITH_INTERNAL_MD5=ON -DWITH_INTERNAL_RC4=ON -DBUILD_TESTING=ON -DWINPR_UTILS_IMAGE_JPEG=ON -DWINPR_UTILS_IMAGE_PNG=ON -DWINPR_UTILS_IMAGE_WEBP=ON -DWITH_BINARY_VERSIONING=ON -DWITH_CAIRO=ON -DWITH_DSP_EXPERIMENTAL=ON -DWITH_FAAC=ON -DWITH_FAAD2=ON -DWITH_FREERDP_DEPRECATED=ON -DWITH_FREERDP_DEPRECATED_COMMANDLINE=ON -DWITH_GSM=ON -DWITH_OPUS=ON -DWITH_PROXY_EMULATE_SMARTCARD=ON -DWITH_PULSE=ON -DWITH_SMARTCARD_INSPECT=ON -DWITH_SOXR=ON -DWITH_UNICODE_BUILTIN=ON -DWITH_VAAPI=ON -DWITH_WINPR_DEPRECATED=ON -DWITH_SDL_IMAGE_DIALOGS=ON -DWITH_PROFILER=ON -DWITH_OPENCL=ON -DCHANNEL_TSMF=ON + cmake_command: cmake -Btidy -S. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_DEBUG_ALL=ON -DWITH_INTERNAL_MD4=ON -DWITH_INTERNAL_MD5=ON -DWITH_INTERNAL_RC4=ON -DBUILD_TESTING=ON -DWINPR_UTILS_IMAGE_JPEG=ON -DWINPR_UTILS_IMAGE_PNG=ON -DWINPR_UTILS_IMAGE_WEBP=ON -DWITH_BINARY_VERSIONING=ON -DWITH_CAIRO=ON -DWITH_DSP_EXPERIMENTAL=ON -DWITH_FAAC=ON -DWITH_FAAD2=ON -DWITH_FREERDP_DEPRECATED=ON -DWITH_FREERDP_DEPRECATED_COMMANDLINE=ON -DWITH_GSM=ON -DWITH_OPUS=ON -DWITH_PROXY_EMULATE_SMARTCARD=ON -DWITH_PULSE=ON -DWITH_SMARTCARD_INSPECT=ON -DWITH_SOXR=ON -DWITH_UNICODE_BUILTIN=ON -DWITH_VAAPI=ON -DWITH_WINPR_DEPRECATED=ON -DWITH_SDL_IMAGE_DIALOGS=ON -DWITH_PROFILER=ON -DWITH_OPENCL=ON -DCHANNEL_TSMF=ON -DWITH_WEBVIEW=OFF # Uploads an artefact containing clang_fixes.json - - uses: ZedThree/clang-tidy-review/upload@v0.17.1 + - uses: ZedThree/clang-tidy-review/upload@v0.19.0 id: upload-review diff --git a/channels/rdpgfx/client/rdpgfx_main.c b/channels/rdpgfx/client/rdpgfx_main.c index f61593fd6e00..a63a6fe38448 100644 --- a/channels/rdpgfx/client/rdpgfx_main.c +++ b/channels/rdpgfx/client/rdpgfx_main.c @@ -2341,6 +2341,8 @@ static UINT init_plugin_cb(GENERIC_DYNVC_PLUGIN* base, rdpContext* rcontext, rdp return CHANNEL_RC_NO_MEMORY; } + gfx->suspendFrameAcks = + freerdp_settings_get_bool(gfx->rdpcontext->settings, FreeRDP_GfxSuspendFrameAck); gfx->MaxCacheSlots = freerdp_settings_get_bool(gfx->rdpcontext->settings, FreeRDP_GfxSmallCache) ? 4096 : 25600; diff --git a/client/common/cmdline.c b/client/common/cmdline.c index 5b8fd5b2aae6..4f135f879855 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -2245,6 +2245,15 @@ static int parse_gfx_options(rdpSettings* settings, const COMMAND_LINE_ARGUMENT_ rc = COMMAND_LINE_ERROR; } } + else if (option_starts_with("frame-ack", val)) + { + const PARSE_ON_OFF_RESULT bval = parse_on_off_option(val); + if (bval == PARSE_FAIL) + rc = COMMAND_LINE_ERROR_UNEXPECTED_VALUE; + else if (!freerdp_settings_set_bool(settings, FreeRDP_GfxSuspendFrameAck, + bval != PARSE_OFF)) + rc = COMMAND_LINE_ERROR; + } } if ((rc == CHANNEL_RC_OK) && codecSelected) diff --git a/client/common/cmdline.h b/client/common/cmdline.h index 7bfb33726a6a..ad46ee7219f3 100644 --- a/client/common/cmdline.h +++ b/client/common/cmdline.h @@ -202,7 +202,7 @@ static const COMMAND_LINE_ARGUMENT_A global_cmd_args[] = { { "gfx", COMMAND_LINE_VALUE_OPTIONAL, "[[progressive[:on|off]|RFX[:on|off]|AVC420[:on|off]AVC444[:on|off]],mask:,small-" "cache[:on|off],thin-client[:on|off],progressive[:on|" - "off]]", + "off],frame-ack[:on|off]]", NULL, NULL, -1, NULL, "RDP8 graphics pipeline" }, #if defined(WITH_FREERDP_DEPRECATED_COMMANDLINE) { "gfx-h264", COMMAND_LINE_VALUE_OPTIONAL, "[[AVC420|AVC444],mask:]", NULL, NULL, -1, diff --git a/include/freerdp/settings_types_private.h b/include/freerdp/settings_types_private.h index f13f8c1a2ade..2c95a663973c 100644 --- a/include/freerdp/settings_types_private.h +++ b/include/freerdp/settings_types_private.h @@ -691,7 +691,8 @@ struct rdp_settings SETTINGS_DEPRECATED(ALIGN64 BOOL GfxAVC444v2); /* 3847 */ SETTINGS_DEPRECATED(ALIGN64 UINT32 GfxCapsFilter); /* 3848 */ SETTINGS_DEPRECATED(ALIGN64 BOOL GfxPlanar); /* 3849 */ - UINT64 padding3904[3904 - 3850]; /* 3850 */ + SETTINGS_DEPRECATED(ALIGN64 BOOL GfxSuspendFrameAck); /* 3850 */ + UINT64 padding3904[3904 - 3851]; /* 3851 */ /** * Caches diff --git a/libfreerdp/common/settings_getters.c b/libfreerdp/common/settings_getters.c index 9a179554d83c..352a285e763f 100644 --- a/libfreerdp/common/settings_getters.c +++ b/libfreerdp/common/settings_getters.c @@ -291,6 +291,9 @@ BOOL freerdp_settings_get_bool(const rdpSettings* settings, FreeRDP_Settings_Key case FreeRDP_GfxSmallCache: return settings->GfxSmallCache; + case FreeRDP_GfxSuspendFrameAck: + return settings->GfxSuspendFrameAck; + case FreeRDP_GfxThinClient: return settings->GfxThinClient; @@ -969,6 +972,10 @@ BOOL freerdp_settings_set_bool(rdpSettings* settings, FreeRDP_Settings_Keys_Bool settings->GfxSmallCache = cnv.c; break; + case FreeRDP_GfxSuspendFrameAck: + settings->GfxSuspendFrameAck = cnv.c; + break; + case FreeRDP_GfxThinClient: settings->GfxThinClient = cnv.c; break; diff --git a/libfreerdp/common/settings_str.h b/libfreerdp/common/settings_str.h index 0abfc33f5b36..75e24718cd45 100644 --- a/libfreerdp/common/settings_str.h +++ b/libfreerdp/common/settings_str.h @@ -130,6 +130,7 @@ static const struct settings_str_entry settings_map[] = { { FreeRDP_GfxProgressiveV2, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GfxProgressiveV2" }, { FreeRDP_GfxSendQoeAck, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GfxSendQoeAck" }, { FreeRDP_GfxSmallCache, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GfxSmallCache" }, + { FreeRDP_GfxSuspendFrameAck, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GfxSuspendFrameAck" }, { FreeRDP_GfxThinClient, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GfxThinClient" }, { FreeRDP_GrabKeyboard, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GrabKeyboard" }, { FreeRDP_GrabMouse, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_GrabMouse" }, diff --git a/libfreerdp/core/test/settings_property_lists.h b/libfreerdp/core/test/settings_property_lists.h index 1d78545b27a1..b6095c2b51e8 100644 --- a/libfreerdp/core/test/settings_property_lists.h +++ b/libfreerdp/core/test/settings_property_lists.h @@ -81,6 +81,7 @@ static const size_t bool_list_indices[] = { FreeRDP_GfxProgressiveV2, FreeRDP_GfxSendQoeAck, FreeRDP_GfxSmallCache, + FreeRDP_GfxSuspendFrameAck, FreeRDP_GfxThinClient, FreeRDP_GrabKeyboard, FreeRDP_GrabMouse,