<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
Thank you very much for your email.<br>I'll try to adjust my code, and accept your suggestions.<br>"The question is: do all the lines you draw with cairo pass<br>&gt; 
through the bounding box?"<br>YES. Every line I draw has to be visible. The preprocessing goes through<br>the input coordinates, determines min/max and prepares appropriate bounding<br>box. Having said that, is applying your suggestions going to be reasonable in<br>terms of the speedup?<br><br>I really appreciate your help.<br><br>&gt; Date: Tue, 31 Aug 2010 16:21:20 +0200<br>&gt; Subject: Re: [cairo] Very large number of lines<br>&gt; From: ranma42@gmail.com<br>&gt; To: opustenom@hotmail.com<br>&gt; CC: cairo@cairographics.org<br>&gt; <br>&gt; On Tue, Aug 31, 2010 at 2:51 PM, necko necko &lt;opustenom@hotmail.com&gt; wrote:<br>&gt; &gt; Thanks for the email.<br>&gt; &gt; You were right about stroke the same line over itself. Therefore, I made a simple<br>&gt; &gt; random coordinate generator that should more closely describe the problem<br>&gt; &gt; I'm working on.<br>&gt; &gt; Note that all the lines need to be shown in the pdf file (therefore I use translate<br>&gt; &gt; which depends on min/max coordinate). The number of lines is from<br>&gt; &gt; 20million-350million. This is the main reason I'm striving for speed (in<br>&gt; &gt; processing and in displaying).<br>&gt; &gt; Therefore, displaying a PNG file would be appropriate. Please consider the<br>&gt; &gt; code below.<br>&gt; &gt; The first translate option cairo_translate (cr, -229770, 26573); leads to<br>&gt; &gt; execution time<br>&gt; &gt; of around 7min, while the second one cairo_translate (cr, -429000, 35000);<br>&gt; &gt; leads to<br>&gt; &gt; execution time of around 1min. Is it because the invisible parts are not<br>&gt; &gt; processed?<br>&gt; <br>&gt; Invisible parts are faster than visible ones because they don't have to<br>&gt; be composited, but they require some processing (to determine visibility).<br>&gt; If your random data actually resembles your true data, consider a<br>&gt; simple clipping function.<br>&gt; In my attachment I get a big speedup when declaring NO_CLIP 0.<br>&gt; (It does just "trivial" clipping, lines completely above/under/right/left of the<br>&gt; visible region are not drawn, but there are some more lines that don't<br>&gt; pass through it<br>&gt; yet are not clipped with this check)<br>&gt; <br>&gt; &gt;<br>&gt; &gt; For my application, everything within the bounding box (determined by the<br>&gt; &gt; min/max coordinate) should be displayed.<br>&gt; <br>&gt; That is obvious. The question is: do all the lines you draw with cairo pass<br>&gt; through the bounding box?<br>&gt; <br>&gt; &gt; I noted that the output is different when stroke() every 1000th or 100000th<br>&gt; &gt; line.<br>&gt; &gt; I thought this was because of the random number generator, but I tested it<br>&gt; &gt; several times.<br>&gt; <br>&gt; Don't use a variable seed. Stroking will be different because of compositing,<br>&gt; but the differences in your attachments cannot be explained this way.<br>&gt; Check again your output, making sure that you do not change anything else.<br>&gt; (Doing the same in my attachment I cannot reproduce your problem)<br>&gt; <br>&gt; I tried to do minimum changes to your original file, but I couldn't<br>&gt; resist changing<br>&gt; the output.<br>&gt; Please play around a little with the defines in the file. You will see that:<br>&gt;  - disabling clipping times get much slower<br>&gt;  - rendering to pdf is not as crazy as before, since only a few thousands lines<br>&gt;    are actually in the bbox (about the 0.5%)<br>&gt;  - higher ITER_NOs are possible in reasonable amounts of time (image should<br>&gt;    scale linearly, pdf worsen when you start swapping)<br>&gt; <br>&gt; Andrea<br>                                               </body>
</html>