Update Files
This commit is contained in:
41
leenkx/blender/lnx/profiler.py
Normal file
41
leenkx/blender/lnx/profiler.py
Normal file
@ -0,0 +1,41 @@
|
||||
import cProfile
|
||||
import os
|
||||
import pstats
|
||||
|
||||
import lnx
|
||||
from lnx import log, utils
|
||||
|
||||
if lnx.is_reload(__name__):
|
||||
log = lnx.reload_module(log)
|
||||
utils = lnx.reload_module(utils)
|
||||
else:
|
||||
lnx.enable_reload(__name__)
|
||||
|
||||
|
||||
class Profile:
|
||||
"""Context manager for profiling the enclosed code when the given condition is true.
|
||||
The output file is stored in the SDK directory and can be opened by tools such as SnakeViz.
|
||||
"""
|
||||
def __init__(self, filename_out: str, condition: bool):
|
||||
self.filename_out = filename_out
|
||||
self.condition = condition
|
||||
self.pr = cProfile.Profile()
|
||||
|
||||
def __enter__(self):
|
||||
if self.condition:
|
||||
self.pr.enable()
|
||||
log.debug("Profiling started")
|
||||
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||
if self.condition:
|
||||
self.pr.disable()
|
||||
log.debug("Profiling finished")
|
||||
|
||||
profile_path = os.path.join(utils.get_sdk_path(), self.filename_out)
|
||||
with open(profile_path, 'w', encoding="utf-8") as profile_file:
|
||||
stats = pstats.Stats(self.pr, stream=profile_file)
|
||||
stats.dump_stats(profile_path)
|
||||
|
||||
return False
|
Reference in New Issue
Block a user