Skip to content

Commit 185768a

Browse files
committed
Restore and deprecate old metric impelmentations
1 parent 81eaed9 commit 185768a

2 files changed

Lines changed: 126 additions & 0 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
defmodule Membrane.Buffer.Metric.ByteSize do
2+
@moduledoc """
3+
Implementation of `Membrane.Buffer.Metric` for the `:bytes` unit.
4+
5+
> #### Deprecated {: .warning}
6+
> This module is deprecated. Use `Membrane.Core.Metric` functions with `:bytes` as the
7+
> `demand_unit` argument instead.
8+
"""
9+
10+
@behaviour Membrane.Buffer.Metric
11+
12+
require Membrane.Logger
13+
14+
alias Membrane.{Buffer, Payload}
15+
16+
@impl true
17+
def buffer_size_approximation() do
18+
ensure_deprecated_warning_printed()
19+
1500
20+
end
21+
22+
@impl true
23+
def init_manual_demand_size() do
24+
ensure_deprecated_warning_printed()
25+
0
26+
end
27+
28+
@impl true
29+
def buffers_size(buffers) do
30+
ensure_deprecated_warning_printed()
31+
32+
buffers
33+
|> Enum.reduce(0, fn %Buffer{payload: p}, acc -> acc + Payload.size(p) end)
34+
|> then(&{:ok, &1})
35+
end
36+
37+
@impl true
38+
def split_buffers(buffers, count, _first_consumed_buffer, _last_consumed_buffer) do
39+
ensure_deprecated_warning_printed()
40+
do_split_buffers(buffers, count, [])
41+
end
42+
43+
@impl true
44+
def reduce_demand(demand, consumed) do
45+
ensure_deprecated_warning_printed()
46+
demand - consumed
47+
end
48+
49+
defp ensure_deprecated_warning_printed() do
50+
if Process.get({__MODULE__, :deprecated_warned}) == nil do
51+
Membrane.Logger.warning(
52+
"#{__MODULE__} is deprecated. Use Membrane.Core.Metric with :bytes demand_unit instead."
53+
)
54+
55+
Process.put({__MODULE__, :deprecated_warned}, true)
56+
end
57+
end
58+
59+
defp do_split_buffers(buffers, at_pos, acc) when at_pos == 0 or buffers == [] do
60+
{acc |> Enum.reverse(), buffers}
61+
end
62+
63+
defp do_split_buffers([%Buffer{payload: p} = buf | rest], at_pos, acc) when at_pos > 0 do
64+
if at_pos < Payload.size(p) do
65+
{p1, p2} = Payload.split_at(p, at_pos)
66+
acc = [%Buffer{buf | payload: p1} | acc] |> Enum.reverse()
67+
rest = [%Buffer{buf | payload: p2} | rest]
68+
{acc, rest}
69+
else
70+
do_split_buffers(rest, at_pos - Payload.size(p), [buf | acc])
71+
end
72+
end
73+
end
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
defmodule Membrane.Buffer.Metric.Count do
2+
@moduledoc """
3+
Implementation of `Membrane.Buffer.Metric` for the `:buffers` unit.
4+
5+
> #### Deprecated {: .warning}
6+
> This module is deprecated. Use `Membrane.Core.Metric` functions with `:buffers` as the
7+
> `demand_unit` argument instead.
8+
"""
9+
10+
@behaviour Membrane.Buffer.Metric
11+
12+
require Membrane.Logger
13+
14+
@impl true
15+
def buffer_size_approximation() do
16+
ensure_deprecated_warning_printed()
17+
1
18+
end
19+
20+
@impl true
21+
def init_manual_demand_size() do
22+
ensure_deprecated_warning_printed()
23+
0
24+
end
25+
26+
@impl true
27+
def buffers_size(buffers) do
28+
ensure_deprecated_warning_printed()
29+
{:ok, length(buffers)}
30+
end
31+
32+
@impl true
33+
def split_buffers(buffers, count, _first_consumed_buffer, _last_consumed_buffer) do
34+
ensure_deprecated_warning_printed()
35+
Enum.split(buffers, count)
36+
end
37+
38+
@impl true
39+
def reduce_demand(demand, consumed) do
40+
ensure_deprecated_warning_printed()
41+
demand - consumed
42+
end
43+
44+
defp ensure_deprecated_warning_printed() do
45+
if Process.get({__MODULE__, :deprecated_warned}) == nil do
46+
Membrane.Logger.warning(
47+
"#{__MODULE__} is deprecated. Use Membrane.Core.Metric with :buffers demand_unit instead."
48+
)
49+
50+
Process.put({__MODULE__, :deprecated_warned}, true)
51+
end
52+
end
53+
end

0 commit comments

Comments
 (0)