[vlc-commits] [Git][videolan/vlc][master] 5 commits: vlc_tracer: add unsigned integer
Steve Lhomme (@robUx4)
gitlab at videolan.org
Sat Mar 1 11:09:14 UTC 2025
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
e7e2dfdb by Alexandre Janniaux at 2025-03-01T10:50:32+00:00
vlc_tracer: add unsigned integer
Unsigned support allows tracing sizes and counters.
- - - - -
5695e0c8 by Alexandre Janniaux at 2025-03-01T10:50:32+00:00
tracer: json: add support for unsigned integers
- - - - -
90655728 by Alexandre Janniaux at 2025-03-01T10:50:32+00:00
vlcrs-core: tracer: add new unsigned field
- - - - -
2d26f51e by Alexandre Janniaux at 2025-03-01T10:50:32+00:00
telegraf-rs: add support for unsigned trace fields
- - - - -
bb32f75f by Alexandre Janniaux at 2025-03-01T10:50:32+00:00
input: decoder: trace input fifo buffer level
The decoder fifo level metric allows interpreting the situation that led
to the fifo from the decoder to be flushed (ie. the fifo reached 400MiB
of undecoded data stored). The metrics generates a lot of points though,
so be sure to aggregate when displaying it.
Example of query in flux language:
from(bucket: v.defaultBucket)
|> range(start: v.timeRangeStart, stop:v.timeRangeStop)
|> filter(fn: (r) =>
r._measurement == "measurement" and
r._field == "fifo_size"
)
|> aggregateWindow(every: 1s, fn: max)
The size metrics are casted into uint64_t, but are always below the
uint64_t max value anyway given they represent lesser values than
400MiB.
- - - - -
5 changed files:
- include/vlc_tracer.h
- modules/logger/json.c
- modules/logger/telegraf-rs/src/lib.rs
- src/input/decoder.c
- src/rust/vlcrs-core/src/tracer/sys.rs
Changes:
=====================================
include/vlc_tracer.h
=====================================
@@ -51,7 +51,8 @@ enum vlc_tracer_value
{
VLC_TRACER_INT,
VLC_TRACER_DOUBLE,
- VLC_TRACER_STRING
+ VLC_TRACER_STRING,
+ VLC_TRACER_UINT,
};
typedef union
@@ -59,6 +60,7 @@ typedef union
int64_t integer;
double double_;
const char *string;
+ uint64_t uinteger;
} vlc_tracer_value_t;
/**
@@ -177,6 +179,14 @@ static inline struct vlc_tracer_entry vlc_tracer_entry_FromInt(const char *key,
return trace;
}
+static inline struct vlc_tracer_entry vlc_tracer_entry_FromUnsigned(const char *key, uint64_t value)
+{
+ vlc_tracer_value_t tracer_value;
+ tracer_value.uinteger = value;
+ struct vlc_tracer_entry trace = { key, tracer_value, VLC_TRACER_UINT };
+ return trace;
+}
+
static inline struct vlc_tracer_entry vlc_tracer_entry_FromDouble(const char *key, double value)
{
vlc_tracer_value_t tracer_value = {
@@ -200,6 +210,7 @@ static inline struct vlc_tracer_entry vlc_tracer_entry_FromString(const char *ke
#define VLC_TRACE(key, value) \
_Generic((value), \
+ uint64_t: vlc_tracer_entry_FromUnsigned, \
int64_t: vlc_tracer_entry_FromInt, \
double: vlc_tracer_entry_FromDouble, \
char *: vlc_tracer_entry_FromString, \
@@ -213,6 +224,11 @@ static inline struct vlc_tracer_entry VLC_TRACE(const char *key, int64_t value)
return vlc_tracer_entry_FromInt(key, value);
}
+static inline struct vlc_tracer_entry VLC_TRACE(const char *key, uint64_t value)
+{
+ return vlc_tracer_entry_FromUnsigned(key, value);
+}
+
static inline struct vlc_tracer_entry VLC_TRACE(const char *key, char *value)
{
return vlc_tracer_entry_FromString(key, value);
=====================================
modules/logger/json.c
=====================================
@@ -138,6 +138,12 @@ static void JsonPrintKeyValueNumber(FILE *stream, const char *key, int64_t value
fprintf(stream, ": \"%"PRId64"\"", value);
}
+static void JsonPrintKeyValueUnsigned(FILE *stream, const char *key, uint64_t value)
+{
+ JsonPrintString(stream, key);
+ fprintf(stream, ": \"%"PRIu64"\"", value);
+}
+
static void JsonPrintKeyValueNumberFromDouble(FILE *stream, const char *key, double value)
{
JsonPrintString(stream, key);
@@ -181,6 +187,9 @@ static void TraceJson(void *opaque, vlc_tick_t ts, const struct vlc_tracer_trace
{
switch (entry->type)
{
+ case VLC_TRACER_UINT:
+ JsonPrintKeyValueUnsigned(stream, entry->key, entry->value.uinteger);
+ break;
case VLC_TRACER_INT:
JsonPrintKeyValueNumber(stream, entry->key, entry->value.integer);
break;
=====================================
modules/logger/telegraf-rs/src/lib.rs
=====================================
@@ -32,6 +32,9 @@ impl IntoFieldData for TraceField {
vlc_tracer_value_type::Integer => unsafe {
telegraf::FieldData::Number(self.0.value().integer)
},
+ vlc_tracer_value_type::Unsigned => unsafe {
+ telegraf::FieldData::UNumber(self.0.value().unsigned)
+ },
vlc_tracer_value_type::Double => unsafe {
telegraf::FieldData::Float(self.0.value().double)
},
=====================================
src/input/decoder.c
=====================================
@@ -2474,6 +2474,20 @@ void vlc_input_decoder_DecodeWithStatus(vlc_input_decoder_t *p_owner, vlc_frame_
vlc_fifo_QueueUnlocked( p_owner->p_fifo, frame );
if (status != NULL)
GetStatusLocked(p_owner, status);
+
+ struct vlc_tracer *tracer = vlc_object_get_tracer(&p_owner->dec.obj);
+ if (tracer != NULL)
+ {
+ size_t fifo_size = vlc_fifo_GetBytes(p_owner->p_fifo);
+ size_t fifo_count = vlc_fifo_GetCount(p_owner->p_fifo);
+ vlc_tracer_Trace(tracer,
+ VLC_TRACE("id", p_owner->psz_id),
+ VLC_TRACE("fifo_size", (uint64_t)fifo_size),
+ VLC_TRACE("fifo_count", (uint64_t)fifo_count),
+ VLC_TRACE_END);
+ }
+
+
vlc_fifo_Unlock( p_owner->p_fifo );
}
=====================================
src/rust/vlcrs-core/src/tracer/sys.rs
=====================================
@@ -37,6 +37,7 @@ pub enum vlc_tracer_value_type {
Integer = 0,
Double = 1,
String = 2,
+ Unsigned = 3,
}
#[repr(C)]
@@ -45,6 +46,7 @@ pub union vlc_tracer_value {
pub integer: i64,
pub double: c_double,
pub string: *const c_char,
+ pub unsigned: u64,
}
#[repr(C)]
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/b250381c3ba5c6185f9a73f714fb28a05435c283...bb32f75f089a4ea04447eb233bb78869be63ceb1
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/b250381c3ba5c6185f9a73f714fb28a05435c283...bb32f75f089a4ea04447eb233bb78869be63ceb1
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list