]> git.sesse.net Git - vlc/commitdiff
Compute global input/output stats (Refs:#473)
authorClément Stenac <zorglub@videolan.org>
Sat, 28 Jan 2006 10:45:13 +0000 (10:45 +0000)
committerClément Stenac <zorglub@videolan.org>
Sat, 28 Jan 2006 10:45:13 +0000 (10:45 +0000)
include/vlc_messages.h
include/vlc_playlist.h
src/misc/stats.c
src/playlist/playlist.c

index 4eba79c8b9e2d107fa05ba3af6566f3909dcf644..6b0343e12352ecae7c9d1ee323fa772a16d26915 100644 (file)
@@ -344,6 +344,7 @@ struct global_stats_t
     vlc_mutex_t lock;
 
     float f_input_bitrate;
+    float f_demux_bitrate;
     float f_output_bitrate;
 
     int i_http_clients;
index 5c387676f2735a8087932413b627e60397ff61e8..d0cca9f536377355b96ed654160710dc32e8094e 100644 (file)
@@ -218,6 +218,8 @@ struct playlist_t
     // thread
     interaction_t *p_interaction;
 
+    global_stats_t *p_stats;
+
     /*@}*/
 };
 
index 62d5eba9bd691aef52ba784e1067382f9bed29d2..826d81463d5c5b5a7ec5e57b4da9517b14414747 100644 (file)
@@ -370,20 +370,25 @@ void __stats_ComputeGlobalStats( vlc_object_t *p_obj,
     int i_index;
     vlc_mutex_lock( &p_stats->lock );
 
-    p_list = vlc_list_find( p_obj, VLC_OBJECT_INPUT, FIND_CHILD );
+    p_list = vlc_list_find( p_obj, VLC_OBJECT_INPUT, FIND_ANYWHERE );
     if( p_list )
     {
+        float f_total_in = 0, f_total_out = 0,f_total_demux = 0;
         for( i_index = 0; i_index < p_list->i_count ; i_index ++ )
         {
-            float f_in = 0, f_out = 0;
+            float f_in = 0, f_out = 0, f_demux = 0;
             p_obj = (vlc_object_t *)p_list->p_values[i_index].p_object;
             stats_GetFloat( p_obj, p_obj->i_object_id, "input_bitrate",
                             &f_in );
             stats_GetFloat( p_obj, p_obj->i_object_id, "sout_send_bitrate",
                             &f_out );
-            p_stats->f_input_bitrate += f_in;
-            p_stats->f_output_bitrate += f_out;
+            stats_GetFloat( p_obj, p_obj->i_object_id, "demux_bitrate",
+                            &f_demux );
+            f_total_in += f_in; f_total_out += f_out;f_total_demux += f_demux;
         }
+        p_stats->f_input_bitrate = f_total_in;
+        p_stats->f_output_bitrate = f_total_out;
+        p_stats->f_demux_bitrate = f_total_demux;
         vlc_list_release( p_list );
     }
 
index bde17ab55b84535e64fa111bea195e1f1b38e67d..751e6f20e2cf14a073c473aec722f3170b96e3bc 100644 (file)
@@ -173,10 +173,12 @@ playlist_t * __playlist_Create ( vlc_object_t *p_parent )
     p_playlist->request.b_request = VLC_FALSE;
     p_playlist->status.i_status = PLAYLIST_STOPPED;
 
-
     p_playlist->i_sort = SORT_ID;
     p_playlist->i_order = ORDER_NORMAL;
 
+    p_playlist->p_stats = (global_stats_t *)malloc( sizeof( global_stats_t ) );
+    vlc_mutex_init( p_playlist, &p_playlist->p_stats->lock );
+
     /* Finally, launch the thread ! */
     if( vlc_thread_create( p_playlist, "playlist", RunThread,
                            VLC_THREAD_PRIORITY_LOW, VLC_TRUE ) )
@@ -598,6 +600,11 @@ static void RunThread ( playlist_t *p_playlist )
             stats_TimerStop( p_playlist, "Interaction thread" );
         }
 
+        if( i_loops %5 == 0 && p_playlist->p_stats )
+        {
+            stats_ComputeGlobalStats( p_playlist, p_playlist->p_stats );
+        }
+
         vlc_mutex_lock( &p_playlist->object_lock );
 
         /* First, check if we have something to do */