From: Hubert Figuiere (hfiguiere_at_teaser.fr)
Date: Fri Dec 12 2003 - 16:53:14 EST
Hi,
While porting AbiWord to MacOS X, I found out a few performance
problems, mostly due to MacOS X Core Graphics layer, but also to some
design issues in the GR_Graphics class and its use, in the Abi
framework.
The main problem is that for each graphics operation we need:
-to setup a graphic context (costly)
-setup the graphic properties (line size, etc) and clipping
-do our stuff
-reset everything
All of this, at least on MacOS X, but I'm sure that it does too on
other platforms, it is *costly*. I actually found myself some huge
bottleneck elsewhere to reduce the overhead, but there is still too
much IMHO.
I thought about a solution and found actually 2 that would work for
any platform, with both pros and cons.
Solution 1, probably the preferred one:
-Surround any drawing with startDraw()/endDraw() calls (everywhere in
XP code)
-implement these 2 methods to do the setup pre and post draw.
(GR_Graphics subclass)
Pro:
-simple and efficient
-minimum platform work (initial can be empty implementations)
Cons:
-need to track any drawing
Solution 2, the smarter but more complex:
-Implement all the drawing operation in XP land (GR_Graphics) to stack
them up in a graphic pipeline
-Implement in GR_Graphics::sync() culling of the whole graphic pipeline
-Make sure we call sync() after each drawing (not each operations)
Pro:
-much smarter and elegant
-can be really efficient
Cons
-large platform rework effort
-complex and probably harder to debug
What are your opinions ? If no one object, I'm going to spend time on
solution 1 as I really need to speed up graphics.
Hub
-- AbiWord maintainer - Lille, France http://www.figuiere.net/hub/ GPG fingerprint: 6C44 DB3E 0BF3 EAF5 B433 239A 5FEE 05E6 A56E 15A3
This archive was generated by hypermail 2.1.4 : Fri Dec 12 2003 - 16:52:36 EST