util.profiler: add "min_threshold" arg
This commit is contained in:
@@ -35,6 +35,7 @@ from electrum.i18n import _
|
|||||||
from electrum.bitcoin import is_address
|
from electrum.bitcoin import is_address
|
||||||
from electrum.transaction import PartialTxInput, PartialTxOutput
|
from electrum.transaction import PartialTxInput, PartialTxOutput
|
||||||
from electrum.lnutil import LN_MAX_FUNDING_SAT, MIN_FUNDING_SAT
|
from electrum.lnutil import LN_MAX_FUNDING_SAT, MIN_FUNDING_SAT
|
||||||
|
from electrum.util import profiler
|
||||||
|
|
||||||
from .util import ColorScheme, MONOSPACE_FONT, EnterButton
|
from .util import ColorScheme, MONOSPACE_FONT, EnterButton
|
||||||
from .my_treeview import MyTreeView
|
from .my_treeview import MyTreeView
|
||||||
@@ -87,6 +88,7 @@ class UTXOList(MyTreeView):
|
|||||||
menu.addAction(_('Coin control'), lambda: self.add_selection_to_coincontrol())
|
menu.addAction(_('Coin control'), lambda: self.add_selection_to_coincontrol())
|
||||||
return toolbar
|
return toolbar
|
||||||
|
|
||||||
|
@profiler(min_threshold=0.05)
|
||||||
def update(self):
|
def update(self):
|
||||||
# not calling maybe_defer_update() as it interferes with coincontrol status bar
|
# not calling maybe_defer_update() as it interferes with coincontrol status bar
|
||||||
utxos = self.wallet.get_utxos()
|
utxos = self.wallet.get_utxos()
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ from ipaddress import IPv4Address, IPv6Address
|
|||||||
import random
|
import random
|
||||||
import secrets
|
import secrets
|
||||||
import functools
|
import functools
|
||||||
|
from functools import partial
|
||||||
from abc import abstractmethod, ABC
|
from abc import abstractmethod, ABC
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
@@ -449,15 +450,22 @@ def constant_time_compare(val1, val2):
|
|||||||
return hmac.compare_digest(to_bytes(val1, 'utf8'), to_bytes(val2, 'utf8'))
|
return hmac.compare_digest(to_bytes(val1, 'utf8'), to_bytes(val2, 'utf8'))
|
||||||
|
|
||||||
|
|
||||||
# decorator that prints execution time
|
|
||||||
_profiler_logger = _logger.getChild('profiler')
|
_profiler_logger = _logger.getChild('profiler')
|
||||||
def profiler(func):
|
def profiler(func=None, *, min_threshold: Union[int, float, None] = None):
|
||||||
|
"""Function decorator that logs execution time.
|
||||||
|
|
||||||
|
min_threshold: if set, only log if time taken is higher than threshold
|
||||||
|
NOTE: does not work with async methods.
|
||||||
|
"""
|
||||||
|
if func is None:
|
||||||
|
return partial(profiler, min_threshold=min_threshold)
|
||||||
def do_profile(args, kw_args):
|
def do_profile(args, kw_args):
|
||||||
name = func.__qualname__
|
name = func.__qualname__
|
||||||
t0 = time.time()
|
t0 = time.time()
|
||||||
o = func(*args, **kw_args)
|
o = func(*args, **kw_args)
|
||||||
t = time.time() - t0
|
t = time.time() - t0
|
||||||
_profiler_logger.debug(f"{name} {t:,.4f} sec")
|
if min_threshold is None or t > min_threshold:
|
||||||
|
_profiler_logger.debug(f"{name} {t:,.4f} sec")
|
||||||
return o
|
return o
|
||||||
return lambda *args, **kw_args: do_profile(args, kw_args)
|
return lambda *args, **kw_args: do_profile(args, kw_args)
|
||||||
|
|
||||||
|
|||||||
@@ -1657,6 +1657,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@profiler(min_threshold=0.1)
|
||||||
def make_unsigned_transaction(
|
def make_unsigned_transaction(
|
||||||
self, *,
|
self, *,
|
||||||
coins: Sequence[PartialTxInput],
|
coins: Sequence[PartialTxInput],
|
||||||
|
|||||||
Reference in New Issue
Block a user