code: def add_hookcall_monitoring(self, before, after):
          
          return _tracing._TracedHookExecution(self, before, after).undo
docs: add before/after tracing functions for all hooks
          and return an undo function which, when called,
          will remove the added tracers.
  
          ``before(hook_name, hook_impls, kwargs)`` will be called ahead
          of all hook calls and receive a hookcaller instance, a list
          of HookImpl instances and the keyword arguments for the hook call.
  
          ``after(outcome, hook_name, hook_impls, kwargs)`` receives the
          same arguments as ``before`` but also a :py:class:`_Result`` object
          which represents the result of the overall hook call.