New Profiler class from Antony Lee:
* Simpler API (with backward compatibility)
* Individual Profilers can be enabled by environmental variable PYQTGRAPHPROFILE
* Loads only data that is currently visible
* Downsamples to avoid plotting too many samples
* Loads data in chunks to limit memory usage during downsampling
A new function profiling system is implemented. Most importantly, this
allows one to profile various internal functions directly by setting the
`PYQTGRAPHPROFILE` environment variable to a comma separated list of
function and method names, e.g.
PYQTGRAPHPROFILE=functions.makeARGB,ImageItem.render \
python -mexamples
Specifically, items in `PYQTGRAPHPROFILE` must be of the form
`classname.methodname` or `dotted_module_name.functionname`, with the
initial "pyqtgraph." stripped from the dotted module name.
Moreover, the overhead of inactive profilers has been kept minimal: an
introspective check of the caller's name (only if `PYQTGRAPHPROFILE` is
set) and a trivial function (not method) call per profiler call.
The new profilers rely on `sys._getframe` to find the caller's name,
although the previous system (passing the caller's name explicitely)
could certainly have been kept instead.
Finally the API of profilers has been changed: register a
profiling point simply by calling the profiler, and profilers are
automatically flushed on garbage collection. See the docstring of
`pyqtgraph.debug.Profiler` for more details.
The main change is on `ViewBox.getContextMenus`, which now returns an
up-to-date of actions that `GraphicsScene.addParentContextMenus` can use.
Also, `getContextMenus` was given a default implementation in the base
class (falling back on `getMenu` if defined), and some cleanup was done.
- Process now optionally wraps stdout/stderr from child process to
circumvent a python bug
- Added windows error number for port-in-use check
- fixed segv caused by lost QImage input in pyside
* RawImageWidget (and thus OpenGL) isn't imported by default anymore.
* scipy.stats.scoreatpercentile is replaced by numpy.percentile.
This commit has not been tested as the example runner is currently
broken.
- setRange now only affects target range
- updateViewRange only affects view range
- updateMatrix only affects childGroup transform
- updateMatrix is only called before a render
Pathway now looks like:
setRange -> updateViewRange -> matrix dirty -> ...
-> sigRangeChanged
... -> prepareForPaint -> updateAutoRange, updateMatrix if dirty
- GraphicsView.render now correctly invokes GraphicsScene.prepareForPaint
- Fixed RemoteGraphicsView renderer to use new PyQt QImage API.
- multiprocess.Process now pipes stdout/err directly to console when in debugging mode
- ROI updates on sigTransformChanged
- ViewBox is more careful about accepting all auto-range changes up to the point it is disabled, even if the auto-range calculation is deferred.