Openlights / firesim

FireLight show designer and visualizer
http://craftyjon.com/projects/openlights/firesim
MIT License
8 stars 8 forks source link

Collect profiling data on OS X and identify points of improvement #15

Closed craftyjon closed 7 years ago

nyarasha commented 8 years ago

Results from several runs today:

Firemix:

Looks like simplex noise is the vast majority of time and calls.

* PROFILER RESULTS * draw (/Users/karen.wickert/Documents/firemix/presets/simplex_noise.py:77) function called 2299 times

     8389051 function calls in 17.460 seconds

Ordered by: cumulative time, internal time, call count

ncalls tottime percall cumtime percall filename:lineno(function) 2299 12.836 0.006 17.459 0.008 simplex_noise.py:77(draw) 8276400 2.403 0.000 2.403 0.000 {noise._simplex.noise3} 6897 1.923 0.000 1.923 0.000 {numpy.core.multiarray.array} 4598 0.009 0.000 1.917 0.000 numeric.py:392(asarray) 2299 0.040 0.000 0.120 0.000 audio.py:136(getEnergy) 2299 0.084 0.000 0.084 0.000 {method 'dot' of 'numpy.ndarray' objects} 2299 0.026 0.000 0.080 0.000 fromnumeric.py:1621(sum) 2299 0.009 0.000 0.051 0.000 _methods.py:23(_sum) 2299 0.049 0.000 0.049 0.000 pattern.py:218(setAllHLS) 2299 0.041 0.000 0.041 0.000 {method 'reduce' of 'numpy.ufunc' objects} 20691 0.017 0.000 0.023 0.000 pattern.py:135(parameter) 20691 0.006 0.000 0.006 0.000 {method 'get' of 'dict' objects} 20691 0.004 0.000 0.004 0.000 parameters.py:42(get) 2299 0.003 0.000 0.003 0.000 {isinstance} 4598 0.002 0.000 0.002 0.000 {math.cos} 4598 0.002 0.000 0.002 0.000 audio.py:139(getSmoothEnergy) 2299 0.002 0.000 0.002 0.000 mixer.py:256(is_onset) 4598 0.001 0.000 0.001 0.000 {math.sin} 2299 0.001 0.000 0.001 0.000 {method 'disable' of '_lsprof.Profiler' objects} 2299 0.000 0.000 0.000 0.000 {len} 0 0.000 0.000 profile:0(profiler)

* PROFILER RESULTS * draw (/Users/karen.wickert/Documents/firemix/presets/simplex_noise.py:77) function called 114 times

     415986 function calls in 1.012 seconds

Ordered by: cumulative time, internal time, call count

ncalls tottime percall cumtime percall filename:lineno(function) 114 0.746 0.007 1.012 0.009 simplex_noise.py:77(draw) 410400 0.140 0.000 0.140 0.000 {noise._simplex.noise3} 342 0.109 0.000 0.109 0.000 {numpy.core.multiarray.array} 228 0.001 0.000 0.109 0.000 numeric.py:392(asarray) 114 0.003 0.000 0.007 0.000 audio.py:136(getEnergy) 114 0.001 0.000 0.005 0.000 fromnumeric.py:1621(sum) 114 0.004 0.000 0.004 0.000 {method 'dot' of 'numpy.ndarray' objects} 114 0.001 0.000 0.003 0.000 _methods.py:23(_sum) 114 0.003 0.000 0.003 0.000 pattern.py:218(setAllHLS) 114 0.003 0.000 0.003 0.000 {method 'reduce' of 'numpy.ufunc' objects} 1026 0.001 0.000 0.001 0.000 pattern.py:135(parameter) 1026 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects} 1026 0.000 0.000 0.000 0.000 parameters.py:42(get) 114 0.000 0.000 0.000 0.000 {isinstance} 228 0.000 0.000 0.000 0.000 {math.cos} 228 0.000 0.000 0.000 0.000 audio.py:139(getSmoothEnergy) 114 0.000 0.000 0.000 0.000 mixer.py:256(is_onset) 228 0.000 0.000 0.000 0.000 {math.sin} 114 0.000 0.000 0.000 0.000 {len} 114 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 0 0.000 0.000 profile:0(profiler)

* PROFILER RESULTS * draw (/Users/karen.wickert/Documents/firemix/presets/simplex_noise.py:77) function called 108 times

     394092 function calls in 0.921 seconds

Ordered by: cumulative time, internal time, call count

ncalls tottime percall cumtime percall filename:lineno(function) 108 0.680 0.006 0.921 0.009 simplex_noise.py:77(draw) 388800 0.125 0.000 0.125 0.000 {noise._simplex.noise3} 216 0.001 0.000 0.100 0.000 numeric.py:392(asarray) 324 0.100 0.000 0.100 0.000 {numpy.core.multiarray.array} 108 0.002 0.000 0.007 0.000 audio.py:136(getEnergy) 108 0.001 0.000 0.005 0.000 fromnumeric.py:1621(sum) 108 0.004 0.000 0.004 0.000 {method 'dot' of 'numpy.ndarray' objects} 108 0.000 0.000 0.004 0.000 _methods.py:23(_sum) 108 0.003 0.000 0.003 0.000 {method 'reduce' of 'numpy.ufunc' objects} 108 0.003 0.000 0.003 0.000 pattern.py:218(setAllHLS) 972 0.001 0.000 0.001 0.000 pattern.py:135(parameter) 972 0.000 0.000 0.000 0.000 {method 'get' of 'dict' objects} 972 0.000 0.000 0.000 0.000 parameters.py:42(get) 108 0.000 0.000 0.000 0.000 {isinstance} 216 0.000 0.000 0.000 0.000 {math.cos} 216 0.000 0.000 0.000 0.000 audio.py:139(getSmoothEnergy) 108 0.000 0.000 0.000 0.000 mixer.py:256(is_onset) 216 0.000 0.000 0.000 0.000 {math.sin} 108 0.000 0.000 0.000 0.000 {len} 108 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 0 0.000 0.000 profile:0(profiler)

nyarasha commented 8 years ago

Commented out line 108 of firesimgui.py

Firesim ran with --profile flag

985aeb8b6566:firesim karen.wickert$ python firesim.py firefly2015 --profile
INFO:root:Booting FireSim...
INFO:root:Loaded data/config.json
INFO:root:Loaded data/scenes/firefly2015.json
INFO:root:Scene has 15 strands, 240 pixels.
INFO:root:FireSimGUI Ready.

Clock type: CPU
Ordered by: totaltime, desc

name                                  ncall  tsub      ttot      tavg      
..py:38 NetController.read_datagrams  24     15.51558  31.72975  1.322073
..ewidget.py:113 FixtureWidget.paint  720    2.517816  13.53638  0.018801
..98 SceneController.process_command  15244  1.510662  1.598741  0.000105
..py:120 FireSimGUI.on_network_event  15244  0.090211  0.144129  0.000009
..vaswidget.py:27 CanvasWidget.paint  24     0.001864  0.032016  0.001334
...py:73 CanvasWidget.hoverMoveEvent  3      0.001531  0.011046  0.003682
..y:28 DragHandleWidget.boundingRect  3252   0.009471  0.009471  0.000003
..rewidget.py:81 FixtureWidget.shape  90     0.004609  0.007707  0.000086
..m/util/jsonloader.py:43 Config.get  820    0.004242  0.007309  0.000009
..t.py:67 FixtureWidget.boundingRect  1659   0.005661  0.005661  0.000003
..r.py:67 SceneController.set_canvas  1      0.000008  0.005624  0.005624
..er.py:48 SceneController.init_view  1      0.000031  0.005616  0.005616
..y:75 SceneController.update_canvas  1      0.000068  0.005455  0.005455
..s/fixture.py:74 Fixture.get_widget  60     0.000390  0.005352  0.000089
..idget.py:10 FixtureWidget.__init__  30     0.001208  0.004803  0.000160
..s/fixture.py:83 Fixture.pixel_data  720    0.004279  0.004279  0.000006
..py:60 NetController.frame_complete  897    0.003627  0.003627  0.000004
..idget.py:37 DragHandleWidget.paint  1440   0.002987  0.002987  0.000002
..odels/fixture.py:50 Fixture.pixels  1470   0.002673  0.002673  0.000002
..ler.py:21 SceneController.__init__  1      0.000301  0.002653  0.002653
..get.py:6 DragHandleWidget.__init__  60     0.001386  0.002122  0.000035
...py:57 NetController.frame_started  897    0.002054  0.002054  0.000002
..els/fixture.py:13 Fixture.__init__  60     0.000204  0.001323  0.000022
..oller.py:16 NetController.__init__  1      0.000575  0.001251  0.001251
..:91 CanvasWidget.mouseReleaseEvent  1      0.000021  0.001175  0.001175
..et.py:97 CanvasWidget.deselect_all  1      0.000010  0.001149  0.001149
..07 SceneController.widget_selected  1      0.000117  0.001139  0.001139
..odels/fixture.py:87 Fixture.unpack  60     0.000668  0.001119  0.000019
..cene.py:46 Scene.fixture_hierarchy  2      0.000203  0.001104  0.000552
..py:116 FireSimGUI.update_net_stats  30     0.000369  0.001002  0.000033
..widget.py:318 FixtureWidget.select  30     0.000513  0.000953  0.000032
..n2.7/logging/__init__.py:1621 info  3      0.000024  0.000866  0.000289
..t.py:237 FixtureWidget.hover_leave  90     0.000365  0.000866  0.000010
..g/__init__.py:1155 RootLogger.info  3      0.000028  0.000837  0.000279
..y:59 FixtureWidget.update_geometry  31     0.000444  0.000835  0.000027
..g/__init__.py:1265 RootLogger._log  3      0.000029  0.000790  0.000263
../models/scene.py:33 Scene.fixtures  1      0.000065  0.000747  0.000747
..m/models/scene.py:8 Scene.__init__  1      0.000005  0.000707  0.000707
..til/jsonloader.py:7 Scene.__init__  1      0.000005  0.000702  0.000702
..m/util/jsonloader.py:13 Scene.load  1      0.000022  0.000697  0.000697
..ller.py:65 NetController.get_stats  30     0.000387  0.000633  0.000021
..SceneController.create_pixel_array  1      0.000155  0.000492  0.000492
..__init__.py:1286 RootLogger.handle  3      0.000022  0.000441  0.000147
..__.py:1318 RootLogger.callHandlers  3      0.000016  0.000412  0.000137
..init__.py:744 StreamHandler.handle  3      0.000027  0.000396  0.000132
..ython2.7/json/__init__.py:257 load  1      0.000026  0.000360  0.000360
..y:107 CanvasWidget.scene_to_canvas  184    0.000339  0.000339  0.000002
..thon2.7/json/__init__.py:293 loads  1      0.000009  0.000296  0.000296
../decoder.py:361 JSONDecoder.decode  1      0.000016  0.000287  0.000287
..__init__.py:847 StreamHandler.emit  3      0.000049  0.000267  0.000089
..oder.py:372 JSONDecoder.raw_decode  1      0.000261  0.000261  0.000261
..py:32 CrosshairWidget.boundingRect  54     0.000248  0.000248  0.000005
..it__.py:1252 RootLogger.makeRecord  3      0.000017  0.000242  0.000081
..__init__.py:243 LogRecord.__init__  3      0.000089  0.000225  0.000075
../models/fixture.py:56 Fixture.pos1  121    0.000157  0.000157  0.000001
..DragHandleWidget.mouseReleaseEvent  1      0.000024  0.000153  0.000153
..odels/fixture.py:34 Fixture.strand  105    0.000120  0.000120  0.000001
.._init__.py:836 StreamHandler.flush  3      0.000026  0.000105  0.000035
..swidget.py:8 CanvasWidget.__init__  1      0.000075  0.000100  0.000100
..dget.py:8 CrosshairWidget.__init__  1      0.000068  0.000097  0.000097
..nit__.py:701 StreamHandler.acquire  6      0.000021  0.000087  0.000015
..py:53 CanvasWidget.update_fixtures  1      0.000046  0.000086  0.000086
..FixtureWidget.handle_move_callback  1      0.000012  0.000085  0.000085
../models/fixture.py:62 Fixture.pos2  61     0.000081  0.000081  0.000001
..nit__.py:708 StreamHandler.release  6      0.000023  0.000080  0.000013
..it__.py:1231 RootLogger.findCaller  3      0.000042  0.000078  0.000026
..init__.py:721 StreamHandler.format  3      0.000010  0.000073  0.000024
..tureWidget.update_handle_positions  1      0.000023  0.000073  0.000073
..r.py:72 SceneController.get_canvas  60     0.000068  0.000068  0.000001
..dels/fixture.py:40 Fixture.address  60     0.000067  0.000067  0.000001
...7/threading.py:147 _RLock.acquire  6      0.000043  0.000066  0.000011
..g/__init__.py:458 Formatter.format  3      0.000029  0.000063  0.000021
..7 DragHandleWidget.mousePressEvent  1      0.000016  0.000061  0.000061
...7/threading.py:187 _RLock.release  6      0.000039  0.000057  0.000009
..widget.py:41 CrosshairWidget.paint  24     0.000051  0.000051  0.000002
.. DragHandleWidget.update_positions  1      0.000025  0.000044  0.000044
..ixture.py:43 Fixture.update_offset  30     0.000040  0.000040  0.000001
..python2.7/posixpath.py:97 splitext  3      0.000012  0.000039  0.000013
..gging/__init__.py:154 getLevelName  3      0.000026  0.000030  0.000010
..y:53 SceneController.load_backdrop  1      0.000015  0.000028  0.000028
..hon2.7/genericpath.py:93 _splitext  3      0.000017  0.000027  0.000009
..124 FireSimGUI.is_backdrop_enabled  1      0.000012  0.000022  0.000022
..75 DragHandleWidget.hoverMoveEvent  2      0.000009  0.000022  0.000011
..ython2.7/posixpath.py:112 basename  3      0.000013  0.000020  0.000007
..__.py:1358 RootLogger.isEnabledFor  3      0.000012  0.000019  0.000006
..init__.py:318 LogRecord.getMessage  3      0.000011  0.000018  0.000006
...7/logging/__init__.py:82 <lambda>  3      0.000009  0.000018  0.000006
...py:201 FireSimGUI.widget_selected  1      0.000011  0.000018  0.000018
...7/threading.py:1152 currentThread  3      0.000011  0.000016  0.000005
..9 DragHandleWidget.hoverEnterEvent  1      0.000007  0.000016  0.000016
..on2.7/threading.py:64 _RLock._note  12     0.000016  0.000016  0.000001
..__init__.py:452 Formatter.usesTime  3      0.000011  0.000016  0.000005
..lib/python2.7/posixpath.py:61 join  1      0.000008  0.000014  0.000014
../__init__.py:605 RootLogger.filter  6      0.000012  0.000012  0.000002
..m/models/scene.py:13 Scene.extents  1      0.000007  0.000012  0.000012
..:128 FireSimGUI.are_labels_enabled  1      0.000006  0.000011  0.000011
..simgui.py:132 FireSimGUI.is_locked  1      0.000005  0.000010  0.000010
..imGUI._get_selected_fixture_strand  1      0.000008  0.000008  0.000008
..imGUI._set_selected_fixture_pixels  2      0.000008  0.000008  0.000004
..y:117 CanvasWidget.canvas_to_scene  1      0.000008  0.000008  0.000008
..:1344 RootLogger.getEffectiveLevel  3      0.000007  0.000007  0.000002
..python2.7/posixpath.py:44 normcase  6      0.000007  0.000007  0.000001
../threading.py:967 _MainThread.name  3      0.000007  0.000007  0.000002
..im/models/scene.py:19 Scene.center  1      0.000003  0.000005  0.000005
..py:88 CanvasWidget.mousePressEvent  1      0.000005  0.000005  0.000005
..mGUI._get_selected_fixture_address  1      0.000004  0.000004  0.000004
..mGUI._set_selected_fixture_address  2      0.000004  0.000004  0.000002
..imGUI._get_selected_fixture_pixels  1      0.000004  0.000004  0.000004
...py:136 FireSimGUI.is_center_shown  1      0.000004  0.000004  0.000004
.. CanvasWidget.set_background_image  1      0.000003  0.000003  0.000003
..imGUI._set_selected_fixture_strand  2      0.000003  0.000003  0.000002
..els/fixture.py:65 Fixture.set_pos2  1      0.000002  0.000002  0.000002
..els/fixture.py:59 Fixture.set_pos1  1      0.000002  0.000002  0.000002
..m/firesimgui.py:103 FireSimGUI.run  1      0.000000  0.000000  0.000000
..esimgui.py:106 FireSimGUI.on_close  1      0.000000  0.000000  0.000000

985aeb8b6566:firesim karen.wickert$ python firesim.py firefly2015 --profile
INFO:root:Booting FireSim...
INFO:root:Loaded data/config.json
INFO:root:Loaded data/scenes/firefly2015.json
INFO:root:Scene has 15 strands, 240 pixels.
INFO:root:FireSimGUI Ready.

Clock type: CPU
Ordered by: totaltime, desc

name                                  ncall  tsub      ttot      tavg      
..py:38 NetController.read_datagrams  14     9.305738  18.97239  1.355171
..ewidget.py:113 FixtureWidget.paint  480    1.625330  8.924897  0.018594
..98 SceneController.process_command  9396   0.890334  0.942308  0.000100
..py:120 FireSimGUI.on_network_event  9396   0.054076  0.084514  0.000009
..vaswidget.py:27 CanvasWidget.paint  17     0.001251  0.021088  0.001240
..y:28 DragHandleWidget.boundingRect  2100   0.006034  0.006034  0.000003
..r.py:67 SceneController.set_canvas  1      0.000006  0.005500  0.005500
..er.py:48 SceneController.init_view  1      0.000024  0.005494  0.005494
..y:75 SceneController.update_canvas  1      0.000064  0.005350  0.005350
..s/fixture.py:74 Fixture.get_widget  30     0.000325  0.005197  0.000173
..idget.py:10 FixtureWidget.__init__  30     0.001205  0.004695  0.000156
..m/util/jsonloader.py:43 Config.get  517    0.002501  0.004369  0.000008
..t.py:67 FixtureWidget.boundingRect  1080   0.003552  0.003552  0.000003
...py:73 CanvasWidget.hoverMoveEvent  1      0.000441  0.003136  0.003136
..s/fixture.py:83 Fixture.pixel_data  480    0.002753  0.002753  0.000006
..ler.py:21 SceneController.__init__  1      0.000228  0.002558  0.002558
..rewidget.py:81 FixtureWidget.shape  30     0.001261  0.002196  0.000073
..py:60 NetController.frame_complete  553    0.002154  0.002154  0.000004
..get.py:6 DragHandleWidget.__init__  60     0.001332  0.002033  0.000034
..idget.py:37 DragHandleWidget.paint  960    0.002006  0.002006  0.000002
..odels/fixture.py:50 Fixture.pixels  990    0.001691  0.001691  0.000002
...py:57 NetController.frame_started  553    0.001256  0.001256  0.000002
..els/fixture.py:13 Fixture.__init__  60     0.000200  0.001256  0.000021
..cene.py:46 Scene.fixture_hierarchy  2      0.000203  0.001083  0.000541
..odels/fixture.py:87 Fixture.unpack  60     0.000576  0.001056  0.000018
..n2.7/logging/__init__.py:1621 info  3      0.000021  0.000809  0.000270
..y:59 FixtureWidget.update_geometry  30     0.000446  0.000801  0.000027
..g/__init__.py:1155 RootLogger.info  3      0.000027  0.000785  0.000262
..m/models/scene.py:8 Scene.__init__  1      0.000006  0.000777  0.000777
..til/jsonloader.py:7 Scene.__init__  1      0.000006  0.000771  0.000771
..m/util/jsonloader.py:13 Scene.load  1      0.000024  0.000765  0.000765
..g/__init__.py:1265 RootLogger._log  3      0.000028  0.000741  0.000247
../models/scene.py:33 Scene.fixtures  1      0.000075  0.000698  0.000698
..SceneController.create_pixel_array  1      0.000159  0.000492  0.000492
..__init__.py:1286 RootLogger.handle  3      0.000019  0.000426  0.000142
..ython2.7/json/__init__.py:257 load  1      0.000027  0.000411  0.000411
..__.py:1318 RootLogger.callHandlers  3      0.000016  0.000401  0.000134
..init__.py:744 StreamHandler.handle  3      0.000031  0.000385  0.000128
..py:116 FireSimGUI.update_net_stats  11     0.000117  0.000339  0.000031
..thon2.7/json/__init__.py:293 loads  1      0.000012  0.000326  0.000326
..y:107 CanvasWidget.scene_to_canvas  181    0.000326  0.000326  0.000002
../decoder.py:361 JSONDecoder.decode  1      0.000020  0.000314  0.000314
..oller.py:16 NetController.__init__  1      0.000071  0.000307  0.000307
..oder.py:372 JSONDecoder.raw_decode  1      0.000276  0.000276  0.000276
..__init__.py:847 StreamHandler.emit  3      0.000035  0.000259  0.000086
..t.py:237 FixtureWidget.hover_leave  30     0.000111  0.000256  0.000009
..ller.py:65 NetController.get_stats  11     0.000136  0.000222  0.000020
..it__.py:1252 RootLogger.makeRecord  3      0.000016  0.000217  0.000072
..__init__.py:243 LogRecord.__init__  3      0.000097  0.000201  0.000067
..py:32 CrosshairWidget.boundingRect  35     0.000160  0.000160  0.000005
../models/fixture.py:56 Fixture.pos1  120    0.000149  0.000149  0.000001
..odels/fixture.py:34 Fixture.strand  105    0.000143  0.000143  0.000001
.._init__.py:836 StreamHandler.flush  3      0.000030  0.000102  0.000034
..swidget.py:8 CanvasWidget.__init__  1      0.000074  0.000099  0.000099
..dget.py:8 CrosshairWidget.__init__  1      0.000063  0.000090  0.000090
..py:53 CanvasWidget.update_fixtures  1      0.000046  0.000089  0.000089
../models/fixture.py:62 Fixture.pos2  60     0.000084  0.000084  0.000001
..nit__.py:701 StreamHandler.acquire  6      0.000021  0.000083  0.000014
..init__.py:721 StreamHandler.format  3      0.000014  0.000083  0.000028
..r.py:72 SceneController.get_canvas  60     0.000082  0.000082  0.000001
..dels/fixture.py:40 Fixture.address  60     0.000076  0.000076  0.000001
..nit__.py:708 StreamHandler.release  6      0.000019  0.000071  0.000012
..it__.py:1231 RootLogger.findCaller  3      0.000040  0.000070  0.000023
..g/__init__.py:458 Formatter.format  3      0.000031  0.000069  0.000023
...7/threading.py:147 _RLock.acquire  6      0.000038  0.000062  0.000010
...7/threading.py:187 _RLock.release  6      0.000033  0.000052  0.000009
..widget.py:41 CrosshairWidget.paint  16     0.000036  0.000036  0.000002
..ixture.py:43 Fixture.update_offset  30     0.000036  0.000036  0.000001
..python2.7/posixpath.py:97 splitext  3      0.000013  0.000035  0.000012
..y:53 SceneController.load_backdrop  1      0.000013  0.000024  0.000024
..hon2.7/genericpath.py:93 _splitext  3      0.000013  0.000022  0.000007
..124 FireSimGUI.is_backdrop_enabled  1      0.000010  0.000020  0.000020
..__init__.py:452 Formatter.usesTime  3      0.000013  0.000019  0.000006
..init__.py:318 LogRecord.getMessage  3      0.000014  0.000019  0.000006
..gging/__init__.py:154 getLevelName  3      0.000014  0.000018  0.000006
..on2.7/threading.py:64 _RLock._note  12     0.000017  0.000017  0.000001
..ython2.7/posixpath.py:112 basename  3      0.000010  0.000017  0.000006
..__.py:1358 RootLogger.isEnabledFor  3      0.000011  0.000017  0.000006
..lib/python2.7/posixpath.py:61 join  1      0.000011  0.000016  0.000016
...7/logging/__init__.py:82 <lambda>  3      0.000011  0.000015  0.000005
..imGUI._get_selected_fixture_pixels  1      0.000013  0.000013  0.000013
..:128 FireSimGUI.are_labels_enabled  1      0.000007  0.000013  0.000013
...py:136 FireSimGUI.is_center_shown  1      0.000012  0.000012  0.000012
...7/threading.py:1152 currentThread  3      0.000011  0.000012  0.000004
..simgui.py:132 FireSimGUI.is_locked  1      0.000006  0.000011  0.000011
../__init__.py:605 RootLogger.filter  6      0.000011  0.000011  0.000002
..m/models/scene.py:13 Scene.extents  1      0.000007  0.000009  0.000009
..python2.7/posixpath.py:44 normcase  6      0.000007  0.000007  0.000001
..im/models/scene.py:19 Scene.center  1      0.000004  0.000006  0.000006
..:1344 RootLogger.getEffectiveLevel  3      0.000006  0.000006  0.000002
../threading.py:967 _MainThread.name  3      0.000005  0.000005  0.000002
..imGUI._set_selected_fixture_pixels  1      0.000005  0.000005  0.000005
..imGUI._get_selected_fixture_strand  1      0.000005  0.000005  0.000005
..mGUI._get_selected_fixture_address  1      0.000004  0.000004  0.000004
..mGUI._set_selected_fixture_address  1      0.000002  0.000002  0.000002
..imGUI._set_selected_fixture_strand  1      0.000002  0.000002  0.000002
.. CanvasWidget.set_background_image  1      0.000002  0.000002  0.000002
..esimgui.py:106 FireSimGUI.on_close  1      0.000000  0.000000  0.000000
..m/firesimgui.py:103 FireSimGUI.run  1      0.000000  0.000000  0.000000
craftyjon commented 8 years ago

For comparison, here's a profile from a fast Windows machine:

Clock type: CPU
Ordered by: totaltime, desc

name                                  ncall  tsub      ttot      tavg      
..ewidget.py:113 FixtureWidget.paint  2010   3.198020  9.952864  0.004952
..py:38 NetController.read_datagrams  84     0.452403  0.904806  0.010771
..98 SceneController.process_command  1225   0.124801  0.140401  0.000115
..vaswidget.py:27 CanvasWidget.paint  67     0.000000  0.046800  0.000699
..y:75 SceneController.update_canvas  1      0.000000  0.015600  0.015600
..er.py:48 SceneController.init_view  1      0.000000  0.015600  0.015600
..s\fixture.py:74 Fixture.get_widget  30     0.000000  0.015600  0.000520
..idget.py:37 DragHandleWidget.paint  4020   0.015600  0.015600  0.000004
..r.py:67 SceneController.set_canvas  1      0.000000  0.015600  0.015600
..idget.py:10 FixtureWidget.__init__  30     0.015600  0.015600  0.000520
..y:59 FixtureWidget.update_geometry  30     0.000000  0.000000  0.000000

Looks like receive_datagrams is way slower on Mac for some reason.

tibbon commented 7 years ago

I can help here; but need to get Pyside installed :)

zbenjamin commented 7 years ago

As an aside (since @nyarasha profiled firemix in this issue), I have some code that takes care of much of the SimplexNoise slowness.

craftyjon commented 7 years ago

Closing this since we are switching to PyQt5 which should have better performance (and then I plan to rewrite the GUI to improve performance further and fix some long-standing issues)