Hi, On Thursday, March 6, 2014 5:01:58 PM UTC+8, Andreas Lobinger wrote: > > Hello colleague, > > hopefully we do not have a race condition here, yesterday in the late > afternoon i ussed a PR for Cairo.jl and i included the push/pop there ( > https://github.com/JuliaLang/Cairo.jl/pull/65) >
The changes you made here, defining the push/pull_group were exactly the same that I was going to make : ) I took a look at your code and made some comments, but mostly it seems very similar to what I had in mind. > The test_speed.jl does some rendering of dots in different methods, > however on my box ddots4 (with push/pop group) is awfully slow. If you find > time, could you review my code if i do it right, please? > I see you are testing up to 100000 points; for my tests, I only did 10000, since that is the usage case I'm interested in. Perhaps Cairo is not the best solution for that many points? I have done similar scatter plotting with OpenGL in the past and it basically handled anything I could through at it. That's a very different approach, though, without (easy access to) niceties such as anti-aliasing, and of course without vectorized graphics. > Wishing a happy day, > Andreas > > On Thursday, March 6, 2014 9:50:43 AM UTC+1, Roger Herikstad wrote: >> >> Hi, >> I tried to modify the scatter plot code in Winston to make use of the >> push_group/pop_group code, but for some reason I couldn't get it to work. >> Instead, I ended combining the advice from Andreas Lobinger above with the >> fix already used in the curve(..) function to break up long paths. It gives >> me a decent speedup that is good enough for most of my use. If my solution >> seems OK to people, I can issue a pull request. >> >> >> https://github.com/grero/Winston.jl/commit/e63f7ef2137a6932143a0c53a2c8e65ecdebec7e >> >> On Sunday, March 2, 2014 9:47:13 AM UTC+8, Roger Herikstad wrote: >>> >>> Hi again, >>> I did a simple time test by inserting time() calls at the beginning and >>> end of my update function. For both my original solution and the one >>> suggested by Andreas, the function takes about 0.36 seconds with 10000 >>> points on my laptop. >>> >>> On Sunday, March 2, 2014 9:39:11 AM UTC+8, Roger Herikstad wrote: >>>> >>>> Hi, >>>> Thanks for the advice! The initial drawing definitely seems faster >>>> when using zero-length lines. On my Macbook Pro with 8GB of ram, this >>>> solution seems comparable to the performance of matplotlib when using >>>> 10000 >>>> points. Matlab is still much, much faster. I'll try running some proper >>>> timing experiments to quantify the difference. >>>> >>>> On Saturday, March 1, 2014 11:10:56 PM UTC+8, Andreas Lobinger wrote: >>>>> >>>>> Hello colleague, >>>>> >>>>> On Friday, February 28, 2014 6:59:13 AM UTC+1, Roger Herikstad wrote: >>>>>> >>>>>> Hi all, >>>>>> I tried to get a better understanding of Cairo drawing by >>>>>> implementing this solution myself. This is just a proof-of-concept and I >>>>>> didn't do any rigorous testing, but subjectively comparing the resize >>>>>> performance of a Winston scatter plot of ~10000 points and this new >>>>>> solution, I noticed a significant speed-up. Note that I still find it >>>>>> too >>>>>> slow, but that's probably due to my lack of understanding of Cairo. >>>>>> Basically, this is what I did: >>>>>> I appreciate any comments on this. Thanks! >>>>>> >>>>> >>>>> 1) >>>>> How do you plan to treat different colors per dot? >>>>> 2) >>>>> In a lot of cairo advices, the fastest way for a round dot is: >>>>> set_line_cap(cr,Cairo.CAIRO_LINE_CAP_ROUND) >>>>> set_line_width(cr,radius) >>>>> >>>>> for i=1:n >>>>> move_to(cr,px[i],py[i]); >>>>> rel_line_to(cr,0,0); >>>>> stroke(cr); >>>>> end >>>>> >>>>> >>>>> so setting the line end to a ROUND CAP and plot a line of length 0. >>>>> >>>>> >>>>> >>>>