Skip to content

Commit

Permalink
perf: add timing ctxmgr for logging duration of a block
Browse files Browse the repository at this point in the history
  • Loading branch information
williballenthin committed Nov 27, 2024
1 parent 20909c1 commit 999f91b
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions capa/perf.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and limitations under the License.
import time
import inspect
import contextlib
import collections

# this structure is unstable and may change before the next major release.
Expand All @@ -14,3 +17,20 @@
def reset():
global counters
counters = collections.Counter()


@contextlib.contextmanager
def timing(msg: str):
"""log the given message start/stop and time taken, using the caller's `logger` instance."""
# stack:
# 0: here
# 1: contextlib
# 2: caller
caller = inspect.stack()[2]
caller_logger = caller.frame.f_globals.get("logger")

caller_logger.debug("%s...", msg)
t0 = time.time()
yield
t1 = time.time()
caller_logger.debug("%s done in %0.1fs.", msg, t1 - t0)

0 comments on commit 999f91b

Please sign in to comment.