@@ -14,6 +14,7 @@ defmodule Membrane.Core.Element.InputQueue do
1414 alias Membrane.Pad
1515 alias Membrane.StreamFormat
1616
17+ require Membrane.Core.Stalker , as: Stalker
1718 require Membrane.Core.Telemetry , as: Telemetry
1819 require Membrane.Logger
1920
@@ -35,8 +36,9 @@ defmodule Membrane.Core.Element.InputQueue do
3536 demand: non_neg_integer ( ) ,
3637 inbound_metric: module ( ) ,
3738 outbound_metric: module ( ) ,
38- linked_output_ref: Pad . ref ( ) ,
39- atomic_demand: AtomicDemand . t ( )
39+ pad_ref: Pad . ref ( ) ,
40+ atomic_demand: AtomicDemand . t ( ) ,
41+ stalker_metrics: % { atom ( ) => any ( ) }
4042 }
4143
4244 @ enforce_keys [
@@ -46,7 +48,8 @@ defmodule Membrane.Core.Element.InputQueue do
4648 :atomic_demand ,
4749 :inbound_metric ,
4850 :outbound_metric ,
49- :linked_output_ref
51+ :pad_ref ,
52+ :stalker_metrics
5053 ]
5154
5255 defstruct @ enforce_keys ++ [ size: 0 , demand: 0 ]
@@ -60,7 +63,7 @@ defmodule Membrane.Core.Element.InputQueue do
6063 inbound_demand_unit: Buffer.Metric . unit ( ) ,
6164 outbound_demand_unit: Buffer.Metric . unit ( ) ,
6265 atomic_demand: AtomicDemand . t ( ) ,
63- linked_output_ref : Pad . ref ( ) ,
66+ pad_ref : Pad . ref ( ) ,
6467 log_tag: String . t ( ) ,
6568 target_size: pos_integer ( ) | nil
6669 } ) :: t ( )
@@ -69,7 +72,7 @@ defmodule Membrane.Core.Element.InputQueue do
6972 inbound_demand_unit: inbound_demand_unit ,
7073 outbound_demand_unit: outbound_demand_unit ,
7174 atomic_demand: atomic_demand ,
72- linked_output_ref: linked_output_ref ,
75+ pad_ref: pad_ref ,
7376 log_tag: log_tag ,
7477 target_size: target_size
7578 } = config
@@ -81,14 +84,23 @@ defmodule Membrane.Core.Element.InputQueue do
8184
8285 target_size = target_size || default_target_size
8386
87+ size_metric = :atomics . new ( 1 , [ ] )
88+
89+ Stalker . register_metric_function (
90+ :input_queue_size ,
91+ fn -> :atomics . get ( size_metric , 1 ) end ,
92+ pad: pad_ref
93+ )
94+
8495 % __MODULE__ {
8596 q: @ qe . new ( ) ,
8697 log_tag: log_tag ,
8798 target_size: target_size ,
8899 inbound_metric: inbound_metric ,
89100 outbound_metric: outbound_metric ,
90101 atomic_demand: atomic_demand ,
91- linked_output_ref: linked_output_ref
102+ pad_ref: pad_ref ,
103+ stalker_metrics: % { size: size_metric }
92104 }
93105 |> maybe_increase_atomic_demand ( )
94106 end
@@ -97,7 +109,8 @@ defmodule Membrane.Core.Element.InputQueue do
97109 def store ( input_queue , type \\ :buffers , v )
98110
99111 def store ( input_queue , :buffers , v ) when is_list ( v ) do
100- % __MODULE__ { size: size , target_size: target_size } = input_queue
112+ % __MODULE__ { size: size , target_size: target_size , stalker_metrics: stalker_metrics } =
113+ input_queue
101114
102115 if size >= target_size do
103116 """
@@ -111,6 +124,7 @@ defmodule Membrane.Core.Element.InputQueue do
111124 % __MODULE__ { size: size } = input_queue = do_store_buffers ( input_queue , v )
112125
113126 Telemetry . report_metric ( :store , size , input_queue . log_tag )
127+ :atomics . put ( stalker_metrics . size , 1 , size )
114128
115129 input_queue
116130 end
@@ -160,7 +174,9 @@ defmodule Membrane.Core.Element.InputQueue do
160174 { out , input_queue } = do_take ( input_queue , count )
161175 input_queue = maybe_increase_atomic_demand ( input_queue )
162176
163- Telemetry . report_metric ( :take , input_queue . size , input_queue . log_tag )
177+ % { size: size , stalker_metrics: stalker_metrics } = input_queue
178+ Telemetry . report_metric ( :take , size , input_queue . log_tag )
179+ :atomics . put ( stalker_metrics . size , 1 , size )
164180
165181 { out , input_queue }
166182 end
@@ -286,7 +302,7 @@ defmodule Membrane.Core.Element.InputQueue do
286302 diff = max ( target_size - size - demand , div ( target_size , 2 ) )
287303
288304 """
289- Increasing AtomicDemand linked to #{ inspect ( input_queue . linked_output_ref ) } by #{ inspect ( diff ) }
305+ Increasing AtomicDemand for pad #{ inspect ( input_queue . pad_ref ) } by #{ inspect ( diff ) }
290306 """
291307 |> mk_log ( input_queue )
292308 |> Membrane.Logger . debug_verbose ( )
0 commit comments