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 44ae02837c12bb6984ab3e9f5a76bd7319d31b72..edf243dbdc5d41d623484c1090a5d0316f4b933f 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 af87314b4d172375a936bad63129755b7839191b..dfcafc0cf7165126bcaef337c09303fe2f8e5711 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 d47573f54e65f10ac799c0165188673d8cdb1f12..41d9c7c9f6b07afba34c000000fa2ab79469096c 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)