6 sys.path.insert(0, 'lib')
15 def benchmarkGdkPixbuf():
16 print 'gdkPixbuf blitting 8bit RGBA on RGB'
17 src = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, N, N)
18 dst = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, N, N)
20 src.get_pixels_array()[:,:,:] = (rand(N,N,4)*255).astype('uint8')
21 dst.get_pixels_array()[:,:,:] = (rand(N,N,3)*255).astype('uint8')
24 for i in xrange(iterations):
25 src.composite(dst, 0, 0, N, N, 0, 0, 1, 1, gtk.gdk.INTERP_NEAREST, 255)
28 def benchmarkSciPy(t='float32'):
29 print 'benchmarkSciPy', t
30 src = rand(N,N,4).astype(t)
31 dst = rand(N,N,4).astype(t)
33 src_rgb = src[:,:,0:3].copy()
34 src_a = src[:,:,3: ].copy()
35 dst_rgb = dst[:,:,0:3].copy()
36 dst_a = dst[:,:,3: ].copy()
39 for i in xrange(iterations):
41 dst_rgb = src_rgb * src_a + dst_rgb * src_a_
42 dst_a = src_a + dst_a * src_a_
45 def benchmarkSciPyPremulSlice(t='float32'):
46 print 'benchmarkSciPyPremulSlice', t
47 src = rand(N,N,4).astype(t)
48 dst = rand(N,N,4).astype(t)
51 for i in xrange(iterations):
52 dst = src + dst - dst[:,:,3:]*dst
55 def benchmarkSciPyPremul(t='float32'):
56 print 'benchmarkSciPyPremul', t
57 src = rand(N,N,4).astype(t)
58 dst = rand(N,N,4).astype(t)
60 src_rgb = src[:,:,0:3].copy()
61 src_a = src[:,:,3: ].copy()
62 dst_rgb = dst[:,:,0:3].copy()
63 dst_a = dst[:,:,3: ].copy()
66 for i in xrange(iterations):
67 # resultColor = topColor + (1.0 - topAlpha) * bottomColor
68 dst_rgb = src_rgb + dst_rgb - src_a*dst_rgb
69 # resultAlpha = topAlpha + (1.0 - topAlpha) * bottomAlpha
70 dst_a = src_a + dst_a - src_a*dst_a
73 def benchmarkSciPyPremulOpt(t='float32'):
74 print 'benchmarkSciPyPremulOpt', t
75 src = rand(N,N,4).astype(t)
76 dst = rand(N,N,4).astype(t)
78 src_rgb = src[:,:,0:3].copy()
79 src_a = src[:,:,3: ].copy()
80 dst_rgb = dst[:,:,0:3].copy()
81 dst_a = dst[:,:,3: ].copy()
84 for i in xrange(iterations):
85 # resultColor = topColor + (1.0 - topAlpha) * bottomColor
87 dst_rgb -= src_a*dst_rgb
88 # resultAlpha = topAlpha + (1.0 - topAlpha) * bottomAlpha
93 def benchmark16bitPremulC():
94 print 'benchmark16bitPremulC'
95 src = (rand(N,N,4)*65535).astype('uint16')
96 dst = (rand(N,N,3)*255).astype('uint8')
99 for i in xrange(iterations):
100 mypaintlib.composite_tile_over_rgb8(src, dst)
104 a = benchmarkGdkPixbuf()
106 b = benchmarkSciPyPremulOpt()
108 c = benchmark16bitPremulC()