Try cache mode on a bunch of "static" graphics
parent
588213a230
commit
b467e8fd8d
|
@ -222,6 +222,7 @@ class CrossHair(pg.GraphicsObject):
|
|||
self.active_plot = None
|
||||
self.digits = digits
|
||||
self._lastx = None
|
||||
# self.setCacheMode(QtGui.QGraphicsItem.DeviceCoordinateCache)
|
||||
|
||||
def add_plot(
|
||||
self,
|
||||
|
@ -231,8 +232,10 @@ class CrossHair(pg.GraphicsObject):
|
|||
# add ``pg.graphicsItems.InfiniteLine``s
|
||||
# vertical and horizonal lines and a y-axis label
|
||||
vl = plot.addLine(x=0, pen=self.lines_pen, movable=False)
|
||||
vl.setCacheMode(QtGui.QGraphicsItem.DeviceCoordinateCache)
|
||||
|
||||
hl = plot.addLine(y=0, pen=self.lines_pen, movable=False)
|
||||
hl.setCacheMode(QtGui.QGraphicsItem.DeviceCoordinateCache)
|
||||
hl.hide()
|
||||
|
||||
yl = YAxisLabel(
|
||||
|
@ -241,6 +244,7 @@ class CrossHair(pg.GraphicsObject):
|
|||
opacity=_ch_label_opac,
|
||||
bg_color='default',
|
||||
)
|
||||
yl.setCacheMode(QtGui.QGraphicsItem.DeviceCoordinateCache)
|
||||
yl.hide() # on startup if mouse is off screen
|
||||
|
||||
# TODO: checkout what ``.sigDelayed`` can be used for
|
||||
|
@ -283,6 +287,7 @@ class CrossHair(pg.GraphicsObject):
|
|||
)
|
||||
# place label off-screen during startup
|
||||
self.xaxis_label.setPos(self.plots[0].mapFromView(QPointF(0, 0)))
|
||||
self.xaxis_label.setCacheMode(QtGui.QGraphicsItem.DeviceCoordinateCache)
|
||||
|
||||
def add_curve_cursor(
|
||||
self,
|
||||
|
@ -495,7 +500,7 @@ def gen_qpath(
|
|||
w,
|
||||
) -> QtGui.QPainterPath:
|
||||
|
||||
profiler = pg.debug.Profiler(disabled=False)
|
||||
profiler = pg.debug.Profiler(disabled=True)
|
||||
|
||||
x, y, c = path_arrays_from_ohlc(data, start, bar_gap=w)
|
||||
profiler("generate stream with numba")
|
||||
|
@ -539,7 +544,6 @@ class BarItems(pg.GraphicsObject):
|
|||
# was worth a shot:
|
||||
# self.path.reserve(int(100e3 * 6))
|
||||
|
||||
# self.last_bar = QtGui.QPicture()
|
||||
self.path = QtGui.QPainterPath()
|
||||
|
||||
self._pi = plotitem
|
||||
|
@ -547,11 +551,6 @@ class BarItems(pg.GraphicsObject):
|
|||
self._xrange: Tuple[int, int]
|
||||
self._yrange: Tuple[float, float]
|
||||
|
||||
# XXX: not sure this actually needs to be an array other
|
||||
# then for the old tina mode calcs for up/down bars below?
|
||||
# lines container
|
||||
# self.lines = _mk_lines_array([], 50e3, 6)
|
||||
|
||||
# TODO: don't render the full backing array each time
|
||||
# self._path_data = None
|
||||
self._last_bar_lines: Optional[Tuple[QLineF, ...]] = None
|
||||
|
@ -585,36 +584,12 @@ class BarItems(pg.GraphicsObject):
|
|||
# up to last to avoid double draw of last bar
|
||||
self._last_bar_lines = lines_from_ohlc(data[-1], self.w)
|
||||
|
||||
# create pics
|
||||
# self.draw_history()
|
||||
# self.draw_last_bar()
|
||||
|
||||
# trigger render
|
||||
# https://doc.qt.io/qt-5/qgraphicsitem.html#update
|
||||
self.update()
|
||||
|
||||
return self.path
|
||||
|
||||
# def update_ranges(
|
||||
# self,
|
||||
# xmn: int,
|
||||
# xmx: int,
|
||||
# ymn: float,
|
||||
# ymx: float,
|
||||
# ) -> None:
|
||||
# ...
|
||||
|
||||
# def draw_last_bar(self) -> None:
|
||||
# """Currently this draws lines to a cached ``QPicture`` which
|
||||
# is supposed to speed things up on ``.paint()`` calls (which
|
||||
# is a call to ``QPainter.drawPicture()`` but I'm not so sure.
|
||||
|
||||
# """
|
||||
# p = QtGui.QPainter(self.last_bar)
|
||||
# # p.setPen(self.bars_pen)
|
||||
# p.drawLines(*tuple(filter(bool, self._last_bar_lines)))
|
||||
# p.end()
|
||||
|
||||
# @timeit
|
||||
def update_from_array(
|
||||
self,
|
||||
|
@ -642,6 +617,8 @@ class BarItems(pg.GraphicsObject):
|
|||
prepend_length = istart - first_index
|
||||
append_length = last_index - istop
|
||||
|
||||
flip_cache = False
|
||||
|
||||
# TODO: allow mapping only a range of lines thus
|
||||
# only drawing as many bars as exactly specified.
|
||||
|
||||
|
@ -658,7 +635,6 @@ class BarItems(pg.GraphicsObject):
|
|||
# update path
|
||||
old_path = self.path
|
||||
self.path = prepend_path
|
||||
# self.path.reserve(int(100e3 * 6))
|
||||
self.path.addPath(old_path)
|
||||
|
||||
# trigger redraw despite caching
|
||||
|
@ -668,10 +644,6 @@ class BarItems(pg.GraphicsObject):
|
|||
# generate new lines objects for updatable "current bar"
|
||||
self._last_bar_lines = lines_from_ohlc(array[-1], self.w)
|
||||
|
||||
# self.draw_last_bar()
|
||||
# self.update()
|
||||
|
||||
|
||||
# generate new graphics to match provided array
|
||||
# path appending logic:
|
||||
# we need to get the previous "current bar(s)" for the time step
|
||||
|
@ -684,13 +656,11 @@ class BarItems(pg.GraphicsObject):
|
|||
|
||||
# trigger redraw despite caching
|
||||
self.prepareGeometryChange()
|
||||
self.setCacheMode(QtGui.QGraphicsItem.NoCache)
|
||||
flip_cache = True
|
||||
|
||||
self._xrange = first_index, last_index
|
||||
|
||||
# if just_history:
|
||||
# self.update()
|
||||
# return
|
||||
|
||||
# last bar update
|
||||
i, o, h, l, last, v = array[-1][
|
||||
['index', 'open', 'high', 'low', 'close', 'volume']
|
||||
|
@ -719,17 +689,11 @@ class BarItems(pg.GraphicsObject):
|
|||
# now out of date / from some previous sample. It's weird
|
||||
# though because i've seen it do this to bars i - 3 back?
|
||||
|
||||
# else:
|
||||
# # XXX: h == l -> remove any HL line to avoid render bug
|
||||
# if body is not None:
|
||||
# self._last_bar_lines = (None, larm, rarm)
|
||||
# # body = self.lines[index - 1][0] = None
|
||||
|
||||
# self.draw_last_bar()
|
||||
self.resetTransform()
|
||||
self.setTransform(self.transform())
|
||||
self.update()
|
||||
|
||||
if flip_cache:
|
||||
self.setCacheMode(QtGui.QGraphicsItem.DeviceCoordinateCache)
|
||||
|
||||
# @timeit
|
||||
def paint(self, p, opt, widget):
|
||||
|
||||
|
@ -744,7 +708,6 @@ class BarItems(pg.GraphicsObject):
|
|||
# as is necesarry for what's in "view". Not sure if this will
|
||||
# lead to any perf gains other then when zoomed in to less bars
|
||||
# in view.
|
||||
# p.drawPicture(0, 0, self.last_bar)
|
||||
p.drawLines(*tuple(filter(bool, self._last_bar_lines)))
|
||||
profiler('draw last bar')
|
||||
|
||||
|
@ -766,11 +729,6 @@ class BarItems(pg.GraphicsObject):
|
|||
# (in this case, QPicture does all the work of computing the
|
||||
# bounding rect for us).
|
||||
|
||||
# compute aggregate bounding rectangle
|
||||
# lb = self.last_bar.boundingRect()
|
||||
|
||||
# hb = self.path.boundingRect()
|
||||
|
||||
# apparently this a lot faster says the docs?
|
||||
# https://doc.qt.io/qt-5/qpainterpath.html#controlPointRect
|
||||
hb = self.path.controlPointRect()
|
||||
|
@ -786,9 +744,7 @@ class BarItems(pg.GraphicsObject):
|
|||
QtCore.QPointF(hb.topLeft()),
|
||||
|
||||
# total size
|
||||
# QtCore.QSizeF(QtCore.QSizeF(lb.size()) + hb.size())
|
||||
QtCore.QSizeF(w, h)
|
||||
# QtCore.QSizeF(lb.size() + hb.size())
|
||||
)
|
||||
# print(f'bounding rect: {br}')
|
||||
return br
|
||||
|
|
Loading…
Reference in New Issue