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