Commit c73cac4e authored by Christophe Massiot's avatar Christophe Massiot

* src/misc/threads.c: made vlc_set_thread_priority usable on non-Darwin

  OSes, and added an rt-offset configuration variable to tune the priority
  of VLC against other programs without recompiling everything.
parent decac965
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* libvlc.h: main libvlc header * libvlc.h: main libvlc header
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2002 VideoLAN * Copyright (C) 1998-2002 VideoLAN
* $Id: libvlc.h,v 1.133 2004/02/11 19:17:13 fenrir Exp $ * $Id: libvlc.h,v 1.134 2004/02/20 17:20:01 massiot Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -523,6 +523,12 @@ static char *ppsz_align_descriptions[] = { N_("Center"), ...@@ -523,6 +523,12 @@ static char *ppsz_align_descriptions[] = { N_("Center"),
"slow. You should only activate this if you know what you're " \ "slow. You should only activate this if you know what you're " \
"doing.") "doing.")
#define RT_OFFSET_TEXT N_("Adjust VLC priority")
#define RT_OFFSET_LONGTEXT N_( \
"This options adds an offset (positive or negative) to VLC default " \
"priorities. You can use it to tune VLC priority against other " \
"programs, or against other VLC instances.")
#define MINIMIZE_THREADS_TXT N_("Minimize number of threads") #define MINIMIZE_THREADS_TXT N_("Minimize number of threads")
#define MINIMIZE_THREADS_LONGTXT N_( \ #define MINIMIZE_THREADS_LONGTXT N_( \
"This option minimizes the number of threads needed to run VLC") "This option minimizes the number of threads needed to run VLC")
...@@ -850,6 +856,10 @@ vlc_module_begin(); ...@@ -850,6 +856,10 @@ vlc_module_begin();
add_bool( "rt-priority", 0, NULL, RT_PRIORITY_TEXT, RT_PRIORITY_LONGTEXT, VLC_TRUE ); add_bool( "rt-priority", 0, NULL, RT_PRIORITY_TEXT, RT_PRIORITY_LONGTEXT, VLC_TRUE );
#endif #endif
#if !defined(SYS_BEOS) && defined(PTHREAD_COND_T_IN_PTHREAD_H)
add_integer( "rt-offset", 0, NULL, RT_OFFSET_TEXT, RT_OFFSET_LONGTEXT, VLC_TRUE );
#endif
#if defined(WIN32) #if defined(WIN32)
add_bool( "one-instance", 0, NULL, ONEINSTANCE_TEXT, ONEINSTANCE_LONGTEXT, VLC_TRUE ); add_bool( "one-instance", 0, NULL, ONEINSTANCE_TEXT, ONEINSTANCE_LONGTEXT, VLC_TRUE );
add_bool( "high-priority", 1, NULL, HPRIORITY_TEXT, HPRIORITY_LONGTEXT, VLC_TRUE ); add_bool( "high-priority", 1, NULL, HPRIORITY_TEXT, HPRIORITY_LONGTEXT, VLC_TRUE );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* threads.c : threads implementation for the VideoLAN client * threads.c : threads implementation for the VideoLAN client
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2004 VideoLAN * Copyright (C) 1999-2004 VideoLAN
* $Id: threads.c,v 1.45 2004/01/06 12:02:06 zorglub Exp $ * $Id: threads.c,v 1.46 2004/02/20 17:20:01 massiot Exp $
* *
* Authors: Jean-Marc Dressler <polux@via.ecp.fr> * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -568,7 +568,9 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line, ...@@ -568,7 +568,9 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line,
{ {
int i_error, i_policy; int i_error, i_policy;
struct sched_param param; struct sched_param param;
memset( &param, 0, sizeof(struct sched_param) ); memset( &param, 0, sizeof(struct sched_param) );
i_priority += config_GetInt( p_this, "rt-offset" );
if ( i_priority < 0 ) if ( i_priority < 0 )
{ {
param.sched_priority = (-1) * i_priority; param.sched_priority = (-1) * i_priority;
...@@ -645,13 +647,17 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file, ...@@ -645,13 +647,17 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file,
} }
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
if ( i_priority
#ifdef SYS_DARWIN #ifndef SYS_DARWIN
if ( i_priority ) && config_GetInt( p_this, "rt-priority" )
#endif
)
{ {
int i_error, i_policy; int i_error, i_policy;
struct sched_param param; struct sched_param param;
memset( &param, 0, sizeof(struct sched_param) ); memset( &param, 0, sizeof(struct sched_param) );
i_priority += config_GetInt( p_this, "rt-offset" );
if ( i_priority < 0 ) if ( i_priority < 0 )
{ {
param.sched_priority = (-1) * i_priority; param.sched_priority = (-1) * i_priority;
...@@ -662,7 +668,7 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file, ...@@ -662,7 +668,7 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file,
param.sched_priority = i_priority; param.sched_priority = i_priority;
i_policy = SCHED_RR; i_policy = SCHED_RR;
} }
if ( (i_error = pthread_setschedparam( pthread_self(), if ( (i_error = pthread_setschedparam( p_this->thread_id,
i_policy, &param )) ) i_policy, &param )) )
{ {
msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s", msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s",
...@@ -670,8 +676,6 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file, ...@@ -670,8 +676,6 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file,
i_priority = 0; i_priority = 0;
} }
} }
#endif
#endif #endif
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment