W3C home > Mailing lists > Public > public-svg-wg@w3.org > January to March 2009

Re: Raising the issue of multi-threading

From: Alex Danilo <alex@abbra.com>
Date: Mon, 30 Mar 2009 21:59:45 +1100
Message-Id: <LVFBHK.48YJ9XFDWFE@abbra.com>
To: <alexander.adam@examotion.com>
Cc: <public-svg-wg@w3.org>

Hi Alexander,

--Original Message--:
>Hi!
>
>I'd like to raise the issue of multi-threading and the SVG-Spec. I really
>think that the spec should take multi-threaded environments into strong
>consideration. For example, let's take this:

Choosing to use multi-threading is an implementation detail.

The spec defines the semantics of what should happen, not how
an implementation should be architected. For example, there is
no definition of anti-aliasing requirements at all in the spec.
and that is deliberate. The effects of multi-threading fall into
the same category.

>var rect = document.createElementNS(.., "rect");
>rect.setAttributeNS(..)
>..
>document.rootElement.appendChild(rect);
>var theBBox = rect.getBbox();

It is fairly clear that the result of the getBbox call should
return the extent of the rect element - there is no
ambiguity here. The element is in the tree, so its bounds
can be computed.

>The last line in Renesis may contain garbage at this point. Why? Because the
>bbox (and other things like screen TM, client TM etc.) are calculated during
>the rendering step. But because Renesis v3 does multi-threaded rendering,
>you will never ever get a guarantee when those changes will make it to the
>rendering. The only possible solution I could think about is to introduce
>some kind of rendering feedback including cookies. Consider this:

The return value from getBbox should never depend on completion
of some asynchronous operation. The spec is clear about what
gets returned. If behind the scenes threads are used to retrieve
the correct result, then the implementation should guarantee that
it does so.

>var rect = document.createElementNS(.., "rect");
>rect.setAttributeNS(..)
>..
>document.rootElement.appendChild(rect);
>document.setRenderingCookie(123);
>
>Now you could wait for the appropriate callback:
>
>function renderComplete(evt, cookie)
>{
>  if (cookie == 123) { this is the pass we want }
>}

An interesting suggestion, but very implementation specific. It
assumes that all implementations rely on the render pass to generate
bound box information, which simply isn't the case.

For example, hit-testing can require calculation of bound boxes.
In the case where an implementation doesn't buffer the bound
boxes, this is probably required.

So the 'rendering cookie' idea is tied to one implementation
approach and is an attempt to work around a problem that is
specific to one architectural approach for a multi-threaded
implementation.

This problem isn't caused by multi-threading itself - but the
architecture that requires a render pass to generate bound
boxes - there are other approaches that will work in a multi-
threaded design.

>I think, multi-threaded environments become more and more important
>especially in the times of Multi-Core processors so we should give it a
>strong consideration. But for now, what are we actually supposed to do in
>Renesis for the previously described behaviour / issue? 

I agree multi-threaded environments are becoming more important
but the semantics of the spec are quite clear. The behaviour
in the spec is also something authors can rely on without
needing to concern themselves with what sort of implementation
is being targeted.

In your case, you have 2 options:
1) block at the getBbox call until the render pass is complete; or
2) walk the tree to generate the bound box if the render thread
   hasn't finished yet.

Best regards,
Alex

>mfG / Regards,
>Alexander Adam
>--
>Geschäftsführer / CEO
> 
>examotion GmbH
>Ostendstraße 115
>90482 Nürnberg, Germany
>
>Fon: +49 911 - 504901-11
>Fax: +49 911 - 504901-20
> 
>E-Mail: alexander.adam@examotion.com
>Web: http://www.examotion.com
> 
>Geschäftsführer: Alexander Adam
>Amtsgericht Nürnberg HRB Nr.: 23803
>Gerichtsstandort: Nürnberg
> 
>
>--------------------------------------------------
>LEGAL DISCLAIMER: The information in this email is confidential and may be
>legally privileged. It is intended solely for the addressee. Access to this
>email by anyone else is unauthorized. If you are not the intended recipient,
>any disclosure, copying, distribution or any action taken or omitted to be
>taken in reliance on it, is prohibited and may be unlawful.
>--------------------------------------------------
>
>
>
>
>
>
>
Received on Monday, 30 March 2009 11:04:42 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 30 March 2009 11:04:44 GMT