Code Profiling
-
Anyone have any tips on how to profile your Ruby code for optimization? So far, from my research, I have found the 'profiler.rb' and 'ruby-prof.rb'. It seems as though ruby-prof is better but I haven't attempted using either yet.
I found this blog post which explains how to start and stop the profiler during a script.
http://on-ruby.blogspot.com/2006/08/profile-and-ruby-prof-getting-specific.htmlI'm looking forward to trying this out. Does anyone have any tips or a mini-tutorial on how to profile your ruby scripts?
I also found an interesting link on embedding C code in Ruby for optimization. Is this technique possible and practical to use with SketchUp scripts?
http://segment7.net/projects/ruby/inline_optimization.htmlThanks!
-
Very interesting topic. I've so far just used crude arrays of Time.now() to profile my scripts. It has always seemed a bit cumbersome to hook up a profiler to work under Sketchup Ruby.
-
Embedding C code is practical, and not that difficult. The examples in the Ruby Pragmatic Programmer (pickaxe) book work great. The only downside is the hassle with distributing the binaries and making sure the install process is idiot proof.
-
@thomthom said:
Very interesting topic. I've so far just used crude arrays of Time.now() to profile my scripts. It has always seemed a bit cumbersome to hook up a profiler to work under Sketchup Ruby.
I typically do that too, but I am finding THAT very cumbersome at this point in time. It's a nice way to figure out what blocks of code take the most time but it definitely has its limits.
-
@whaat said:
I typically do that too, but I am finding THAT very cumbersome at this point in time. It's a nice way to figure out what blocks of code take the most time but it definitely has its limits.
Yea - I hate this method of profiling. And I hate the hacks I use to "step" through code. ...probably should have another look at hooking up debugger...
Watching this thrread with great interest. -
@unknownuser said:
Embedding C code is practical, and not that difficult. The examples in the Ruby Pragmatic Programmer (pickaxe) book work great. The only downside is the hassle with distributing the binaries and making sure the install process is idiot proof.
Todd, I think thats a bit misleading. Sure the fundamentals of calling some C API to interface with vanilla Ruby is trivial. However, there are many many problems dealing with SketchUp's underlying C++ based object model, which interfaces to transient Ruby representations which your C Extension then manipulates. GC issues are a nightmare.
So much so, I've finally given up on using the Ruby<->C interfaces for Extensions. The next version of LightUp is talking directly to the underlying Sketchup object model and is completely stable for the largest of models, uses miles less memory and is around 10x faster.
Ruby is great for running up a quick GUI, "power short cut" etc but it is just waaay too slow to do any kind of heavy lifting.
In some sense its no surprise. You can't have your cake and eat it. Simple as that.
-
@adamb said:
The next version of LightUp is talking directly to the underlying Sketchup object model
You can get access to the model without going via Ruby?
-
@adamb said:
The next version of LightUp is talking directly to the underlying Sketchup object model and is completely stable for the largest of models, uses miles less memory and is around 10x faster.
Looking forward to it...
-
@adamb said:
So much so, I've finally given up on using the Ruby<->C interfaces for Extensions. The next version of LightUp is talking directly to the underlying Sketchup object model and is completely stable for the largest of models, uses miles less memory and is around 10x faster.
How exactly do you communicate directly with the SketchUp model?
-
@whaat said:
@adamb said:
So much so, I've finally given up on using the Ruby<->C interfaces for Extensions. The next version of LightUp is talking directly to the underlying Sketchup object model and is completely stable for the largest of models, uses miles less memory and is around 10x faster.
How exactly do you communicate directly with the SketchUp model?
Sorry, I mean using the SketchUp C++ SDK for directly walking their structures rather than having some C that uses rb_funcall() Ruby calls to get a Ruby object that is created by SketchUp as a proxy of the "real" underlying C++ object - and therein is (I believe) the source of many problems when writing C-based Extensions.
I've avoided it (the C++ SDK) for many years because I detest COM with a burning passion - I dislike COM so much that I find if I meet anyone who has anything positive to say about COM, I immediately dismiss them as idiots.
And yes, I know my COM-ism is extreme.
-
I's always thought that the SketchUp C++ SDK was only allowing other application to read/write .skp files... Never realize it allowed direct access to working model. ...or maybe I've been look at the wrong place...?
Only thing I find this this: http://code.google.com/intl/nb/apis/sketchup/docs/downloadsdksubmit.html
Which is refered to as beta and out of date... -
@thomthom said:
I's always thought that the SketchUp C++ SDK was only allowing other application to read/write .skp files.
Me too, but maybe you can save the file, run your code, and reload the file? Does it work like that?
-
@unknownuser said:
Which is refered to as beta and out of date...
yeah, that's the one. there is also the Sketchup.active_model.skpdoc that gives you a bridge to SDK world - it gives back the pointer to the Sketchup document interface. funny thing that it was available in SU5, removed in SU6 (least in 6.0.515 it was not available) and now is back
the problem is with not supported thing that worries me - what if it will be removed, again, from next version ?
but, as Adam said, it is a big boost in speed and reliability and I think you can create a fallback version in Ruby, just in case
also there are a lot more tools for profiling in C++ world than in Ruby.
-
@unknownuser said:
yeah, that's the one. there is also the Sketchup.active_model.skpdoc that gives you a bridge to SDK world - it gives back the pointer to the Sketchup document interface.
That let you use the SDK on a live model, and not have to save the model to file and have the reader read it?
I always thought the SDK would only read s.kp files - had no idea it could tap into a running model...
-
Would anyone be willing to provide a code snippet showing a trivial example of using C in combination with Ruby? I am still feeling kind of lost about how I could pass information back and forth between the two languages.
-
Whaat: a ruby c extension or a SU SDK one ?
-
@unknownuser said:
Whaat: a ruby c extension or a SU SDK one ?
Whatever is the simplest.... Even a 'hello world' example would be a good start.
-
the simplest is ruby extension and I showed you a link some time ago. didn't worked ?
to use SU SDK for a simple .skp page parser I made a small 8kb exe that needed 8.92 MB of .DLL files
-
@unknownuser said:
the simplest is ruby extension and I showed you a link some time ago. didn't worked ?
Heh...I never tried it because I got scared of the makefile stuff...
What interests me much more is Rubyinline. Look at the comment posted just below the blog post at the link you are referring to.
Do you think Rubyinline can be used with SketchUp? I see that it requires rubygems so this (and Rubyinline) would have to be distributed with the plugin as I see it.
-
@whaat said:
Do you think Rubyinline can be used with SketchUp? I see that it requires rubygems so this (and Rubyinline) would have to be distributed with the plugin as I see it.
no. RubyInline is just a shortcut for building extensions - you still need to have a compiler on that machine to make it work.
I also had problems make it run on my Windows machine as it doesn't like paths with spaces (v 3.6.3) and also it uses deprecated options for VC.
get started with that link, makefiles are peanuts compared with COM and finding problems in RubyInline
Advertisement