Commit 6b42b421 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont
Browse files

Privatize the stats computer

parent 067e6c37
...@@ -45,7 +45,6 @@ struct libvlc_int_t ...@@ -45,7 +45,6 @@ struct libvlc_int_t
playlist_t *p_playlist; ///< playlist object playlist_t *p_playlist; ///< playlist object
void *p_stats_computer; ///< Input thread computing stats (needs cleanup)
global_stats_t *p_stats; ///< Global statistics global_stats_t *p_stats; ///< Global statistics
/* There is no real reason to keep a list of items, but not to break /* There is no real reason to keep a list of items, but not to break
......
...@@ -158,11 +158,10 @@ static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item, ...@@ -158,11 +158,10 @@ static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item,
* the global stats. Check if there is already someone doing this */ * the global stats. Check if there is already someone doing this */
if( p_input->p_libvlc->p_stats && !b_quick ) if( p_input->p_libvlc->p_stats && !b_quick )
{ {
libvlc_priv_t *priv = libvlc_priv (p_input->p_libvlc);
vlc_mutex_lock( &p_input->p_libvlc->p_stats->lock ); vlc_mutex_lock( &p_input->p_libvlc->p_stats->lock );
if( p_input->p_libvlc->p_stats_computer == NULL ) if( priv->p_stats_computer == NULL )
{ priv->p_stats_computer = p_input;
p_input->p_libvlc->p_stats_computer = p_input;
}
vlc_mutex_unlock( &p_input->p_libvlc->p_stats->lock ); vlc_mutex_unlock( &p_input->p_libvlc->p_stats->lock );
} }
...@@ -779,10 +778,10 @@ static void MainLoop( input_thread_t *p_input ) ...@@ -779,10 +778,10 @@ static void MainLoop( input_thread_t *p_input )
{ {
stats_ComputeInputStats( p_input, p_input->p->input.p_item->p_stats ); stats_ComputeInputStats( p_input, p_input->p->input.p_item->p_stats );
/* Are we the thread responsible for computing global stats ? */ /* Are we the thread responsible for computing global stats ? */
if( p_input->p_libvlc->p_stats_computer == p_input ) if( libvlc_priv (p_input->p_libvlc)->p_stats_computer == p_input )
{ {
stats_ComputeGlobalStats( p_input->p_libvlc, stats_ComputeGlobalStats( p_input->p_libvlc,
p_input->p_libvlc->p_stats ); p_input->p_libvlc->p_stats );
} }
} }
} }
...@@ -1345,13 +1344,15 @@ static void End( input_thread_t * p_input ) ...@@ -1345,13 +1344,15 @@ static void End( input_thread_t * p_input )
#define CL_CO( c ) stats_CounterClean( p_input->p->counters.p_##c ); p_input->p->counters.p_##c = NULL; #define CL_CO( c ) stats_CounterClean( p_input->p->counters.p_##c ); p_input->p->counters.p_##c = NULL;
if( libvlc_stats (p_input) ) if( libvlc_stats (p_input) )
{ {
libvlc_priv_t *priv = libvlc_priv (p_input->p_libvlc);
/* make sure we are up to date */ /* make sure we are up to date */
stats_ComputeInputStats( p_input, p_input->p->input.p_item->p_stats ); stats_ComputeInputStats( p_input, p_input->p->input.p_item->p_stats );
if( p_input->p_libvlc->p_stats_computer == p_input ) if( priv->p_stats_computer == p_input )
{ {
stats_ComputeGlobalStats( p_input->p_libvlc, stats_ComputeGlobalStats( p_input->p_libvlc,
p_input->p_libvlc->p_stats ); p_input->p_libvlc->p_stats );
p_input->p_libvlc->p_stats_computer = NULL; priv->p_stats_computer = NULL;
} }
CL_CO( read_bytes ); CL_CO( read_bytes );
CL_CO( read_packets ); CL_CO( read_packets );
......
...@@ -722,7 +722,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, ...@@ -722,7 +722,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
return VLC_ENOMEM; return VLC_ENOMEM;
} }
vlc_mutex_init( &p_libvlc->p_stats->lock ); vlc_mutex_init( &p_libvlc->p_stats->lock );
p_libvlc->p_stats_computer = NULL; priv->p_stats_computer = NULL;
/* Init the array that holds every input item */ /* Init the array that holds every input item */
ARRAY_INIT( p_libvlc->input_items ); ARRAY_INIT( p_libvlc->input_items );
......
...@@ -223,6 +223,9 @@ typedef struct libvlc_priv_t ...@@ -223,6 +223,9 @@ typedef struct libvlc_priv_t
int i_timers; ///< Number of timers int i_timers; ///< Number of timers
bool b_stats; ///< Whether to collect stats bool b_stats; ///< Whether to collect stats
void *p_stats_computer; ///< Input thread computing stats
/// (needs cleanup)
module_t *p_memcpy_module; ///< Fast memcpy plugin used module_t *p_memcpy_module; ///< Fast memcpy plugin used
vlm_t *p_vlm; ///< VLM if created from libvlc-common.c vlm_t *p_vlm; ///< VLM if created from libvlc-common.c
vlc_object_t *p_interaction; ///< interface interaction object vlc_object_t *p_interaction; ///< interface interaction object
......
Supports Markdown
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