210 | | for offset, length in img_data: |
211 | | self._client.mmap.seek(offset) |
212 | | data += self._client.mmap.read(length) |
| 210 | if len(img_data)==1: |
| 211 | #construct an array directly from the mmap zone: |
| 212 | ts = time.time() |
| 213 | start = time.time() |
| 214 | offset, length = img_data[0] |
| 215 | arraytype = ctypes.c_char * length |
| 216 | data = arraytype.from_buffer(self._client.mmap, offset) |
| 217 | end = time.time() |
| 218 | log.info("drawing directly from mmap, array took=%s", int(100000*(end-start))/100.0) |
| 219 | start = time.time() |
| 220 | self._backing.draw_rgb_image(gc, x, y, width, height, gtk.gdk.RGB_DITHER_NONE, data, rowstride) |
| 221 | end = time.time() |
| 222 | ps = int(length/(end-ts)/1024/1024) |
| 223 | log.info("actual drawing took=%s", int(100000*(end-start))/100.0) |
| 224 | log.info("Mpixels/s=%s", ps) |
214 | | self._backing.draw_rgb_image(gc, x, y, width, height, gtk.gdk.RGB_DITHER_NONE, data, rowstride) |
| 226 | else: |
| 227 | ts = time.time() |
| 228 | start = time.time() |
| 229 | data = "" |
| 230 | pixels = 0 |
| 231 | for offset, length in img_data: |
| 232 | self._client.mmap.seek(offset) |
| 233 | data += self._client.mmap.read(length) |
| 234 | data_start.value = offset+length |
| 235 | pixels += length |
| 236 | end = time.time() |
| 237 | log.info("drawing from mmap group: %s, took=%s", img_data, int(100000*(end-start))/100.0) |
| 238 | start = time.time() |
| 239 | self._backing.draw_rgb_image(gc, x, y, width, height, gtk.gdk.RGB_DITHER_NONE, data, rowstride) |
| 240 | end = time.time() |
| 241 | ps = int(pixels/(end-ts)/1024/1024) |
| 242 | log.info("actual drawing took=%s", int(100000*(end-start))/100.0) |
| 243 | log.info("Mpixels/s=%s", ps) |