[OpenJDK 2D-Dev] [OpenJDK Rasterizer] Path2d needRoom very slow for huge paths

Jim Graham james.graham at oracle.com
Wed Apr 8 20:40:09 UTC 2015


It remains to be proven, but I think if we did a decent job of 
short-circuiting the geometry rejection in the actual renderer then we'd 
be easily as fast, if not faster than this technique.  Faster because it 
wouldn't require 2 stages, but since we'd likely do the computations to 
make sure that the dashing remained consistent we'd have to try it out 
and see.

On the other hand, if you amortize the cost of this clipping over 
multiple changes of view (i.e. you clip to a large surrounding area and 
let the user scroll for a bit before you invalidate your clipping area 
and perform another clip stage), then we may not be able to approach 
that in the renderer.

Still, this is a simple addition to the renderer that could perform the 
same task more accurately, if not faster...

			...jim

On 4/8/15 9:37 AM, Andrea Aime wrote:
> On Mon, Apr 6, 2015 at 11:59 PM, Jim Graham <james.graham at oracle.com
> <mailto:james.graham at oracle.com>> wrote:
>
>         We use this one for fast rectangular clipping:
>         https://github.com/geotools/__geotools/blob/master/modules/__library/main/src/main/java/__org/geotools/geometry/jts/__GeometryClipper.java
>         <https://github.com/geotools/geotools/blob/master/modules/library/main/src/main/java/org/geotools/geometry/jts/GeometryClipper.java>
>
>         It was introduced exactly because java2d does not do that, and
>         can lead
>         to OOM easily with large
>         shapes united with a dasharray stroke.
>
>
>     If I understand the above correctly you will simplify a polygon to
>     just the pieces that fall within the clip before you send them to
>     the rendering/stroking engine?  You mention dashing as the main case
>     that you are concerned with, but doesn't that surgery on the polygon
>     change the dash pattern?  I suppose if you are just viewing the dash
>     pattern as a periodic decoration then that wouldn't matter, but
>     technically there is only one correct way for the in-clip dashes to
>     appear.
>
>
> Yes, you are right it can create visual artifacts. But the speed
> (important) and stability (very important) benefits are so big that we
> have no choice. Also, it seems that users are not complaining, and
> pretty much every open source mapping software I've looked into has
> implemented something similar.
> Performance wise the thing is, we sometimes are visualizing only a tiny
> part of a large geometry in a map, so quickly throwing away the parts
> that we are not concerned with results in a sizeable benefit (we
> normally clip at a certain distance from the visible area to avoid part
> of the artifacts).
>
>
>     This does point out that our dashing engines (and stroking engines)
>     do not take the clip into account at all and so generate widened and
>     dashed geometry for parts of the shape that do not intersect the
>     clip.  We should look at adding that.  The more responsible way to
>     add it for dashing would be to compute the length of any omitted
>     segment and consume the dash phase as appropriate, but that is much
>     cheaper than generating all of the segments and then having them
>     widened just to be ignored by the rendering phase.
>
>
> Right
>
> Cheers
> Andrea
>
> --
> ==
> GeoServer Professional Services from the experts! Visit
> http://goo.gl/NWWaa2 for more information.
> ==
>
> Ing. Andrea Aime
> @geowolf
> Technical Lead
>
> GeoSolutions S.A.S.
> Via Poggio alle Viti 1187
> 55054  Massarosa (LU)
> Italy
> phone: +39 0584 962313
> fax: +39 0584 1660272
> mob: +39  339 8844549
>
> http://www.geo-solutions.it
> http://twitter.com/geosolutions_it
>
> *AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*
>
> Le informazioni contenute in questo messaggio di posta elettronica e/o
> nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
> loro utilizzo è consentito esclusivamente al destinatario del messaggio,
> per le finalità indicate nel messaggio stesso. Qualora riceviate questo
> messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
> darcene notizia via e-mail e di procedere alla distruzione del messaggio
> stesso, cancellandolo dal Vostro sistema. Conservare il messaggio
> stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti,
> copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento
> contrario ai principi dettati dal D.Lgs. 196/2003.
>
> The information in this message and/or attachments, is intended solely
> for the attention and use of the named addressee(s) and may be
> confidential or proprietary in nature or covered by the provisions of
> privacy act (Legislative Decree June, 30 2003, no.196 - Italy's New Data
> Protection Code).Any use not in accord with its purpose, any disclosure,
> reproduction, copying, distribution, or either dissemination, either
> whole or partial, is strictly forbidden except previous formal approval
> of the named addressee(s). If you are not the intended recipient, please
> contact immediately the sender by telephone, fax or e-mail and delete
> the information in this message that has been received in error. The
> sender does not give any warranty or accept liability as the content,
> accuracy or completeness of sent messages and accepts no responsibility
> for changes made after they were sent or for other risks which arise as
> a result of e-mail transmission, viruses, etc.
>
>
> -------------------------------------------------------



More information about the 2d-dev mailing list