<div dir="ltr">Hi Phil,<div><br></div><div>We started doing some benchmarking using the following script:</div><div><br></div><div>from PyQt6 import QtCore, QtGui<br>import PyQt6.sip as sip<br>import numpy as np<br><br>import itertools<br>from time import perf_counter<br><br>class LineSegments:<br>    def __init__(self, use_sip_array):<br>        self.use_sip_array = hasattr(sip, 'array') and use_sip_array<br>        self.alloc(0)<br><br>    def alloc(self, size):<br>        if self.use_sip_array:<br>            self.objs = sip.array(QtCore.QLineF, size)<br>            vp = sip.voidptr(self.objs, len(self.objs)*4*8)<br>            self.arr = np.frombuffer(vp, dtype=np.float64).reshape((-1, 4))<br>        else:<br>            self.arr = np.empty((size, 4), dtype=np.float64)<br>            self.objs = list(map(sip.wrapinstance,<br>                itertools.count(self.arr.ctypes.data, self.arr.strides[0]),<br>                itertools.repeat(QtCore.QLineF, self.arr.shape[0])))<br><br>    def get(self, size):<br>        if size != self.arr.shape[0]:<br>            self.alloc(size)<br>        return self.objs, self.arr<br><br>def run(size, use_sip_array):<br>    qimg = QtGui.QImage(640, 480, QtGui.QImage.Format.Format_RGB32)<br>    qimg.fill(QtCore.Qt.GlobalColor.transparent)<br>    segments = LineSegments(use_sip_array)<br>    objs, arr = segments.get(size)<br><br>    arr[:, 0] = 0<br>    arr[:, 1] = 0<br>    arr[:, 2] = qimg.width()<br>    arr[:, 3] = qimg.height()<br><br>    painter = QtGui.QPainter(qimg)<br>    painter.setPen(QtCore.Qt.GlobalColor.cyan)<br><br>    draw_t0 = perf_counter()<br>    painter.drawLines(objs)<br>    draw_t1 = perf_counter()<br><br>    painter.end()<br>    return draw_t1 - draw_t0<br><br>size = int(1e6)<br>for use_sip_array in [True, False]:<br>    dt = run(size, use_sip_array)<br>    print(f'{use_sip_array=} {dt:.3f}')<br></div><div><br></div><div><br></div><div>Here we noticed that using sip.array was slightly faster than not on macOS, but on Windows it was slightly slower.  Then when we changed the endpoint of the line to (10, 10) instead of the width and height of the QImage as such:</div><div><br></div><div>arr[:, 2] = 10</div><div>arr[:, 3] = 10 </div><div><br></div><div>We started seeing significantly higher penalties for using sip.array</div><div><br></div><div>On macOS:</div><div><br></div><div>use_sip_array=True 0.513<br>use_sip_array=False 0.171<br></div><div><br></div><div><br></div><div>On Windows:</div><div><br></div><div>use_sip_array=True 0.351<br>use_sip_array=False 0.218<br></div><div><br></div><div><br></div><div>Also for sanity sake, the output of pip list:</div><div><br></div><div>Package    Version             Editable project location<br>---------- ------------------- ------------------------------<br>numpy      1.22.4<br>pip        22.1.1<br>PyQt6      6.3.1.dev2205201737<br>PyQt6-Qt6  6.3.0<br>PyQt6-sip  13.4.0<br>pyqtgraph  0.12.4.dev0         /Users/ogi/Developer/pyqtgraph<br>setuptools 58.1.0<br>wheel      0.37.1<br></div><div><br></div><div>Let me know if there is another use case I should test.</div><div><br></div><div>Thanks!</div><div>Ogi</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 26, 2022 at 2:19 PM Phil Thompson <<a href="mailto:phil@riverbankcomputing.com" target="_blank">phil@riverbankcomputing.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 26/05/2022 19:46, Ognyan Moore wrote:<br>
> Hi Phil,<br>
> <br>
> Thanks for providing this.  One of our regular contributors just <br>
> started<br>
> testing, one issue came up as a compiler failure in <br>
> PyQt6_sip:sip_array.c<br>
> line 261 on MSVC, which was fixed by casting to (char*) before doing <br>
> the<br>
> pointer arithmetic.<br>
<br>
Should be fixed in the next snapshot.<br>
<br>
Thanks,<br>
Phil<br>
</blockquote></div>