mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 07:57:27 +03:00 
			
		
		
		
	The unittest in helper.py has not offered an interesting abstraction
since dbe9f85c7d so import from the more
typical stdlib location.
		
	
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import time
 | |
| import unittest
 | |
| 
 | |
| from PIL import PyAccess
 | |
| 
 | |
| from .helper import PillowTestCase, hopper
 | |
| 
 | |
| # Not running this test by default. No DOS against Travis CI.
 | |
| 
 | |
| 
 | |
| def iterate_get(size, access):
 | |
|     (w, h) = size
 | |
|     for x in range(w):
 | |
|         for y in range(h):
 | |
|             access[(x, y)]
 | |
| 
 | |
| 
 | |
| def iterate_set(size, access):
 | |
|     (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):
 | |
|     iterations = 5000
 | |
|     starttime = time.time()
 | |
|     for x in range(iterations):
 | |
|         func(*args)
 | |
|         if time.time() - starttime > 10:
 | |
|             print(
 | |
|                 "%s: breaking at %s iterations, %.6f per iteration"
 | |
|                 % (label, x + 1, (time.time() - starttime) / (x + 1.0))
 | |
|             )
 | |
|             break
 | |
|     if x == iterations - 1:
 | |
|         endtime = time.time()
 | |
|         print(
 | |
|             "%s: %.4f s  %.6f per iteration"
 | |
|             % (label, endtime - starttime, (endtime - starttime) / (x + 1.0))
 | |
|         )
 | |
| 
 | |
| 
 | |
| class BenchCffiAccess(PillowTestCase):
 | |
|     def test_direct(self):
 | |
|         im = hopper()
 | |
|         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)])
 | |
| 
 | |
|         print("Size: %sx%s" % im.size)
 | |
|         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)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     unittest.main()
 |