File 2189-kernel-esock-test-Benchmarkify-the-socket-ttest-test.patch of Package erlang

From febdaac66247c718f417c804d65f4c516981ccd4 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Wed, 9 Apr 2025 14:37:43 +0200
Subject: [PATCH 09/10] [kernel|esock|test] Benchmarkify the socket ttest
 test-suite

---
 lib/kernel/test/socket_ttest_SUITE.erl | 102 +++++++++++++++++++++----
 1 file changed, 88 insertions(+), 14 deletions(-)

diff --git a/lib/kernel/test/socket_ttest_SUITE.erl b/lib/kernel/test/socket_ttest_SUITE.erl
index 8ca63f9e28..2436e5823c 100644
--- a/lib/kernel/test/socket_ttest_SUITE.erl
+++ b/lib/kernel/test/socket_ttest_SUITE.erl
@@ -6864,7 +6864,7 @@ ttest_tcp(TC,
                                  client_mod      => ClientMod,
                                  client_active   => ClientActive,
 				 remote          => Remote},
-                   ok = ttest_tcp(InitState)
+                   ttest_tcp(InitState)
            end).
 
 
@@ -7336,7 +7336,8 @@ ttest_tcp(InitState) ->
          
          %% Present the results
          #{desc => "present the results",
-           cmd  => fun(#{result        := Result,
+           cmd  => fun(#{ctrl          := CTRL,
+                         result        := Result,
                          domain        := Domain,
                          server_mod    := ServerTrans,
                          server_active := ServerActive,
@@ -7375,6 +7376,17 @@ ttest_tcp(InitState) ->
                                                                  [Cnt, Cnt div RunTime])
                                        end
                                       ]),
+                                   if ((BCnt > 0) andalso (RunTime > 0)) ->
+                                           ?SEV_IPRINT("send short form results to CTRL (~p)", [CTRL]),
+                                           CTRL ! {self(), {BCnt div RunTime,
+                                                            Cnt div RunTime}};
+                                      true ->
+                                           ?SEV_IPRINT("no proper result: "
+                                                       "~n   RunTime: ~p"
+                                                       "~n   BCnt:    ~p"
+                                                       "~n   Cnt:     ~p",
+                                                       [RunTime, BCnt, Cnt])
+                                   end,
                                    {ok, maps:remove(result, State)};
 
                                #{status  := Failure,
@@ -7436,7 +7448,8 @@ ttest_tcp(InitState) ->
     Client          = ?SEV_START("client", ClientSeq, ClientInitState),
     
     i("start 'tester' evaluator"),
-    TesterInitState = #{domain        => Domain,
+    TesterInitState = #{ctrl          => self(),
+                        domain        => Domain,
 			msg_id        => maps:get(msg_id,        InitState),
                         client        => Client#ev.pid,
 			client_mod    => maps:get(client_mod,    InitState),
@@ -7444,10 +7457,17 @@ ttest_tcp(InitState) ->
                         server        => Server#ev.pid,
                         server_mod    => maps:get(server_mod,    InitState),
                         server_active => maps:get(server_active, InitState)},
-    Tester = ?SEV_START("tester", TesterSeq, TesterInitState),
+    #ev{pid = TesterPid} = Tester =
+        ?SEV_START("tester", TesterSeq, TesterInitState),
 
     i("await evaluator(s)"),
-    ok = ?SEV_AWAIT_FINISH([Server, Client, Tester]).
+    ok = ?SEV_AWAIT_FINISH([Server, Client, Tester]),
+    receive
+        {TesterPid, {BCnt, MCnt}} ->
+            {comment, ?F("~w b/ms, ~w iter/ms", [BCnt, MCnt])}
+    after 0 ->
+            {comment, "-"}
+    end.
 
 
 
@@ -7526,13 +7546,15 @@ ttest_tcp_client_start(Node,
                        bytes :: non_neg_integer(),
                        msgs  :: non_neg_integer()}).
 
--spec ttest_report(Domain      :: socket:domain(),
-                   ServTrans   :: gen | sock, ServActive   :: once | boolean(),
-                   ClientTrans :: gen | sock, ClientActive :: once | boolean(),
-                   MsgID       :: 1 | 2 | 3,
-                   RunTime     :: non_neg_integer(),
-                   NumBytes    :: non_neg_integer(),
-                   NumMsgs     :: non_neg_integer()) -> ok.
+-spec ttest_report(Domain       :: socket:domain(),
+                   ServTrans    :: gen | gs | sock,
+                   ServActive   :: once | boolean(),
+                   ClientTrans  :: gen | gs | sock,
+                   ClientActive :: once | boolean(),
+                   MsgID        :: 1 | 2 | 3,
+                   RunTime      :: non_neg_integer(),
+                   NumBytes     :: non_neg_integer(),
+                   NumMsgs      :: non_neg_integer()) -> ok.
 
 ttest_report(Domain,
              ServTrans,   ServActive,
@@ -7608,9 +7630,24 @@ ttest_manager_loop() ->
             ttest_manager_done();
 
         #ttest_report{id    = ID,
-                      time  = _RunTime,
-                      bytes = _NumBytes,
+                      time  = RunTime,
+                      bytes = NumBytes,
                       msgs  = _NumMsgs} = Report ->
+            %% ?LOGGER:format("received (ttest) report:"
+            %%                "~n   ID: ~p"
+            %%                "~n      RunTime:   ~p"
+            %%                "~n      Num Bytes: ~p"
+            %%                "~n      Num Msgs:  ~p"
+            %%                "~n", [ID, RunTime, NumBytes, _NumMsgs]),
+            Event = #event{
+                       name = format_ttest_report_id(ID),
+                       data = [{suite, atom_to_list(?MODULE)},
+                               {value, format_ttest_report_value(RunTime,
+                                                                 NumBytes)}]},
+            %% ?LOGGER:format("send CT event:"
+            %%                "~n   ~p"
+            %%                "~n", [Event]),
+            ct_event:notify(Event),
             %% true = ets:insert_new(?TTEST_MANAGER, Report),
             %% ttest_manager_loop()
             case ets:insert_new(?TTEST_MANAGER, Report) of
@@ -7627,6 +7664,43 @@ ttest_manager_loop() ->
 	    end
     end.
 
+format_ttest_report_id(#ttest_report_id{domain        = Domain,
+                                        serv_trans    = STrans,
+                                        serv_active   = SActive,
+                                        client_trans  = CTrans,
+                                        client_active = CActive,
+                                        msg_id        = MsgID}) ->
+    EventNameStr = ?F("server:~w:~w_client:~w:~w_~w_~w",
+                      [format_ttest_report_id_trans(STrans),
+                       format_ttest_report_id_active(SActive),
+                       format_ttest_report_id_trans(CTrans),
+                       format_ttest_report_id_active(CActive),
+                       format_ttest_report_id_domain(Domain),
+                       format_ttest_report_id_msg_id(MsgID)]),
+    list_to_atom(EventNameStr).
+    
+format_ttest_report_id_trans(gen)  -> g;
+format_ttest_report_id_trans(gs)   -> gs;
+format_ttest_report_id_trans(sock) -> s.
+
+format_ttest_report_id_active(once)  -> o;
+format_ttest_report_id_active(true)  -> t;
+format_ttest_report_id_active(false) -> f.
+
+format_ttest_report_id_domain(D) -> D.
+
+format_ttest_report_id_msg_id(ID) -> ID.
+
+format_ttest_report_value(RunTime, NumBytes)
+  when (RunTime > 0) andalso (NumBytes > 0) ->
+    NumBytes div RunTime;
+format_ttest_report_value(RunTime, _) when (RunTime > 0) ->
+    -1;
+format_ttest_report_value(_, _) ->
+    -2.
+
+
+
 %% We are supposed to pretty print the result here...
 ttest_manager_done() ->
     format_reports(inet),
-- 
2.43.0

openSUSE Build Service is sponsored by