File 2791-logger-Speed-up-level-check-in-logger_config-allow.patch of Package erlang

From 4c65c088cdf433f73bf044fa4e0564a459c04593 Mon Sep 17 00:00:00 2001
From: Hans Bolinder <hasse@erlang.org>
Date: Tue, 2 Jul 2019 15:47:04 +0200
Subject: [PATCH 1/7] logger: Speed up level check in logger_config:allow

---
 lib/kernel/src/logger.erl        |  2 +-
 lib/kernel/src/logger_config.erl | 18 ++++++++++++++----
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/lib/kernel/src/logger.erl b/lib/kernel/src/logger.erl
index fd02cf67bf..0162a2fac6 100644
--- a/lib/kernel/src/logger.erl
+++ b/lib/kernel/src/logger.erl
@@ -256,7 +256,7 @@ log(Level, FunOrFormat, Args, Metadata) ->
 -spec allow(Level,Module) -> boolean() when
       Level :: level(),
       Module :: module().
-allow(Level,Module) when ?IS_LEVEL(Level), is_atom(Module) ->
+allow(Level,Module) when is_atom(Module) ->
     logger_config:allow(?LOGGER_TABLE,Level,Module).
 
 
diff --git a/lib/kernel/src/logger_config.erl b/lib/kernel/src/logger_config.erl
index 5024d20cfe..e143148267 100644
--- a/lib/kernel/src/logger_config.erl
+++ b/lib/kernel/src/logger_config.erl
@@ -39,15 +39,16 @@ new(Name) ->
 delete(Tid,Id) ->
     ets:delete(Tid,table_key(Id)).
 
+%% Optimized for speed.
 allow(Tid,Level,Module) ->
     LevelInt = level_to_int(Level),
     case ets:lookup(Tid,Module) of
         [{Module,{ModLevel,cached}}] when is_integer(ModLevel),
                                           LevelInt =< ModLevel ->
-            true;
+            less_or_equal_level(Level,ModLevel);
         [{Module,ModLevel}] when is_integer(ModLevel),
                                  LevelInt =< ModLevel ->
-            true;
+            less_or_equal_level(Level,ModLevel);
         [] ->
             logger_server:cache_module_level(Module),
             allow(Tid,Level);
@@ -56,8 +57,17 @@ allow(Tid,Level,Module) ->
     end.
 
 allow(Tid,Level) ->
-    GlobalLevelInt = ets:lookup_element(Tid,?PRIMARY_KEY,2),
-    level_to_int(Level) =< GlobalLevelInt.
+    PrimaryLevelInt = ets:lookup_element(Tid,?PRIMARY_KEY,2),
+    less_or_equal_level(Level,PrimaryLevelInt).
+
+less_or_equal_level(emergency,ModLevel) -> ?EMERGENCY =< ModLevel;
+less_or_equal_level(alert,ModLevel) -> ?ALERT =< ModLevel;
+less_or_equal_level(critical,ModLevel) -> ?CRITICAL =< ModLevel;
+less_or_equal_level(error,ModLevel) -> ?ERROR =< ModLevel;
+less_or_equal_level(warning,ModLevel) -> ?WARNING =< ModLevel;
+less_or_equal_level(notice,ModLevel) -> ?NOTICE =< ModLevel;
+less_or_equal_level(info,ModLevel) -> ?INFO =< ModLevel;
+less_or_equal_level(debug,ModLevel) -> ?DEBUG =< ModLevel.
 
 exist(Tid,What) ->
     ets:member(Tid,table_key(What)).
-- 
2.16.4

openSUSE Build Service is sponsored by