Changeset 9df284851e95e95a365d058ae26456e6168c84bb
- Timestamp:
- 05/04/08 19:26:07
(4 months ago)
- Author:
- Rémi Denis-Courmont <rem@videolan.org>
- git-committer:
- Rémi Denis-Courmont <rem@videolan.org> 1209921967 +0300
- git-parent:
[aebd6a4333c175bd5cd00ced4b25586be74c3837]
- git-author:
- Rémi Denis-Courmont <rem@videolan.org> 1209921967 +0300
- Message:
Add long overdue private libvlc object pointer...
...and use it for stats and the config lock
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| rb89d540 |
r9df2848 |
|
| 69 | 69 | module_t * p_memcpy_module; ///< Fast memcpy plugin used |
|---|
| 70 | 70 | |
|---|
| 71 | | bool b_stats; ///< Should we collect stats ? |
|---|
| 72 | | vlc_mutex_t timer_lock; ///< Lock to protect timers |
|---|
| 73 | | int i_timers; ///< Number of timers |
|---|
| 74 | | counter_t **pp_timers; ///< Array of all timers |
|---|
| 75 | | |
|---|
| 76 | | vlc_mutex_t config_lock; ///< Lock for the config file |
|---|
| 77 | | |
|---|
| 78 | 71 | /* Structure storing the action name / key associations */ |
|---|
| 79 | 72 | struct hotkey |
|---|
| r449fd28 |
r9df2848 |
|
| 558 | 558 | void __config_ResetAll( vlc_object_t *p_this ) |
|---|
| 559 | 559 | { |
|---|
| | 560 | libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc); |
|---|
| 560 | 561 | int i_index; |
|---|
| 561 | 562 | vlc_list_t *p_list; |
|---|
| … | … | |
| 563 | 564 | |
|---|
| 564 | 565 | /* Acquire config file lock */ |
|---|
| 565 | | vlc_mutex_lock( &p_this->p_libvlc->config_lock ); |
|---|
| | 566 | vlc_mutex_lock( &priv->config_lock ); |
|---|
| 566 | 567 | |
|---|
| 567 | 568 | p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE ); |
|---|
| … | … | |
| 590 | 591 | |
|---|
| 591 | 592 | vlc_list_release( p_list ); |
|---|
| 592 | | vlc_mutex_unlock( &p_this->p_libvlc->config_lock ); |
|---|
| | 593 | vlc_mutex_unlock( &priv->config_lock ); |
|---|
| 593 | 594 | } |
|---|
| 594 | 595 | |
|---|
| r449fd28 |
r9df2848 |
|
| 140 | 140 | int __config_LoadConfigFile( vlc_object_t *p_this, const char *psz_module_name ) |
|---|
| 141 | 141 | { |
|---|
| | 142 | libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc); |
|---|
| 142 | 143 | vlc_list_t *p_list; |
|---|
| 143 | 144 | FILE *file; |
|---|
| … | … | |
| 148 | 149 | |
|---|
| 149 | 150 | /* Acquire config file lock */ |
|---|
| 150 | | vlc_mutex_lock( &p_this->p_libvlc->config_lock ); |
|---|
| | 151 | vlc_mutex_lock( &priv->config_lock ); |
|---|
| 151 | 152 | |
|---|
| 152 | 153 | /* Look for the selected module, if NULL then save everything */ |
|---|
| … | … | |
| 297 | 298 | vlc_list_release( p_list ); |
|---|
| 298 | 299 | |
|---|
| 299 | | vlc_mutex_unlock( &p_this->p_libvlc->config_lock ); |
|---|
| | 300 | vlc_mutex_unlock( &priv->config_lock ); |
|---|
| 300 | 301 | return 0; |
|---|
| 301 | 302 | } |
|---|
| … | … | |
| 387 | 388 | bool b_autosave ) |
|---|
| 388 | 389 | { |
|---|
| | 390 | libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc); |
|---|
| 389 | 391 | module_t *p_parser; |
|---|
| 390 | 392 | vlc_list_t *p_list; |
|---|
| … | … | |
| 397 | 399 | |
|---|
| 398 | 400 | /* Acquire config file lock */ |
|---|
| 399 | | vlc_mutex_lock( &p_this->p_libvlc->config_lock ); |
|---|
| | 401 | vlc_mutex_lock( &priv->config_lock ); |
|---|
| 400 | 402 | |
|---|
| 401 | 403 | if( p_this->p_libvlc->psz_configfile == NULL ) |
|---|
| … | … | |
| 405 | 407 | { |
|---|
| 406 | 408 | msg_Err( p_this, "no configuration directory defined" ); |
|---|
| 407 | | vlc_mutex_unlock( &p_this->p_libvlc->config_lock ); |
|---|
| | 409 | vlc_mutex_unlock( &priv->config_lock ); |
|---|
| 408 | 410 | return -1; |
|---|
| 409 | 411 | } |
|---|
| … | … | |
| 425 | 427 | { |
|---|
| 426 | 428 | if( file ) fclose( file ); |
|---|
| 427 | | vlc_mutex_unlock( &p_this->p_libvlc->config_lock ); |
|---|
| | 429 | vlc_mutex_unlock( &priv->config_lock ); |
|---|
| 428 | 430 | return -1; |
|---|
| 429 | 431 | } |
|---|
| … | … | |
| 499 | 501 | vlc_list_release( p_list ); |
|---|
| 500 | 502 | free( p_bigbuffer ); |
|---|
| 501 | | vlc_mutex_unlock( &p_this->p_libvlc->config_lock ); |
|---|
| | 503 | vlc_mutex_unlock( &priv->config_lock ); |
|---|
| 502 | 504 | return -1; |
|---|
| 503 | 505 | } |
|---|
| … | … | |
| 620 | 622 | |
|---|
| 621 | 623 | fclose( file ); |
|---|
| 622 | | vlc_mutex_unlock( &p_this->p_libvlc->config_lock ); |
|---|
| | 624 | vlc_mutex_unlock( &priv->config_lock ); |
|---|
| 623 | 625 | |
|---|
| 624 | 626 | return 0; |
|---|
| … | … | |
| 627 | 629 | int config_AutoSaveConfigFile( vlc_object_t *p_this ) |
|---|
| 628 | 630 | { |
|---|
| | 631 | libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc); |
|---|
| 629 | 632 | vlc_list_t *p_list; |
|---|
| 630 | 633 | int i_index, i_count; |
|---|
| … | … | |
| 633 | 636 | |
|---|
| 634 | 637 | /* Check if there's anything to save */ |
|---|
| 635 | | vlc_mutex_lock( &p_this->p_libvlc->config_lock ); |
|---|
| | 638 | vlc_mutex_lock( &priv->config_lock ); |
|---|
| 636 | 639 | p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE ); |
|---|
| 637 | 640 | i_count = p_list->i_count; |
|---|
| … | … | |
| 652 | 655 | } |
|---|
| 653 | 656 | vlc_list_release( p_list ); |
|---|
| 654 | | vlc_mutex_unlock( &p_this->p_libvlc->config_lock ); |
|---|
| | 657 | vlc_mutex_unlock( &priv->config_lock ); |
|---|
| 655 | 658 | |
|---|
| 656 | 659 | if( i_index == i_count ) return VLC_SUCCESS; |
|---|
| r2e48e65 |
r9df2848 |
|
| 1363 | 1363 | i_delay = 0; |
|---|
| 1364 | 1364 | |
|---|
| 1365 | | if( p_input->p_libvlc->b_stats ) |
|---|
| | 1365 | if( libvlc_stats (p_input) ) |
|---|
| 1366 | 1366 | { |
|---|
| 1367 | 1367 | vlc_mutex_lock( &p_input->p->counters.counters_lock ); |
|---|
| r6da90a1 |
r9df2848 |
|
| 796 | 796 | #define INIT_COUNTER( c, type, compute ) p_input->p->counters.p_##c = \ |
|---|
| 797 | 797 | stats_CounterCreate( p_input, VLC_VAR_##type, STATS_##compute); |
|---|
| 798 | | if( p_input->p_libvlc->b_stats ) |
|---|
| | 798 | if( libvlc_stats (p_input) ) |
|---|
| 799 | 799 | { |
|---|
| 800 | 800 | INIT_COUNTER( read_bytes, INTEGER, COUNTER ); |
|---|
| … | … | |
| 864 | 864 | } |
|---|
| 865 | 865 | } |
|---|
| 866 | | if( p_input->p_libvlc->b_stats ) |
|---|
| | 866 | if( libvlc_stats (p_input) ) |
|---|
| 867 | 867 | { |
|---|
| 868 | 868 | INIT_COUNTER( sout_sent_packets, INTEGER, COUNTER ); |
|---|
| … | … | |
| 1261 | 1261 | #endif |
|---|
| 1262 | 1262 | |
|---|
| 1263 | | if( !p_input->b_preparsing && p_input->p_libvlc->b_stats ) |
|---|
| | 1263 | if( !p_input->b_preparsing && libvlc_stats (p_input) ) |
|---|
| 1264 | 1264 | { |
|---|
| 1265 | 1265 | #define EXIT_COUNTER( c ) do { if( p_input->p->counters.p_##c ) \ |
|---|
| … | … | |
| 1344 | 1344 | { |
|---|
| 1345 | 1345 | #define CL_CO( c ) stats_CounterClean( p_input->p->counters.p_##c ); p_input->p->counters.p_##c = NULL; |
|---|
| 1346 | | if( p_input->p_libvlc->b_stats ) |
|---|
| | 1346 | if( libvlc_stats (p_input) ) |
|---|
| 1347 | 1347 | { |
|---|
| 1348 | 1348 | /* make sure we are up to date */ |
|---|
| rd1d3dc1 |
r9df2848 |
|
| 1753 | 1753 | p_block = p_access->pf_block( p_access ); |
|---|
| 1754 | 1754 | if( pb_eof ) *pb_eof = p_access->info.b_eof; |
|---|
| 1755 | | if( p_input && p_block && p_access->p_libvlc->b_stats ) |
|---|
| | 1755 | if( p_input && p_block && libvlc_stats (p_access) ) |
|---|
| 1756 | 1756 | { |
|---|
| 1757 | 1757 | vlc_mutex_lock( &p_input->p->counters.counters_lock ); |
|---|
| r9c87bdf |
r9df2848 |
|
| 147 | 147 | libvlc_int_t * libvlc_InternalCreate( void ) |
|---|
| 148 | 148 | { |
|---|
| 149 | | libvlc_int_t * p_libvlc = NULL; |
|---|
| | 149 | libvlc_int_t *p_libvlc; |
|---|
| | 150 | libvlc_priv_t *priv; |
|---|
| 150 | 151 | char *psz_env = NULL; |
|---|
| 151 | 152 | |
|---|
| … | … | |
| 168 | 169 | |
|---|
| 169 | 170 | /* Allocate a libvlc instance object */ |
|---|
| 170 | | p_libvlc = vlc_object_create( p_libvlc_global, VLC_OBJECT_LIBVLC ); |
|---|
| | 171 | p_libvlc = vlc_custom_create( VLC_OBJECT(p_libvlc_global), |
|---|
| | 172 | sizeof (*p_libvlc) + sizeof (libvlc_priv_t), |
|---|
| | 173 | VLC_OBJECT_LIBVLC, "libvlc" ); |
|---|
| 171 | 174 | if( p_libvlc != NULL ) |
|---|
| 172 | 175 | i_instances++; |
|---|
| … | … | |
| 180 | 183 | p_libvlc->p_vlm = NULL; |
|---|
| 181 | 184 | p_libvlc->psz_object_name = strdup( "libvlc" ); |
|---|
| | 185 | priv = libvlc_priv (p_libvlc); |
|---|
| 182 | 186 | |
|---|
| 183 | 187 | /* Initialize message queue */ |
|---|
| … | … | |
| 201 | 205 | |
|---|
| 202 | 206 | /* Initialize mutexes */ |
|---|
| 203 | | vlc_mutex_init( &p_libvlc->timer_lock ); |
|---|
| 204 | | vlc_mutex_init( &p_libvlc->config_lock ); |
|---|
| | 207 | vlc_mutex_init( &priv->timer_lock ); |
|---|
| | 208 | vlc_mutex_init( &priv->config_lock ); |
|---|
| 205 | 209 | #ifdef __APPLE__ |
|---|
| 206 | 210 | vlc_thread_set_priority( p_libvlc, VLC_THREAD_PRIORITY_LOW ); |
|---|
| … | … | |
| 224 | 228 | { |
|---|
| 225 | 229 | libvlc_global_data_t *p_libvlc_global = vlc_global(); |
|---|
| | 230 | libvlc_priv_t *priv = libvlc_priv (p_libvlc); |
|---|
| 226 | 231 | char p_capabilities[200]; |
|---|
| 227 | 232 | char * p_tmp = NULL; |
|---|
| … | … | |
| 706 | 711 | p_libvlc->p_memcpy_module = module_Need( p_libvlc, "memcpy", "$memcpy", 0 ); |
|---|
| 707 | 712 | |
|---|
| 708 | | p_libvlc->b_stats = config_GetInt( p_libvlc, "stats" ) > 0; |
|---|
| 709 | | p_libvlc->i_timers = 0; |
|---|
| 710 | | p_libvlc->pp_timers = NULL; |
|---|
| | 713 | priv->b_stats = config_GetInt( p_libvlc, "stats" ) > 0; |
|---|
| | 714 | priv->i_timers = 0; |
|---|
| | 715 | priv->pp_timers = NULL; |
|---|
| 711 | 716 | |
|---|
| 712 | 717 | /* Init stats */ |
|---|
| … | … | |
| 1031 | 1036 | return VLC_EGENERIC; |
|---|
| 1032 | 1037 | |
|---|
| | 1038 | libvlc_priv_t *priv = libvlc_priv (p_libvlc); |
|---|
| | 1039 | |
|---|
| 1033 | 1040 | #ifndef WIN32 |
|---|
| 1034 | 1041 | char* psz_pidfile = NULL; |
|---|
| … | … | |
| 1082 | 1089 | |
|---|
| 1083 | 1090 | /* Destroy mutexes */ |
|---|
| 1084 | | vlc_mutex_destroy( &p_libvlc->config_lock ); |
|---|
| 1085 | | vlc_mutex_destroy( &p_libvlc->timer_lock ); |
|---|
| | 1091 | vlc_mutex_destroy( &priv->config_lock ); |
|---|
| | 1092 | vlc_mutex_destroy( &priv->timer_lock ); |
|---|
| 1086 | 1093 | |
|---|
| 1087 | 1094 | if( b_release ) vlc_object_release( p_libvlc ); |
|---|
| raebd6a4 |
r9df2848 |
|
| 131 | 131 | libvlc_int_t *vlc_current_object (int i_object); |
|---|
| 132 | 132 | |
|---|
| 133 | | /* Private LibVLC data for each objects */ |
|---|
| | 133 | /** |
|---|
| | 134 | * Private LibVLC data for each object. |
|---|
| | 135 | */ |
|---|
| 134 | 136 | struct vlc_object_internals_t |
|---|
| 135 | 137 | { |
|---|
| … | … | |
| 164 | 166 | } |
|---|
| 165 | 167 | |
|---|
| | 168 | /** |
|---|
| | 169 | * Private LibVLC instance data. |
|---|
| | 170 | */ |
|---|
| | 171 | typedef struct libvlc_priv_t |
|---|
| | 172 | { |
|---|
| | 173 | vlc_mutex_t config_lock; ///< config file lock |
|---|
| | 174 | |
|---|
| | 175 | vlc_mutex_t timer_lock; ///< Lock to protect timers |
|---|
| | 176 | counter_t **pp_timers; ///< Array of all timers |
|---|
| | 177 | int i_timers; ///< Number of timers |
|---|
| | 178 | bool b_stats; ///< Whether to collect stats |
|---|
| | 179 | } libvlc_priv_t; |
|---|
| | 180 | |
|---|
| | 181 | static inline libvlc_priv_t *libvlc_priv (libvlc_int_t *libvlc) |
|---|
| | 182 | { |
|---|
| | 183 | return (libvlc_priv_t *)(libvlc + 1); |
|---|
| | 184 | } |
|---|
| | 185 | |
|---|
| | 186 | static inline bool libvlc_stats (vlc_object_t *obj) |
|---|
| | 187 | { |
|---|
| | 188 | return libvlc_priv (obj->p_libvlc)->b_stats; |
|---|
| | 189 | } |
|---|
| | 190 | |
|---|
| | 191 | /** |
|---|
| | 192 | * LibVLC "main module" configuration settings array. |
|---|
| | 193 | */ |
|---|
| 166 | 194 | extern module_config_t libvlc_config[]; |
|---|
| 167 | 195 | extern const size_t libvlc_config_count; |
|---|
| r6da90a1 |
r9df2848 |
|
| 86 | 86 | vlc_value_t val, vlc_value_t *val_new ) |
|---|
| 87 | 87 | { |
|---|
| 88 | | if( !p_this->p_libvlc->b_stats || !p_counter ) return VLC_EGENERIC; |
|---|
| | 88 | if( !libvlc_stats (p_this) || !p_counter ) return VLC_EGENERIC; |
|---|
| 89 | 89 | return CounterUpdate( p_this, p_counter, val, val_new ); |
|---|
| 90 | 90 | } |
|---|
| … | … | |
| 99 | 99 | int __stats_Get( vlc_object_t *p_this, counter_t *p_counter, vlc_value_t *val ) |
|---|
| 100 | 100 | { |
|---|
| 101 | | if( !p_this->p_libvlc->b_stats || !p_counter || p_counter->i_samples == 0 ) |
|---|
| | 101 | if( !libvlc_stats (p_this) || !p_counter || p_counter->i_samples == 0 ) |
|---|
| 102 | 102 | { |
|---|
| 103 | 103 | val->i_int = val->f_float = 0.0; |
|---|
| … | … | |
| 158 | 158 | void stats_ComputeInputStats( input_thread_t *p_input, input_stats_t *p_stats ) |
|---|
| 159 | 159 | { |
|---|
| 160 | | if( !p_input->p_libvlc->b_stats ) return; |
|---|
| | 160 | if( !libvlc_stats (p_input) ) return; |
|---|
| 161 | 161 | |
|---|
| 162 | 162 | vlc_mutex_lock( &p_input->p->counters.counters_lock ); |
|---|
| … | … | |
| 246 | 246 | int i_index; |
|---|
| 247 | 247 | |
|---|
| 248 | | if( !p_obj->p_libvlc->b_stats ) return; |
|---|
| | 248 | if( !libvlc_stats (p_obj) ) return; |
|---|
| 249 | 249 | |
|---|
| 250 | 250 | vlc_mutex_lock( &p_stats->lock ); |
|---|
| … | … | |
| 281 | 281 | unsigned int i_id ) |
|---|
| 282 | 282 | { |
|---|
| 283 | | int i; |
|---|
| | 283 | libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc); |
|---|
| 284 | 284 | counter_t *p_counter = NULL; |
|---|
| 285 | | if( !p_obj->p_libvlc->b_stats ) return; |
|---|
| 286 | | vlc_mutex_lock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 287 | | |
|---|
| 288 | | for( i = 0 ; i < p_obj->p_libvlc->i_timers; i++ ) |
|---|
| 289 | | { |
|---|
| 290 | | if( p_obj->p_libvlc->pp_timers[i]->i_id == i_id |
|---|
| 291 | | && p_obj->p_libvlc->pp_timers[i]->p_obj == p_obj ) |
|---|
| 292 | | { |
|---|
| 293 | | p_counter = p_obj->p_libvlc->pp_timers[i]; |
|---|
| | 285 | |
|---|
| | 286 | if( !priv->b_stats ) return; |
|---|
| | 287 | |
|---|
| | 288 | vlc_mutex_lock( &priv->timer_lock ); |
|---|
| | 289 | |
|---|
| | 290 | for( int i = 0 ; i < priv->i_timers; i++ ) |
|---|
| | 291 | { |
|---|
| | 292 | if( priv->pp_timers[i]->i_id == i_id |
|---|
| | 293 | && priv->pp_timers[i]->p_obj == p_obj ) |
|---|
| | 294 | { |
|---|
| | 295 | p_counter = priv->pp_timers[i]; |
|---|
| 294 | 296 | break; |
|---|
| 295 | 297 | } |
|---|
| … | … | |
| 301 | 303 | STATS_TIMER ); |
|---|
| 302 | 304 | if( !p_counter ) |
|---|
| 303 | | { |
|---|
| 304 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 305 | | return; |
|---|
| 306 | | } |
|---|
| | 305 | goto out; |
|---|
| 307 | 306 | p_counter->psz_name = strdup( psz_name ); |
|---|
| 308 | 307 | p_counter->i_id = i_id; |
|---|
| 309 | 308 | p_counter->p_obj = p_obj; |
|---|
| 310 | | INSERT_ELEM( p_obj->p_libvlc->pp_timers, p_obj->p_libvlc->i_timers, |
|---|
| 311 | | p_obj->p_libvlc->i_timers, p_counter ); |
|---|
| | 309 | INSERT_ELEM( priv->pp_timers, priv->i_timers, |
|---|
| | 310 | priv->i_timers, p_counter ); |
|---|
| 312 | 311 | |
|---|
| 313 | 312 | /* 1st sample : if started: start_date, else last_time, b_started */ |
|---|
| … | … | |
| 325 | 324 | { |
|---|
| 326 | 325 | msg_Warn( p_obj, "timer '%s' was already started !", psz_name ); |
|---|
| 327 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 328 | | return; |
|---|
| | 326 | goto out; |
|---|
| 329 | 327 | } |
|---|
| 330 | 328 | p_counter->pp_samples[0]->value.b_bool = true; |
|---|
| 331 | 329 | p_counter->pp_samples[0]->date = mdate(); |
|---|
| 332 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| | 330 | out: |
|---|
| | 331 | vlc_mutex_unlock( &priv->timer_lock ); |
|---|
| 333 | 332 | } |
|---|
| 334 | 333 | |
|---|
| … | … | |
| 336 | 335 | { |
|---|
| 337 | 336 | counter_t *p_counter = NULL; |
|---|
| 338 | | int i; |
|---|
| 339 | | if( !p_obj->p_libvlc->b_stats ) return; |
|---|
| 340 | | vlc_mutex_lock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 341 | | for( i = 0 ; i < p_obj->p_libvlc->i_timers; i++ ) |
|---|
| 342 | | { |
|---|
| 343 | | if( p_obj->p_libvlc->pp_timers[i]->i_id == i_id |
|---|
| 344 | | && p_obj->p_libvlc->pp_timers[i]->p_obj == p_obj ) |
|---|
| 345 | | { |
|---|
| 346 | | p_counter = p_obj->p_libvlc->pp_timers[i]; |
|---|
| | 337 | libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc); |
|---|
| | 338 | |
|---|
| | 339 | if( !priv->b_stats ) return; |
|---|
| | 340 | vlc_mutex_lock( &priv->timer_lock ); |
|---|
| | 341 | for( int i = 0 ; i < priv->i_timers; i++ ) |
|---|
| | 342 | { |
|---|
| | 343 | if( priv->pp_timers[i]->i_id == i_id |
|---|
| | 344 | && priv->pp_timers[i]->p_obj == p_obj ) |
|---|
| | 345 | { |
|---|
| | 346 | p_counter = priv->pp_timers[i]; |
|---|
| 347 | 347 | break; |
|---|
| 348 | 348 | } |
|---|
| … | … | |
| 351 | 351 | { |
|---|
| 352 | 352 | msg_Err( p_obj, "timer does not exist" ); |
|---|
| 353 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 354 | | return; |
|---|
| | 353 | goto out; |
|---|
| 355 | 354 | } |
|---|
| 356 | 355 | p_counter->pp_samples[0]->value.b_bool = false; |
|---|
| … | … | |
| 358 | 357 | p_counter->pp_samples[0]->date = mdate() - p_counter->pp_samples[0]->date; |
|---|
| 359 | 358 | p_counter->pp_samples[1]->date += p_counter->pp_samples[0]->date; |
|---|
| 360 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| | 359 | out: |
|---|
| | 360 | vlc_mutex_unlock( &priv->timer_lock ); |
|---|
| 361 | 361 | } |
|---|
| 362 | 362 | |
|---|
| … | … | |
| 364 | 364 | { |
|---|
| 365 | 365 | counter_t *p_counter = NULL; |
|---|
| 366 | | int i; |
|---|
| 367 | | if( !p_obj->p_libvlc->b_stats ) return; |
|---|
| 368 | | vlc_mutex_lock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 369 | | for( i = 0 ; i < p_obj->p_libvlc->i_timers; i++ ) |
|---|
| 370 | | { |
|---|
| 371 | | if( p_obj->p_libvlc->pp_timers[i]->i_id == i_id |
|---|
| 372 | | && p_obj->p_libvlc->pp_timers[i]->p_obj == p_obj ) |
|---|
| 373 | | { |
|---|
| 374 | | p_counter = p_obj->p_libvlc->pp_timers[i]; |
|---|
| | 366 | libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc); |
|---|
| | 367 | |
|---|
| | 368 | if( !priv->b_stats ) return; |
|---|
| | 369 | vlc_mutex_lock( &priv->timer_lock ); |
|---|
| | 370 | for( int i = 0 ; i < priv->i_timers; i++ ) |
|---|
| | 371 | { |
|---|
| | 372 | if( priv->pp_timers[i]->i_id == i_id |
|---|
| | 373 | && priv->pp_timers[i]->p_obj == p_obj ) |
|---|
| | 374 | { |
|---|
| | 375 | p_counter = priv->pp_timers[i]; |
|---|
| 375 | 376 | break; |
|---|
| 376 | 377 | } |
|---|
| 377 | 378 | } |
|---|
| 378 | 379 | TimerDump( p_obj, p_counter, true ); |
|---|
| 379 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| | 380 | vlc_mutex_unlock( &priv->timer_lock ); |
|---|
| 380 | 381 | } |
|---|
| 381 | 382 | |
|---|
| 382 | 383 | void __stats_TimersDumpAll( vlc_object_t *p_obj ) |
|---|
| 383 | 384 | { |
|---|
| 384 | | int i; |
|---|
| 385 | | if( !p_obj->p_libvlc->b_stats ) return; |
|---|
| 386 | | vlc_mutex_lock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 387 | | for ( i = 0 ; i< p_obj->p_libvlc->i_timers ; i++ ) |
|---|
| 388 | | TimerDump( p_obj, p_obj->p_libvlc->pp_timers[i], false ); |
|---|
| 389 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| | 385 | libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc); |
|---|
| | 386 | |
|---|
| | 387 | if( !priv->b_stats ) return; |
|---|
| | 388 | vlc_mutex_lock( &priv->timer_lock ); |
|---|
| | 389 | for ( int i = 0 ; i < priv->i_timers ; i++ ) |
|---|
| | 390 | TimerDump( p_obj, priv->pp_timers[i], false ); |
|---|
| | 391 | vlc_mutex_unlock( &priv->timer_lock ); |
|---|
| 390 | 392 | } |
|---|
| 391 | 393 | |
|---|
| 392 | 394 | void __stats_TimerClean( vlc_object_t *p_obj, unsigned int i_id ) |
|---|
| 393 | 395 | { |
|---|
| 394 | | int i; |
|---|
| 395 | | vlc_mutex_lock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 396 | | for ( i = p_obj->p_libvlc->i_timers -1 ; i >= 0; i-- ) |
|---|
| 397 | | { |
|---|
| 398 | | counter_t *p_counter = p_obj->p_libvlc->pp_timers[i]; |
|---|
| | 396 | libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc); |
|---|
| | 397 | |
|---|
| | 398 | vlc_mutex_lock( &priv->timer_lock ); |
|---|
| | 399 | for ( int i = priv->i_timers -1 ; i >= 0; i-- ) |
|---|
| | 400 | { |
|---|
| | 401 | counter_t *p_counter = priv->pp_timers[i]; |
|---|
| 399 | 402 | if( p_counter->i_id == i_id && p_counter->p_obj == p_obj ) |
|---|
| 400 | 403 | { |
|---|
| 401 | | REMOVE_ELEM( p_obj->p_libvlc->pp_timers, |
|---|
| 402 | | p_obj->p_libvlc->i_timers, i ); |
|---|
| | 404 | REMOVE_ELEM( priv->pp_timers, priv->i_timers, i ); |
|---|
| 403 | 405 | stats_CounterClean( p_counter ); |
|---|
| 404 | 406 | } |
|---|
| 405 | 407 | } |
|---|
| 406 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| | 408 | vlc_mutex_unlock( &priv->timer_lock ); |
|---|
| 407 | 409 | } |
|---|
| 408 | 410 | |
|---|
| 409 | 411 | void __stats_TimersCleanAll( vlc_object_t *p_obj ) |
|---|
| 410 | 412 | { |
|---|
| 411 | | int i; |
|---|
| 412 | | vlc_mutex_lock( &p_obj->p_libvlc->timer_lock ); |
|---|
| 413 | | for ( i = p_obj->p_libvlc->i_timers -1 ; i >= 0; i-- ) |
|---|
| 414 | | { |
|---|
| 415 | | counter_t *p_counter = p_obj->p_libvlc->pp_timers[i]; |
|---|
| 416 | | REMOVE_ELEM( p_obj->p_libvlc->pp_timers, p_obj->p_libvlc->i_timers, i ); |
|---|
| | 413 | libvlc_priv_t *priv = libvlc_priv (p_obj->p_libvlc); |
|---|
| | 414 | |
|---|
| | 415 | vlc_mutex_lock( &priv->timer_lock ); |
|---|
| | 416 | for ( int i = priv->i_timers -1 ; i >= 0; i-- ) |
|---|
| | 417 | { |
|---|
| | 418 | counter_t *p_counter = priv->pp_timers[i]; |
|---|
| | 419 | REMOVE_ELEM( priv->pp_timers, priv->i_timers, i ); |
|---|
| 417 | 420 | stats_CounterClean( p_counter ); |
|---|
| 418 | 421 | } |
|---|
| 419 | | vlc_mutex_unlock( &p_obj->p_libvlc->timer_lock ); |
|---|
| | 422 | vlc_mutex_unlock( &priv->timer_lock ); |
|---|
| 420 | 423 | } |
|---|
| 421 | 424 | |
|---|
| 422 | 425 | void stats_CounterClean( counter_t *p_c ) |
|---|
| 423 | 426 | { |
|---|
| 424 | | int i; |
|---|
| 425 | 427 | if( p_c ) |
|---|
| 426 | 428 | { |
|---|
| 427 | | i = p_c->i_samples - 1 ; |
|---|
| | 429 | int i = p_c->i_samples - 1 ; |
|---|
| 428 | 430 | while( i >= 0 ) |
|---|
| 429 | 431 | { |
|---|
| rab95c5f |
r9df2848 |
|
| 161 | 161 | really fast ... */ |
|---|
| 162 | 162 | |
|---|
| 163 | | if( !p_sout->p_libvlc->b_stats ) |
|---|
| | 163 | if( !libvlc_stats (p_sout) ) |
|---|
| 164 | 164 | return; |
|---|
| 165 | 165 | |
|---|