51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
"""One-shot profile of the feed/parse path, to rank hotspots."""
|
|
import cProfile
|
|
import pstats
|
|
import sys
|
|
import time
|
|
|
|
sys.path.insert(0, "tools")
|
|
sys.path.insert(0, ".")
|
|
from tools.bench_vs_terminus import colour_flood, plain_flood, tui_repaint, _bootstrap # noqa
|
|
|
|
from vterm.emulator import VtScreen, VtStream
|
|
from tests._bootstrap import FakeProcess # noqa
|
|
|
|
|
|
def build():
|
|
screen = VtScreen(100, 40, process=FakeProcess(), history=10000)
|
|
return VtStream(screen)
|
|
|
|
|
|
def run(name, data):
|
|
stream = build()
|
|
t0 = time.perf_counter()
|
|
for i in range(0, len(data), 32768):
|
|
stream.feed(data[i:i + 32768])
|
|
dt = (time.perf_counter() - t0) * 1000
|
|
print("{:<20} {:.1f} ms".format(name, dt))
|
|
|
|
|
|
def profiled(name, data):
|
|
stream = build()
|
|
pr = cProfile.Profile()
|
|
pr.enable()
|
|
for i in range(0, len(data), 32768):
|
|
stream.feed(data[i:i + 32768])
|
|
pr.disable()
|
|
s = pstats.Stats(pr)
|
|
print("\n==== {} ====".format(name))
|
|
s.sort_stats("cumulative").print_stats(18)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
floods = {
|
|
"colour": colour_flood(),
|
|
"plain": plain_flood(),
|
|
"tui": tui_repaint(),
|
|
}
|
|
for n, d in floods.items():
|
|
run(n, d)
|
|
profiled("colour", colour_flood())
|
|
profiled("tui", tui_repaint())
|