xmlgraphics-batik-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Magic Finger" <magic.fin...@gmx.de>
Subject Re: storing SVG DOM tree contents to a file by method org.apache.batik.svggen.SVGGraphics2D.stream(...) very slow !
Date Sat, 14 Feb 2004 17:03:48 GMT
I've put some simple checkpoints to the different methods called by
SVGGraphics2D.stream(...) and saw that the methods for writing out the xml
entity *attributes* (writeXml(Attr attr, IndentWriter out) and
writeChildrenXml(Attr attr, IndentWriter out) inside class
org.apache.batik.svggen.XmlWriter) are called very often and slow down the
file writing process mostly.
In my case the xml attributes are the x,y coordinates and the stroke-info
for a 2d line:
<line fill="none" x1="273.5316" x2="231.6523" y1="665.7648" y2="327.1585"
stroke="black" stroke-width="2" />
And I have to store very often more than 20.000 lines.

Best regards,
Maik


----- Original Message ----- 
From: "Thomas DeWeese" <Thomas.DeWeese@Kodak.com>
To: "Batik Users" <batik-users@xml.apache.org>
Sent: Wednesday, February 11, 2004 11:06 PM
Subject: Re: storing SVG DOM tree contents to a file by method
org.apache.batik.svggen.SVGGraphics2D.stream(...) very slow !


> Magic Finger wrote:
>
> > Thanks for your help Bibek, but unfortunately no elements were written
out
> > to SVG file when replacing in my code shown below the statement
>
>     This is one of the more common mistakes with the SVGGraphics2D,
> the factory document is used as just that - a factory.  It does not
> append the elements to that document.  If you want the document
> tree from the SVGGraphics2D you need to use 'getRoot'.  Note that this
> 'clears' the SVGGraphics2D so if you are 'check pointing' the work
> you need to store the element returned (not that I think this applies
> here).
>
>     BTW I don't think it will be much faster.  If you are really
> concerned about performance you should run a profiler on the code
> and see what pops out.  Could be simple stuff like not using
> StringBuffer where we should, but who knows without profiling you
> are generally just "shooting in the dark".
>
> >     svgGenerator.stream(out, useCSS);
> > by your alternative suggestion
> >     DOMUtilities.writeDocument(myFactory, out);
> >
> > It seems that 'myFactory' (which is an instance of org.w3c.dom.Document)
> > contains no Node elements -- very strange !?
> >
> > Best regards,
> > Maik
> >
> >
> > ----- Original Message ----- 
> > From: "Bibek Sahu" <scorpio@dodds.net>
> > To: "Batik Users" <batik-users@xml.apache.org>
> > Sent: Friday, February 06, 2004 4:23 PM
> > Subject: Re: storing SVG DOM tree contents to a file by method
> > org.apache.batik.svggen.SVGGraphics2D.stream(...) very slow !
> >
> >
> >
> >>Another way is to use
>
>>org.apache.batik.dom.util.DOMUtilities.writeDocument(org.w3c.dom.Document
> >
> > doc, java.io.Writer w)
> >
> >>
> >>Don't know whether it's faster or not, but it's worth a shot.  It works
> >>pretty well for me, but my SVGs are smaller than yours...
> >>
> >>Good luck!
> >>- Bibek
> >>
> >>
> >>On Fri, 6 Feb 2004, Magic Finger wrote:
> >>
> >>
> >>>Hello,
> >>>
> >>>I have serious performance problems when writing out the SVG DOM tree
by
> >
> > the
> >
> >>>Batik SVG-Generator method
> >>>org.apache.batik.svggen.SVGGraphics2D.stream(...).
> >>>
> >>>Writing out ~ 20.000 lines to a SVG file by method
> >
> > SVGGraphics2D.stream(...)
> >
> >>>with BufferedWriter takes ~3 minutes -- that's unbelievable slow.
> >>>The resulting size of the SVG file is ~1.3 MB.
> >>>
> >>>Does anybody can tell me how to accelerate file writing, or is it just
a
> >>>normal, poor behaviour of Batik's internal SVGGraphics2D.XmlWriter ?
> >>>
> >>>And any idea how to give a "I am working..." feedback to users while
> >>>streaming out the DOM tree contents to an SVG file, e.g. by showing a
> >>>progressbar ?
> >>>
> >>>The DOM tree contents are just lines and the resulting SVG file looks
> >
> > like
> >
> >>>this:
> >>
>
>>--------------------------------------------------------------------------
> >>
> >>><?xml version="1.0"?>
> >>>
> >>><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
> >>>'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
> >>><svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink"
> >>>color-rendering="auto" color-interpolation="auto" text-rendering="auto"
> >>>stroke="black" stroke-    linecap="square" stroke-miterlimit="10"
> >>>shape-rendering="auto" stroke-opacity="1" fill="black"
> >>>stroke-dasharray="none" font-weight="normal" stroke-width="1"
> >>>xmlns="http://www.w3.org/2000/svg" font-family="&apos;sansserif&apos;"
> >>>font-style="normal" stroke-linejoin="miter" font-size="12"
> >>>stroke-dashoffset="0" image-rendering="auto">
> >>>  <!--Generated by Foo-->
> >>>  <defs id="genericDefs" />
> >>>  <g>
> >>>    <g fill="white" stroke="white">
> >>>      <rect width="562" x="0" height="378" y="0" stroke="none" />
> >>>    </g>
> >>>    <g stroke-linecap="round" fill="rgb(204,255,204)"
> >>>text-rendering="optimizeLegibility" stroke-linejoin="round"
> >>>stroke="rgb(204,255,204)" stroke-    width="0.375">
> >>>      <line y2="217" fill="none" x1="222" x2="222" y1="217" />
> >>>      ...
> >>>      <line fill="none" x1="60" x2="61" y1="153" y2="153" stroke="blue"
> >>>stroke-width="0.5" />
> >>>      ...
> >>>      <line fill="none" x1="477" x2="477" y1="258" y2="258"
> >
> > stroke="black"
> >
> >>>stroke-width="2" />
> >>>      ...
> >>>    </g>
> >>>  </g>
> >>></svg>
> >>
>
>>--------------------------------------------------------------------------
> >>
> >>>The lines were generated for a JPanel by explicetely calling its
> >>>paintComponent(Graphics g) method with an instance of SVGGraphics2D as
> >
> > the
> >
> >>>parameter 'g' (please see code snippets below):
> >>
>
>>--------------------------------------------------------------------------
> >>
> >>>    ...
> >>>    File svgFile;
> >>>    ...
> >>>    DOMImplementation domImpl =
> >>>GenericDOMImplementation.getDOMImplementation();
> >>>    Document myFactory =
> >>>domImpl.createDocument(/*null*/SVGDOMImplementation.SVG_NAMESPACE_URI,
> >>>"svg", null);
> >>>    SVGGeneratorContext ctx =
> >
> > SVGGeneratorContext.createDefault(myFactory);
> >
> >>>    ctx.setComment("Generated by Foo");
> >>>
> >>>    SVGGraphics2D svgGenerator = new SVGGraphics2D(ctx, false);
> >>>    ...
> >>>    MyJPanel panel = new MyJPanel();
> >>>    ....
> >>>    panel.paintComponent(svgGenerator);
> >>>    ....
> >>>    FileOutputStream fileout = new FileOutputStream(svgFile);
> >>>    Writer out = new BufferedWriter(new OutputStreamWriter(fileout,
> >>>"UTF-8"), 131072/*buffersize=128kB*/);
> >>>
> >>>    boolean useCSS = false; // CSS style attribute
> >>>    svgGenerator.stream(out, useCSS);
> >>>    ...
> >>
>
>>--------------------------------------------------------------------------
> >>
> >>>    class MyJPanel extends JPanel {
> >>>        ...
> >>>        BasicStroke strokeLine  = new BasicStroke(thicknessLine,
> >>>BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
> >>>        ...
> >>>
> >>>        public void paintComponent(Graphics g) {
> >>>
> >>>              Graphics2D g2 = (Graphics2D) g;
> >>>
> >>>              int maxX = this.getSize().width;
> >>>              int maxY = this.getSize().height;
> >>>
> >>>              // set white background
> >>>              g2.setColor(Color.white);
> >>>              g2.fillRect(0, 0, maxX, maxY);
> >>>
> >>>              ...
> >>>              // loop over ~ 20.000 lines with different colors and
> >
> > strokes
> >
> >>>...
> >>>              g2.setColor(colorLine);
> >>>              g2.setStroke(strokeLine);
> >>>              g2.draw(new Line2D.Double(line[i].startX, line[i].startY,
> >>>line[i].endX, line[i].endY));
> >>>              ...
> >>>        }
> >>>    }
> >>
>
>>--------------------------------------------------------------------------
> >>
> >>>Thanks in advance for any help or tips !!!
> >>>
> >>>Maik Diergardt
> >>>extreme.soft
> >>>
> >>>
> >>>---------------------------------------------------------------------
> >>>To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> >>>For additional commands, e-mail: batik-users-help@xml.apache.org
> >>>
> >>
> >>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> >>For additional commands, e-mail: batik-users-help@xml.apache.org
> >>
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> > For additional commands, e-mail: batik-users-help@xml.apache.org
> >
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
> For additional commands, e-mail: batik-users-help@xml.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-users-help@xml.apache.org


Mime
View raw message