From a5c97ac6780959ac7defad0d97b0f77f4f15f0c8 Mon Sep 17 00:00:00 2001 From: Kamil Waz Date: Tue, 11 Oct 2022 10:14:49 +0200 Subject: [PATCH] Optimize send_element/3 --- src/c2s/mongoose_c2s.erl | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/c2s/mongoose_c2s.erl b/src/c2s/mongoose_c2s.erl index 70145f6c527..ace7c106ed9 100644 --- a/src/c2s/mongoose_c2s.erl +++ b/src/c2s/mongoose_c2s.erl @@ -217,7 +217,7 @@ activate_socket(#c2s_data{socket = Socket}) -> -spec send_text(c2s_data(), iodata()) -> ok | {error, term()}. send_text(#c2s_data{socket = Socket}, Text) -> - mongoose_metrics:update(global, [data, xmpp, sent, xml_stanza_size], size(Text)), + mongoose_metrics:update(global, [data, xmpp, sent, xml_stanza_size], iolist_size(Text)), mongoose_c2s_socket:send_text(Socket, Text). -spec filter_mechanism(c2s_data(), binary()) -> boolean(). @@ -711,10 +711,10 @@ maybe_send_xml(_StateData, _Acc, []) -> ok; maybe_send_xml(StateData = #c2s_data{host_type = HostType, lserver = LServer}, undefined, ToSend) -> Acc = mongoose_acc:new(#{host_type => HostType, lserver => LServer, location => ?LOCATION}), - [send_element(StateData, El, Acc) || El <- ToSend], + send_element(StateData, ToSend, Acc), ok; maybe_send_xml(StateData, Acc, ToSend) -> - [send_element(StateData, El, Acc) || El <- ToSend], + send_element(StateData, ToSend, Acc), ok. -spec maybe_deliver(c2s_data(), gen_hook:hook_fn_ret(mongoose_acc:t())) -> mongoose_acc:t(). @@ -833,14 +833,16 @@ sm_unset_reason(_) -> error. %% @doc This is the termination point - from here stanza is sent to the user --spec send_element(c2s_data(), exml:element(), mongoose_acc:t()) -> mongoose_acc:t(). +-spec send_element(c2s_data(), [exml:element()] | exml:element(), mongoose_acc:t()) -> mongoose_acc:t(). send_element(StateData = #c2s_data{host_type = <<>>}, El, Acc) -> send_xml(StateData, El), Acc; -send_element(StateData = #c2s_data{host_type = HostType}, El, Acc) -> - Res = send_xml(StateData, El), +send_element(StateData = #c2s_data{host_type = HostType}, Els, Acc) when is_list(Els) -> + Res = send_xml(StateData, Els), Acc1 = mongoose_acc:set(c2s, send_result, Res, Acc), - mongoose_hooks:xmpp_send_element(HostType, Acc1, El). + [mongoose_hooks:xmpp_send_element(HostType, Acc1, El) || El <- Els]; +send_element(StateData, El, Acc) -> + send_element(StateData, [El], Acc). -spec send_xml(c2s_data(), exml_stream:element() | [exml_stream:element()]) -> maybe_ok(). send_xml(StateData, Xml) ->