Pillow/Tests/bench_cffi_access.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

53 lines
1.3 KiB
Python
Raw Normal View History

from __future__ import annotations
2024-01-20 14:23:03 +03:00
import time
from PIL import PyAccess
2020-03-28 04:51:28 +03:00
from .helper import hopper
2020-12-14 21:35:04 +03:00
# Not running this test by default. No DOS against CI.
def iterate_get(size, access) -> None:
(w, h) = size
for x in range(w):
for y in range(h):
access[(x, y)]
def iterate_set(size, access) -> None:
(w, h) = size
for x in range(w):
for y in range(h):
access[(x, y)] = (x % 256, y % 256, 0)
def timer(func, label, *args) -> None:
2014-01-07 10:09:00 +04:00
iterations = 5000
starttime = time.time()
2014-01-06 20:55:06 +04:00
for x in range(iterations):
func(*args)
2019-06-13 18:53:42 +03:00
if time.time() - starttime > 10:
2014-01-06 20:55:06 +04:00
break
endtime = time.time()
print(
f"{label}: completed {x + 1} iterations in {endtime - starttime:.4f}s, {(endtime - starttime) / (x + 1.0):.6f}s per iteration"
)
def test_direct() -> None:
2020-03-28 04:51:28 +03:00
im = hopper()
im.load()
# im = Image.new("RGB", (2000, 2000), (1, 3, 2))
2020-03-28 04:51:28 +03:00
caccess = im.im.pixel_access(False)
access = PyAccess.new(im, False)
2020-03-28 04:51:28 +03:00
assert caccess[(0, 0)] == access[(0, 0)]
print(f"Size: {im.width}x{im.height}")
2020-03-28 04:51:28 +03:00
timer(iterate_get, "PyAccess - get", im.size, access)
timer(iterate_set, "PyAccess - set", im.size, access)
timer(iterate_get, "C-api - get", im.size, caccess)
timer(iterate_set, "C-api - set", im.size, caccess)