diff --git a/python/dune/perftool/generation/__init__.py b/python/dune/perftool/generation/__init__.py index e541e71366371039157cb757201f710ffd0a19ca..d2712471e4cff347b37a9a5f5452e2a34a4feb72 100644 --- a/python/dune/perftool/generation/__init__.py +++ b/python/dune/perftool/generation/__init__.py @@ -31,6 +31,10 @@ from dune.perftool.generation.cpp import (base_class, template_parameter, ) +from dune.perftool.generation.hooks import (register_hook, + run_hook, + ) + from dune.perftool.generation.loopy import (barrier, constantarg, domain, diff --git a/python/dune/perftool/generation/hooks.py b/python/dune/perftool/generation/hooks.py new file mode 100644 index 0000000000000000000000000000000000000000..bd3fc0a137c3ab401dc744a55e1e3bbed8d03fb9 --- /dev/null +++ b/python/dune/perftool/generation/hooks.py @@ -0,0 +1,16 @@ +""" All the infrastructure code related to adding hooks to the code generation process """ + + +_hooks = {} + + +def register_hook(hookname, func): + current = _hooks.setdefault(hookname, ()) + current = list(current) + current.append(func) + _hooks[hookname] = tuple(current) + + +def run_hook(hookname, *args, **kwargs): + for hook in _hooks[hookname]: + hook(*args, **kwargs) diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index 1f808ef1c90f4b358b60d6f4744a2322a726e055..f5ac0b8db07da66e21fe4c3dcc53c08610c2084b 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -28,6 +28,7 @@ from dune.perftool.generation import (backend, post_include, retrieve_cache_functions, retrieve_cache_items, + run_hook, template_parameter, ) from dune.perftool.cgen.clazz import (AccessModifier, @@ -452,6 +453,8 @@ def visit_integral(integral): visitor = get_visitor(measure, subdomain_id) visitor.accumulate(integrand) + run_hook("after_visit", visitor) + def generate_kernel(integrals): logger = logging.getLogger(__name__)