EAPI void eina_sched_prio_drop(void) { #ifdef EFL_HAVE_POSIX_THREADS struct sched_param param; int pol, prio, ret; pthread_t pthread_id; pthread_id = pthread_self(); ret = pthread_getschedparam(pthread_id, &pol, ¶m); if (ret) { EINA_LOG_ERR("Unable to query sched parameters"); return; } if (EINA_UNLIKELY(pol == SCHED_RR || pol == SCHED_FIFO)) { param.sched_priority -= RTNICENESS; /* We don't change the policy */ if (param.sched_priority < 1) { EINA_LOG_INFO("RT prio < 1, setting to 1 instead"); param.sched_priority = 1; } pthread_setschedparam(pthread_id, pol, ¶m); } # ifdef __linux__ else { errno = 0; prio = getpriority(PRIO_PROCESS, 0); if (errno == 0) { prio += NICENESS; if (prio > 19) { EINA_LOG_INFO("Max niceness reached; keeping max (19)"); prio = 19; } setpriority(PRIO_PROCESS, 0, prio); } } # endif #elif defined EFL_HAVE_WIN32_THREADS if (!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL)) EINA_LOG_ERR("Can not set thread priority"); #else EINA_LOG_ERR("Eina does not have support for threads enabled" "or it doesn't support setting scheduler priorities"); #endif }
EAPI void eina_sched_prio_drop(void) { struct sched_param param; int pol, ret; pthread_t pthread_id; pthread_id = pthread_self(); ret = pthread_getschedparam(pthread_id, &pol, ¶m); if (ret) { EINA_LOG_ERR("Unable to query sched parameters"); return; } if (EINA_UNLIKELY(pol == SCHED_RR || pol == SCHED_FIFO)) { param.sched_priority -= RTNICENESS; /* We don't change the policy */ if (param.sched_priority < 1) { EINA_LOG_INFO("RT prio < 1, setting to 1 instead"); param.sched_priority = 1; } pthread_setschedparam(pthread_id, pol, ¶m); } # ifdef __linux__ else { int prio; errno = 0; prio = getpriority(PRIO_PROCESS, 0); if (errno == 0) { prio += NICENESS; if (prio > 19) { EINA_LOG_INFO("Max niceness reached; keeping max (19)"); prio = 19; } setpriority(PRIO_PROCESS, 0, prio); } } # endif }