GstShark - Processing Time tracer: Difference between revisions

From RidgeRun Developer Wiki
No edit summary
No edit summary
Line 12: Line 12:


|pipeline=
|pipeline=
<pre style="white-space:pre-wrap; width:100%;">
<syntaxhighlight lang=bash>
GST_DEBUG="GST_TRACER:7" GST_TRACERS="proctime" gst-launch-1.0 videotestsrc ! identity sleep-time=8500 ! tee name=t t. ! queue ! identity sleep-time=50000 ! fakesink t. ! queue ! identity sleep-time=30000 ! fakesink
$ GST_DEBUG="GST_TRACER:7" GST_TRACERS="proctime" gst-launch-1.0 videotestsrc ! identity sleep-time=8500 ! tee name=t t. ! queue ! identity sleep-time=50000 ! fakesink t. ! queue ! identity sleep-time=30000 ! fakesink
</pre>
</syntaxhighlight>


|output=
|output=
<font size=1>
<font size=2>
<pre>0:00:03.064150969 13190      0x1511720 TRACE            GST_TRACER :0:: proctime, element=(string)identity0, time=(string)0:00:00.008593923;
<pre>0:00:03.064150969 13190      0x1511720 TRACE            GST_TRACER :0:: proctime, element=(string)identity0, time=(string)0:00:00.008593923;
0:00:03.085515606 13190      0x165f680 TRACE            GST_TRACER :0:: proctime, element=(string)identity2, time=(string)0:00:00.030146650;
0:00:03.085515606 13190      0x165f680 TRACE            GST_TRACER :0:: proctime, element=(string)identity2, time=(string)0:00:00.030146650;
0:00:03.105485969 13190      0x165f4a0 TRACE            GST_TRACER :0:: proctime, element=(string)identity1, time=(string)0:00:00.050150374;</pre>
0:00:03.105485969 13190      0x165f4a0 TRACE            GST_TRACER :0:: proctime, element=(string)identity1, time=(string)0:00:00.050150374;</pre>
</font>
</font>
Each line of the log includes a {{code|1=element}} field identifying the element and the {{code|1=time}} field with the processing time it took to run a buffer through the element.


|plot=[[File:test_proctime_plot.png|1000px|center]]
|plot=[[File:test_proctime_plot.png|1000px|center]]


|closing=As it is shown on the output log of the pipeline run the results displayed correspond only to the identity elements, this is because as it was mentioned before the processing time only works for filter and filter-like elements, which is why there are no results for the videotestsrc, the tee and neither for the fakesink; on the other side, the queue element is a filter element and it is not being measured by the processing time tracer and this is why the queue element processes the buffers in different threads, therefore it is not possible to be measured by the processing time tracer. Regarding the results of the identity elements, verifying that the time needed by each element to process its incoming buffer matches the delay set previously on the pipeline is straightforward, which exemplifies the operation of the tracer and what can be expected from it.
|closing=The output log only shows the identity elements. This is because, as it was mentioned before, the processing time only works for filter and filter-like elements. There are no results for the videotestsrc, the tee or the fakesink. The queue element is a filter element as well, but it processes the buffers in different threads. This makes it is not possible to be measured by the processing time tracer.  
 
}}
}}

Revision as of 18:32, 17 August 2017


InterLatency tracer

Home

Framerate tracer

Processing time was developed with the purpose of providing useful information to the user about the amount of time each element, of a given pipeline, is taking for processing each data buffer that goes through it, allowing the user to have knowledge about of how the performance of the pipeline is being affected by each element. This tracer corresponds to one of the tracers developed that are oriented to help the user to determine which element or process is increasing the general latency of the pipeline; in other words, it is a tool to check which element is taking too much time completing its tasks, causing a slow performance of the pipeline which can lead to a delay on the buffers and this being reflected on a wrong synchronization of the audio and video buffers, as an example.

The processing time tracer is designed for providing accurate data for the filter and filter-like elements of the pipeline. Based on the fact that the concept of the tracer is to measure the time an element takes to generate an output buffer when it receives a buffer on its sink pad, the source and sink elements are discarded since in order to the tracer to work properly it is needed that the element has both input and outputs pads. As it was mentioned previously the tracer supports the filter elements, in which an input buffer produces an output buffer, as a video converter; and the filter-like elements, more complex elements in which several input buffers combine to produce an output buffer, as an encoder or a muxer, or where a single input buffer produces several output buffers, as demuxer or a decoder; regardless of the amount of source and sink pads that the element has. However the tracer has the limitation that it only can report times for elements which process the inputs and outputs in the same thread, since the the idea of the tracer is to display a general measurement of the time elapsed processing a buffer without knowing the operation of element in detail.

At following there is an pipeline used as an example to demonstrate how to use the processing time tracer and the results obtained with it. The pipeline consists on 9 elements, numbered from left to right, connected as it is shown on the following graph; on the pipeline there are some elements that have a delay set, this with the purpose of increasing the time needed by that element to finish the processing of every buffer; this forced delay should be reflected on the measurements for every element on the output log of the tracer. Besides the graph of the pipeline used, at following is available the pipeline for testing along with the output log obtained.

Pipeline

$ GST_DEBUG="GST_TRACER:7" GST_TRACERS="proctime" gst-launch-1.0 videotestsrc ! identity sleep-time=8500 ! tee name=t t. ! queue ! identity sleep-time=50000 ! fakesink t. ! queue ! identity sleep-time=30000 ! fakesink

Sample diagram

Output

0:00:03.064150969 13190      0x1511720 TRACE             GST_TRACER :0:: proctime, element=(string)identity0, time=(string)0:00:00.008593923;
0:00:03.085515606 13190      0x165f680 TRACE             GST_TRACER :0:: proctime, element=(string)identity2, time=(string)0:00:00.030146650;
0:00:03.105485969 13190      0x165f4a0 TRACE             GST_TRACER :0:: proctime, element=(string)identity1, time=(string)0:00:00.050150374;

Each line of the log includes a element field identifying the element and the time field with the processing time it took to run a buffer through the element.

Plot

Additional notes

The output log only shows the identity elements. This is because, as it was mentioned before, the processing time only works for filter and filter-like elements. There are no results for the videotestsrc, the tee or the fakesink. The queue element is a filter element as well, but it processes the buffers in different threads. This makes it is not possible to be measured by the processing time tracer.


InterLatency tracer

Home

Framerate tracer