From 13155fd30be100021eaa32195a08f0d302886ba0 Mon Sep 17 00:00:00 2001 From: jiangwenyu1 Date: Mon, 16 Oct 2023 17:19:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E7=BD=AEvsync=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E4=BC=98=E5=85=88=E7=BA=A7=E4=B8=BAmax?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/composer/vsync/ft_build/BUILD.gn | 3 ++- .../composer/vsync/src/vsync_distributor.cpp | 18 ++++++++++++++++++ .../composer/vsync/src/vsync_generator.cpp | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/display_server/rosen/modules/composer/vsync/ft_build/BUILD.gn b/display_server/rosen/modules/composer/vsync/ft_build/BUILD.gn index 44ae028..edf243d 100644 --- a/display_server/rosen/modules/composer/vsync/ft_build/BUILD.gn +++ b/display_server/rosen/modules/composer/vsync/ft_build/BUILD.gn @@ -27,7 +27,8 @@ config("vsync_config") { "-Wall", "-Werror", "-g3", - "-Wno-c++11-narrowing" + "-Wno-c++11-narrowing", + "-DFT_BUILD" ] } diff --git a/display_server/rosen/modules/composer/vsync/src/vsync_distributor.cpp b/display_server/rosen/modules/composer/vsync/src/vsync_distributor.cpp index af87314..dfcafc0 100644 --- a/display_server/rosen/modules/composer/vsync/src/vsync_distributor.cpp +++ b/display_server/rosen/modules/composer/vsync/src/vsync_distributor.cpp @@ -28,8 +28,10 @@ namespace { constexpr int32_t SOFT_VSYNC_PERIOD = 16; constexpr int32_t ERRNO_EAGAIN = -1; constexpr int32_t ERRNO_OTHER = -2; +#ifndef FT_BUILD constexpr int32_t THREAD_PRIORTY = -6; constexpr int32_t SCHED_PRIORITY = 2; +#endif constexpr uint32_t SOCKET_CHANNEL_SIZE = 1024; } VSyncConnection::VSyncConnection(const sptr& distributor, std::string name) @@ -145,10 +147,23 @@ VsyncError VSyncDistributor::RemoveConnection(const sptr& conne void VSyncDistributor::ThreadMain() { // set thread priorty +#ifdef FT_BUILD + pthread_attr_t thread_attr; + struct sched_param thread_param; + pthread_attr_init(&thread_attr); + if (pthread_attr_setschedpolicy(&thread_attr, SCHED_FIFO) == 0) { + thread_param.sched_priority = sched_get_priority_max(SCHED_FIFO); + if (pthread_attr_setschedparam(&thread_attr, &thread_param) == 0) { + VLOGI("set thread priorty: SCHED_FIFO/%{public}d", thread_param.sched_priority); + } + } +#else setpriority(PRIO_PROCESS, 0, THREAD_PRIORTY); struct sched_param param = {0}; param.sched_priority = SCHED_PRIORITY; sched_setscheduler(0, SCHED_FIFO, ¶m); +#endif + int64_t timestamp; int64_t vsyncCount; @@ -207,6 +222,9 @@ void VSyncDistributor::ThreadMain() } } } +#ifdef FT_BUILD + pthread_attr_destroy(&thread_attr); +#endif } void VSyncDistributor::EnableVSync() diff --git a/display_server/rosen/modules/composer/vsync/src/vsync_generator.cpp b/display_server/rosen/modules/composer/vsync/src/vsync_generator.cpp index d47573f..41d9c7c 100644 --- a/display_server/rosen/modules/composer/vsync/src/vsync_generator.cpp +++ b/display_server/rosen/modules/composer/vsync/src/vsync_generator.cpp @@ -14,6 +14,7 @@ */ #include "vsync_generator.h" +#include "vsync_log.h" #include #include #include @@ -30,8 +31,10 @@ static int64_t GetSysTimeNs() } // 1.5ms constexpr int64_t maxWaleupDelay = 1500000; +#ifndef FT_BUILD constexpr int32_t THREAD_PRIORTY = -6; constexpr int32_t SCHED_PRIORITY = 2; +#endif constexpr int64_t errorThreshold = 500000; } @@ -75,10 +78,22 @@ VSyncGenerator::~VSyncGenerator() void VSyncGenerator::ThreadLoop() { // set thread priorty +#ifdef FT_BUILD + pthread_attr_t thread_attr; + struct sched_param thread_param; + pthread_attr_init(&thread_attr); + if (pthread_attr_setschedpolicy(&thread_attr, SCHED_FIFO) == 0) { + thread_param.sched_priority = sched_get_priority_max(SCHED_FIFO); + if (pthread_attr_setschedparam(&thread_attr, &thread_param) == 0) { + VLOGI("set thread priorty: SCHED_FIFO/%{public}d", thread_param.sched_priority); + } + } +#else setpriority(PRIO_PROCESS, 0, THREAD_PRIORTY); struct sched_param param = {0}; param.sched_priority = SCHED_PRIORITY; sched_setscheduler(0, SCHED_FIFO, ¶m); +#endif int64_t occurTimestamp = 0; int64_t nextTimeStamp = 0; @@ -128,6 +143,9 @@ void VSyncGenerator::ThreadLoop() listeners[i].callback_->OnVSyncEvent(listeners[i].lastTime_); } } +#ifdef FT_BUILD + pthread_attr_destroy(&thread_attr); +#endif } int64_t VSyncGenerator::ComputeNextVSyncTimeStamp(int64_t now) -- Gitee