2019-01-13 20:00:12 +03:00
|
|
|
from .helper import unittest, PillowTestCase, hopper
|
2014-01-06 04:45:01 +04:00
|
|
|
|
2014-06-25 13:19:27 +04:00
|
|
|
# Not running this test by default. No DOS against Travis CI.
|
2014-01-06 04:45:01 +04:00
|
|
|
|
|
|
|
from PIL import PyAccess
|
|
|
|
|
|
|
|
import time
|
|
|
|
|
2014-06-25 13:19:27 +04:00
|
|
|
|
2014-01-06 04:45:01 +04:00
|
|
|
def iterate_get(size, access):
|
2014-06-25 13:19:27 +04:00
|
|
|
(w, h) = size
|
2014-01-06 04:45:01 +04:00
|
|
|
for x in range(w):
|
|
|
|
for y in range(h):
|
2014-06-25 13:19:27 +04:00
|
|
|
access[(x, y)]
|
|
|
|
|
2014-01-06 04:45:01 +04:00
|
|
|
|
|
|
|
def iterate_set(size, access):
|
2014-06-25 13:19:27 +04:00
|
|
|
(w, h) = size
|
2014-01-06 04:45:01 +04:00
|
|
|
for x in range(w):
|
|
|
|
for y in range(h):
|
2014-06-25 13:19:27 +04:00
|
|
|
access[(x, y)] = (x % 256, y % 256, 0)
|
|
|
|
|
2014-01-06 04:45:01 +04:00
|
|
|
|
|
|
|
def timer(func, label, *args):
|
2014-01-07 10:09:00 +04:00
|
|
|
iterations = 5000
|
2014-01-06 04:45:01 +04:00
|
|
|
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:
|
|
|
|
print(
|
|
|
|
"%s: breaking at %s iterations, %.6f per iteration"
|
|
|
|
% (label, x + 1, (time.time() - starttime) / (x + 1.0))
|
|
|
|
)
|
2014-01-06 20:55:06 +04:00
|
|
|
break
|
2019-06-13 18:53:42 +03:00
|
|
|
if x == iterations - 1:
|
2014-01-06 20:55:06 +04:00
|
|
|
endtime = time.time()
|
2019-06-13 18:53:42 +03:00
|
|
|
print(
|
|
|
|
"%s: %.4f s %.6f per iteration"
|
|
|
|
% (label, endtime - starttime, (endtime - starttime) / (x + 1.0))
|
|
|
|
)
|
2014-06-25 13:19:27 +04:00
|
|
|
|
|
|
|
|
|
|
|
class BenchCffiAccess(PillowTestCase):
|
|
|
|
def test_direct(self):
|
2014-09-05 13:36:24 +04:00
|
|
|
im = hopper()
|
2014-06-25 13:19:27 +04:00
|
|
|
im.load()
|
|
|
|
# im = Image.new( "RGB", (2000, 2000), (1, 3, 2))
|
|
|
|
caccess = im.im.pixel_access(False)
|
|
|
|
access = PyAccess.new(im, False)
|
|
|
|
|
|
|
|
self.assertEqual(caccess[(0, 0)], access[(0, 0)])
|
|
|
|
|
2015-04-24 02:26:52 +03:00
|
|
|
print("Size: %sx%s" % im.size)
|
2019-06-13 18:53:42 +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)
|
2014-06-25 13:19:27 +04:00
|
|
|
|
|
|
|
|
2019-06-13 18:53:42 +03:00
|
|
|
if __name__ == "__main__":
|
2014-06-25 13:19:27 +04:00
|
|
|
unittest.main()
|