mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-09-03 10:13:47 +00:00
tracer: Add memory tracer
Requires updating gstreamer-rs Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2092>
This commit is contained in:
parent
93ee2ee70d
commit
bd6be75107
9 changed files with 482 additions and 49 deletions
98
Cargo.lock
generated
98
Cargo.lock
generated
|
@ -1860,7 +1860,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.59.0",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2318,7 +2318,7 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
|
|||
[[package]]
|
||||
name = "gio"
|
||||
version = "0.21.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#a7079b6862891393e33c84dfb9111d848a1a39cc"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#c87867050de49f540b08bd26ae559983fc701a5b"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
|
@ -2334,19 +2334,19 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gio-sys"
|
||||
version = "0.21.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#a7079b6862891393e33c84dfb9111d848a1a39cc"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#c87867050de49f540b08bd26ae559983fc701a5b"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
"libc",
|
||||
"system-deps 7.0.3",
|
||||
"windows-sys 0.59.0",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glib"
|
||||
version = "0.21.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#a7079b6862891393e33c84dfb9111d848a1a39cc"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#c87867050de49f540b08bd26ae559983fc701a5b"
|
||||
dependencies = [
|
||||
"bitflags 2.8.0",
|
||||
"futures-channel",
|
||||
|
@ -2366,7 +2366,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "glib-macros"
|
||||
version = "0.21.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#a7079b6862891393e33c84dfb9111d848a1a39cc"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#c87867050de49f540b08bd26ae559983fc701a5b"
|
||||
dependencies = [
|
||||
"heck 0.5.0",
|
||||
"proc-macro-crate",
|
||||
|
@ -2378,7 +2378,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "glib-sys"
|
||||
version = "0.21.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#a7079b6862891393e33c84dfb9111d848a1a39cc"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#c87867050de49f540b08bd26ae559983fc701a5b"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"system-deps 7.0.3",
|
||||
|
@ -2393,7 +2393,7 @@ checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
|
|||
[[package]]
|
||||
name = "gobject-sys"
|
||||
version = "0.21.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#a7079b6862891393e33c84dfb9111d848a1a39cc"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs-core?branch=main#c87867050de49f540b08bd26ae559983fc701a5b"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"libc",
|
||||
|
@ -3420,7 +3420,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"futures-channel",
|
||||
|
@ -3446,7 +3446,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-allocators"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3457,7 +3457,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-allocators-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
@ -3469,7 +3469,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-analytics"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3480,7 +3480,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-analytics-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gstreamer-sys",
|
||||
|
@ -3491,7 +3491,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-app"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
|
@ -3505,7 +3505,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-app-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gstreamer-base-sys",
|
||||
|
@ -3517,7 +3517,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-audio"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"glib",
|
||||
|
@ -3532,7 +3532,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-audio-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
@ -3545,7 +3545,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-base"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"atomic_refcell",
|
||||
"cfg-if",
|
||||
|
@ -3558,7 +3558,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-base-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
@ -3570,7 +3570,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-check"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3580,7 +3580,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-check-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
@ -3592,7 +3592,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-gl"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3605,7 +3605,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-gl-egl"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3617,7 +3617,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-gl-egl-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gstreamer-gl-sys",
|
||||
|
@ -3628,7 +3628,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-gl-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
@ -3642,7 +3642,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-gl-wayland"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3654,7 +3654,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-gl-wayland-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gstreamer-gl-sys",
|
||||
|
@ -3665,7 +3665,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-gl-x11"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3677,7 +3677,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-gl-x11-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gstreamer-gl-sys",
|
||||
|
@ -3688,7 +3688,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-net"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"gio",
|
||||
"glib",
|
||||
|
@ -3699,7 +3699,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-net-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"gio-sys",
|
||||
"glib-sys",
|
||||
|
@ -3711,7 +3711,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-pbutils"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3725,7 +3725,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-pbutils-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
@ -3739,7 +3739,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-rtp"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3750,7 +3750,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-rtp-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gstreamer-base-sys",
|
||||
|
@ -3762,7 +3762,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-sdp"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3772,7 +3772,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-sdp-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gstreamer-sys",
|
||||
|
@ -3783,7 +3783,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"glib-sys",
|
||||
|
@ -3795,7 +3795,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-utils"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"gstreamer",
|
||||
"gstreamer-app",
|
||||
|
@ -3806,7 +3806,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-video"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"futures-channel",
|
||||
|
@ -3822,7 +3822,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-video-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
@ -3835,7 +3835,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-webrtc"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
@ -3847,7 +3847,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gstreamer-webrtc-sys"
|
||||
version = "0.24.0"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#5ac6c1e221d898c0949080281200e9cdf1b29210"
|
||||
source = "git+https://gitlab.freedesktop.org/gstreamer/gstreamer-rs?branch=main#a9389208107871ef56549e4c840929b5b6d9c8c6"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gstreamer-sdp-sys",
|
||||
|
@ -4765,7 +4765,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"windows-targets 0.52.6",
|
||||
"windows-targets 0.48.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -5952,7 +5952,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"heck 0.5.0",
|
||||
"heck 0.4.1",
|
||||
"itertools 0.12.1",
|
||||
"log",
|
||||
"multimap",
|
||||
|
@ -6125,7 +6125,7 @@ dependencies = [
|
|||
"once_cell",
|
||||
"socket2",
|
||||
"tracing",
|
||||
"windows-sys 0.59.0",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -6618,7 +6618,7 @@ dependencies = [
|
|||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"windows-sys 0.59.0",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -7513,7 +7513,7 @@ dependencies = [
|
|||
"getrandom 0.3.1",
|
||||
"once_cell",
|
||||
"rustix",
|
||||
"windows-sys 0.59.0",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -8487,7 +8487,7 @@ version = "0.1.9"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||
dependencies = [
|
||||
"windows-sys 0.59.0",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
BIN
docs/images/memory_tracer_plot.png
Normal file
BIN
docs/images/memory_tracer_plot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 93 KiB |
|
@ -105,6 +105,7 @@ foreach plugin_name: list_plugin_res.stdout().split(':')
|
|||
index: 'plugins/index.md',
|
||||
gst_index: 'plugins/index.md',
|
||||
include_paths: join_paths(meson.current_source_dir(), '..'),
|
||||
extra_assets: [join_paths(meson.current_source_dir(), 'images')],
|
||||
gst_smart_index: true,
|
||||
gst_c_source_filters: [
|
||||
'../target/*/*.rs',
|
||||
|
|
|
@ -12488,6 +12488,42 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"memory-tracer": {
|
||||
"hierarchy": [
|
||||
"GstMemoryTracer",
|
||||
"GstTracer",
|
||||
"GstObject",
|
||||
"GInitiallyUnowned",
|
||||
"GObject"
|
||||
],
|
||||
"properties": {
|
||||
"file": {
|
||||
"blurb": "Path to the file to write memory usage information",
|
||||
"conditionally-available": false,
|
||||
"construct": false,
|
||||
"construct-only": false,
|
||||
"controllable": false,
|
||||
"default": "NULL",
|
||||
"mutable": "null",
|
||||
"readable": false,
|
||||
"type": "gchararray",
|
||||
"writable": true
|
||||
}
|
||||
},
|
||||
"signals": {
|
||||
"write-log": {
|
||||
"action": true,
|
||||
"args": [
|
||||
{
|
||||
"name": "arg0",
|
||||
"type": "gchararray"
|
||||
}
|
||||
],
|
||||
"return-type": "void",
|
||||
"when": "last"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pad-push-timings": {
|
||||
"hierarchy": [
|
||||
"GstPadPushTimings",
|
||||
|
|
|
@ -35,6 +35,7 @@ static = []
|
|||
capi = []
|
||||
doc = ["gst/v1_18"]
|
||||
v1_22 = ["gst/v1_22"]
|
||||
v1_26 = ["gst/v1_26"]
|
||||
|
||||
[package.metadata.capi]
|
||||
min_version = "0.9.21"
|
||||
|
|
135
utils/tracers/scripts/memory_usage.py
Normal file
135
utils/tracers/scripts/memory_usage.py
Normal file
|
@ -0,0 +1,135 @@
|
|||
import sys
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import plotly.graph_objects as go
|
||||
from collections import defaultdict
|
||||
|
||||
|
||||
# Read the CSV file
|
||||
def parse_memory_data(csv_data):
|
||||
# Read only required columns and use dtype specifications for better performance
|
||||
df = pd.read_csv(
|
||||
csv_data,
|
||||
names=["timestamp", "operation", "pointer", "parent", "type", "size"],
|
||||
dtype={
|
||||
"timestamp": np.int64,
|
||||
"operation": str,
|
||||
"pointer": str,
|
||||
"parent": str,
|
||||
"type": str,
|
||||
"size": np.float64,
|
||||
},
|
||||
usecols=["timestamp", "operation", "pointer", "parent", "type", "size"],
|
||||
)
|
||||
|
||||
# Filter out entries with parents early
|
||||
df = df[df["parent"].apply(lambda x: int(x, 16) == 0)]
|
||||
|
||||
# Convert size to MB once
|
||||
df["size"] = df["size"] / (1024 * 1024)
|
||||
|
||||
# Sort by timestamp
|
||||
df = df.sort_values("timestamp")
|
||||
|
||||
# Initialize data structures
|
||||
memory_by_type = defaultdict(lambda: defaultdict(float))
|
||||
memory_values_by_type = defaultdict(list)
|
||||
|
||||
# Process in chunks for better memory usage
|
||||
chunk_size = 10000
|
||||
for chunk_start in range(0, len(df), chunk_size):
|
||||
chunk = df.iloc[chunk_start : chunk_start + chunk_size]
|
||||
|
||||
for _, row in chunk.iterrows():
|
||||
mem_type = row["type"]
|
||||
pointer = row["pointer"]
|
||||
timestamp = row["timestamp"] / 1000000000.0 # Convert to seconds
|
||||
|
||||
# Update memory tracking
|
||||
if row["operation"] == "alloc":
|
||||
memory_by_type[mem_type][pointer] = row["size"]
|
||||
elif pointer in memory_by_type[mem_type]:
|
||||
del memory_by_type[mem_type][pointer]
|
||||
|
||||
# Calculate metrics for this timestamp
|
||||
current_memory = sum(memory_by_type[mem_type].values())
|
||||
buffer_count = len(memory_by_type[mem_type])
|
||||
|
||||
extra_info = ""
|
||||
if row["operation"] == "alloc" or row["operation"] == "free":
|
||||
extra_info = f"{row['operation']}(0x{pointer}={row['size']:.3f}MB)"
|
||||
|
||||
memory_values_by_type[mem_type].append(
|
||||
(timestamp, current_memory, buffer_count, extra_info)
|
||||
)
|
||||
return memory_values_by_type
|
||||
|
||||
|
||||
def create_memory_graph(csv_data):
|
||||
memory_values_by_type = parse_memory_data(csv_data)
|
||||
|
||||
fig = go.Figure()
|
||||
|
||||
colors = {
|
||||
"SystemMemory": "blue",
|
||||
"GPU Memory": "red",
|
||||
"GLBuffer": "orange",
|
||||
"GLMemoryPBO": "darkorange",
|
||||
"GLRenderBuffer": "darkturquoise",
|
||||
"gst.cuda.memory": "green",
|
||||
"DMABuf": "purple",
|
||||
"fd": "magenta",
|
||||
"shm": "darkviolet",
|
||||
}
|
||||
|
||||
# Add traces for each memory type
|
||||
for mem_type, values in memory_values_by_type.items():
|
||||
color = colors.get(mem_type, "gray") # Default to gray for unknown types
|
||||
|
||||
decimation_factor = max(1, len(values) // 10000)
|
||||
|
||||
# Decimate the data points
|
||||
decimated_values = values[::decimation_factor]
|
||||
decimated_timestamps = [v[0] for v in decimated_values]
|
||||
memory_values = [v[1] for v in decimated_values] # Extract memory values
|
||||
buffer_counts = [v[2] for v in decimated_values] # Extract buffer counts
|
||||
extra_info = [v[3] for v in decimated_values] # Extract extra info
|
||||
extra_info = [v[2] for v in decimated_values] # Extract buffer counts
|
||||
|
||||
# Optimize hover text - only create it for visible points
|
||||
hover_text = [
|
||||
f"{mem_type}:<br>• Size: {mem:.2f}MB<br>• Buffers: {count}"
|
||||
for mem, count, _ in zip(memory_values, buffer_counts, extra_info)
|
||||
]
|
||||
|
||||
fig.add_trace(
|
||||
go.Scatter(
|
||||
x=decimated_timestamps,
|
||||
y=memory_values,
|
||||
mode="lines", # Removed markers for better performance
|
||||
name=f"{mem_type}",
|
||||
line=dict(color=color, width=2),
|
||||
hovertext=hover_text,
|
||||
hoverinfo="text",
|
||||
hovertemplate="%{hovertext}<extra></extra>", # Optimized hover template
|
||||
)
|
||||
)
|
||||
|
||||
# Customize the layout
|
||||
fig.update_layout(
|
||||
title="GStreamer Memory Usage Over Time",
|
||||
xaxis_title="Timestamp",
|
||||
yaxis_title="Memory Usage (MB)",
|
||||
hovermode="x unified",
|
||||
showlegend=True,
|
||||
template="plotly_white",
|
||||
yaxis=dict(rangemode="nonnegative"), # Ensure y-axis doesn't go below 0
|
||||
)
|
||||
|
||||
return fig
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
csv_data = sys.argv[1]
|
||||
fig = create_memory_graph(csv_data)
|
||||
fig.show()
|
|
@ -15,6 +15,8 @@
|
|||
use gst::glib;
|
||||
|
||||
mod buffer_lateness;
|
||||
#[cfg(feature = "v1_26")]
|
||||
mod memory_tracer;
|
||||
mod pad_push_timings;
|
||||
mod pcap_writer;
|
||||
#[cfg(unix)]
|
||||
|
@ -28,6 +30,8 @@ fn plugin_init(plugin: &gst::Plugin) -> Result<(), glib::BoolError> {
|
|||
buffer_lateness::register(plugin)?;
|
||||
pad_push_timings::register(plugin)?;
|
||||
pcap_writer::register(plugin)?;
|
||||
#[cfg(feature = "v1_26")]
|
||||
memory_tracer::register(plugin)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
236
utils/tracers/src/memory_tracer/imp.rs
Normal file
236
utils/tracers/src/memory_tracer/imp.rs
Normal file
|
@ -0,0 +1,236 @@
|
|||
// Copyright (C) 2024 Thibault Saunier <tsaunier@igalia.com>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public License, v2.0.
|
||||
// If a copy of the MPL was not distributed with this file, You can obtain one at
|
||||
// <https://mozilla.org/MPL/2.0/>.
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
/**
|
||||
* tracer-memory-tracer:
|
||||
*
|
||||
* This tracer provides an easy way to track memory allocations over time in a pipeline.
|
||||
*
|
||||
* ## Example:
|
||||
*
|
||||
* ### Log GstMemory allocation releases into the `tmp.memory.csv` file
|
||||
*
|
||||
* ```
|
||||
* # Dropping allocation query so we can see both the GLMemory and the SystemMemory on the graph
|
||||
*
|
||||
* $ GST_TRACERS="memory-tracer(file=tmp.memory.cvs)" gst-launch-1.0 videotestsrc num-buffers=30 ! identity drop-allocation=true ! glimagesink
|
||||
* ```
|
||||
*
|
||||
* ### lot memory usage per type
|
||||
*
|
||||
* ```
|
||||
* python3 utils/tracers/scripts/memory_usage.py tmp.memory.cvs
|
||||
* ```
|
||||
*
|
||||
* ### Result
|
||||
*
|
||||
* 
|
||||
*
|
||||
* Since: 0.14
|
||||
*/
|
||||
use gst::glib;
|
||||
use gst::glib::Properties;
|
||||
use gst::prelude::*;
|
||||
use gst::subclass::prelude::*;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::{LazyLock, Mutex};
|
||||
|
||||
static CAT: LazyLock<gst::DebugCategory> = LazyLock::new(|| {
|
||||
gst::DebugCategory::new(
|
||||
"memory-tracer",
|
||||
gst::DebugColorFlags::empty(),
|
||||
Some("Tracer to collect information about GStreamer memory allocations"),
|
||||
)
|
||||
});
|
||||
|
||||
struct MemoryEvent {
|
||||
timestamp: u64,
|
||||
ptr: usize,
|
||||
parent: usize,
|
||||
size: usize,
|
||||
is_alloc: bool,
|
||||
memory_type: &'static str,
|
||||
}
|
||||
|
||||
impl MemoryEvent {
|
||||
fn event_type(&self) -> &str {
|
||||
if self.is_alloc {
|
||||
"alloc"
|
||||
} else {
|
||||
"free"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Settings {
|
||||
file: PathBuf,
|
||||
}
|
||||
|
||||
impl Default for Settings {
|
||||
fn default() -> Self {
|
||||
let mut file = gst::glib::tmp_dir();
|
||||
file.push(format!("{:?}-memory_tracer.log", std::process::id()));
|
||||
Self { file }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct State {
|
||||
log: Vec<MemoryEvent>,
|
||||
logs_written: bool,
|
||||
}
|
||||
#[derive(Properties, Default)]
|
||||
#[properties(wrapper_type = super::MemoryTracer)]
|
||||
pub struct MemoryTracer {
|
||||
state: Mutex<State>,
|
||||
#[property(
|
||||
name="file",
|
||||
set = Self::set_file,
|
||||
type = String,
|
||||
blurb = "Path to the file to write memory usage information",
|
||||
)]
|
||||
settings: Mutex<Settings>,
|
||||
}
|
||||
|
||||
#[glib::object_subclass]
|
||||
impl ObjectSubclass for MemoryTracer {
|
||||
const NAME: &'static str = "GstMemoryTracer";
|
||||
type Type = super::MemoryTracer;
|
||||
type ParentType = gst::Tracer;
|
||||
}
|
||||
|
||||
impl MemoryTracer {
|
||||
fn set_file(&self, file: String) {
|
||||
let mut settings = self.settings.lock().unwrap();
|
||||
settings.file = PathBuf::from(file);
|
||||
}
|
||||
|
||||
fn write_log(&self, file_path: Option<String>) {
|
||||
use std::io::prelude::*;
|
||||
|
||||
let settings = self.settings.lock().unwrap();
|
||||
let mut file = match file_path.map_or_else(
|
||||
|| std::fs::File::create(&settings.file),
|
||||
|path| std::fs::File::create(PathBuf::from(path)),
|
||||
) {
|
||||
Ok(file) => file,
|
||||
Err(err) => {
|
||||
gst::error!(CAT, imp = self, "Failed to create file: {err}");
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
gst::info!(CAT, imp = self, "Writing file {:?}", file);
|
||||
|
||||
drop(settings);
|
||||
|
||||
let mut state = self.state.lock().unwrap();
|
||||
let log = std::mem::take(&mut state.log);
|
||||
state.logs_written = true;
|
||||
drop(state);
|
||||
|
||||
for event in &log {
|
||||
if let Err(err) = writeln!(
|
||||
&mut file,
|
||||
"{},{},{},0x{:08x},{:?},{}",
|
||||
event.timestamp,
|
||||
event.event_type(),
|
||||
event.ptr,
|
||||
event.parent,
|
||||
event.memory_type,
|
||||
event.size
|
||||
) {
|
||||
gst::error!(CAT, imp = self, "Failed to write to file: {err}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[glib::derived_properties]
|
||||
impl ObjectImpl for MemoryTracer {
|
||||
fn signals() -> &'static [glib::subclass::Signal] {
|
||||
static SIGNALS: LazyLock<Vec<glib::subclass::Signal>> = LazyLock::new(|| {
|
||||
vec![glib::subclass::Signal::builder("write-log")
|
||||
.action()
|
||||
.param_types([Option::<String>::static_type()])
|
||||
.class_handler(|args| {
|
||||
let obj = args[0].get::<super::MemoryTracer>().unwrap();
|
||||
let file = args[1].get::<Option<String>>().unwrap();
|
||||
|
||||
obj.imp().write_log(file);
|
||||
|
||||
None
|
||||
})
|
||||
.build()]
|
||||
});
|
||||
|
||||
SIGNALS.as_ref()
|
||||
}
|
||||
|
||||
fn constructed(&self) {
|
||||
self.parent_constructed();
|
||||
|
||||
self.register_hook(TracerHook::MemoryInit);
|
||||
self.register_hook(TracerHook::MemoryFreePre);
|
||||
}
|
||||
|
||||
fn dispose(&self) {
|
||||
if self.state.lock().unwrap().logs_written {
|
||||
gst::info!(
|
||||
CAT,
|
||||
"Logs were written manually, not overwriting on dispose"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
self.write_log(None);
|
||||
}
|
||||
}
|
||||
|
||||
impl TracerImpl for MemoryTracer {
|
||||
const USE_STRUCTURE_PARAMS: bool = true;
|
||||
|
||||
fn memory_init(&self, ts: u64, memory: &gst::MemoryRefTrace) {
|
||||
let mut state = self.state.lock().unwrap();
|
||||
let size = memory.maxsize();
|
||||
let ptr = memory.as_ptr() as usize;
|
||||
|
||||
let parent = memory.parent().map_or(0_usize, |p| p.as_ptr() as usize);
|
||||
|
||||
state.log.push(MemoryEvent {
|
||||
timestamp: ts,
|
||||
ptr,
|
||||
parent,
|
||||
is_alloc: true,
|
||||
memory_type: memory
|
||||
.allocator()
|
||||
.map_or("unknown", |alloc| alloc.memory_type()),
|
||||
size,
|
||||
});
|
||||
}
|
||||
|
||||
fn memory_free_pre(&self, ts: u64, memory: &gst::MemoryRef) {
|
||||
let mut state = self.state.lock().unwrap();
|
||||
let ptr = memory.as_ptr() as usize;
|
||||
|
||||
let parent = memory.parent().map_or(0_usize, |p| p.as_ptr() as usize);
|
||||
state.log.push(MemoryEvent {
|
||||
timestamp: ts,
|
||||
parent,
|
||||
ptr,
|
||||
is_alloc: false,
|
||||
memory_type: memory
|
||||
.allocator()
|
||||
.map_or("unknown", |alloc| alloc.memory_type()),
|
||||
size: memory.maxsize(),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl GstObjectImpl for MemoryTracer {}
|
20
utils/tracers/src/memory_tracer/mod.rs
Normal file
20
utils/tracers/src/memory_tracer/mod.rs
Normal file
|
@ -0,0 +1,20 @@
|
|||
// Copyright (C) 2025 Thibault Saunier <tsaunier@igalia.com>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public License, v2.0.
|
||||
// If a copy of the MPL was not distributed with this file, You can obtain one at
|
||||
// <https://mozilla.org/MPL/2.0/>.
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
use gst::glib;
|
||||
use gst::prelude::*;
|
||||
|
||||
mod imp;
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct MemoryTracer(ObjectSubclass<imp::MemoryTracer>) @extends gst::Tracer, gst::Object;
|
||||
}
|
||||
|
||||
pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> {
|
||||
gst::Tracer::register(Some(plugin), "memory-tracer", MemoryTracer::static_type())
|
||||
}
|
Loading…
Reference in a new issue