[OpenJDK 2D-Dev] [PATCH] FontManager refactoring

Roman Kennke roman.kennke at aicas.com
Thu Jan 8 21:08:59 UTC 2009


What's the status of this?

/Roman

Am Mittwoch, den 10.12.2008, 15:13 +0100 schrieb Roman Kennke:
> Hi Phil,
> 
> I finally got around to fix up the font manager stuff. Some comments
> from me inline.
> 
> >  > this is the big FontManager refactoring patch I already mentioned a
> >  > couple of times. It's primary purpose is to make the font implementation
> >  > more portable (or: portable at all), allowing alternative/derived
> >  > implementations to be plugged in. The general architecture breaks down
> >  > as follows:
> > 
> > Plugging in alternate architectures is somewhat interesting but the refactoring
> > priority I see is that the FontManager class which has grown too large and
> > needs to be "downsized" This is done, which is OK,
> 
> Well, for me it's equally important to plug in something else. On the
> systems I work on I have no system fonts available, so I'd like them to
> be built in and loaded from the application JAR instead. Works quite
> nice until now, although it needs some more work in the fontmanager
> code, but this should come after this patch here is through.
> 
> >  and the most important
> > part of how this is done is to separate out the platform, and that's partly
> > handled but, not as much as I'd like.  For example : SunFontManager.java :
> > getDefaultPlatformFont() seems like a perfect candidate for pushing
> > down into the platform code.
> > The FontConfigManager class should go with it into the X11 side of the code.
> 
> I did this now. The fontmanager stuff is now in the solaris tree, and
> the getDefaultPlatformFont() abstract in SFM and implemented in both
> platform subclasses.
> 
> 
> > It would be nice if each of these new classes had its charter documented
> > at the top, in a class comment.
> 
> Fixed. I only added some rather small comments, probably needs
> extension. The thing is that to me it's pretty clear what each of these
> classes should do, would be nice to have somebody else look at it and
> see what is missing.
> 
> > I guess previously we had an X11/Win32GE instance for API reasons, but when the
> > font code was moved out to the FontManager subclasses it maybe wasn't
> > needed to make that also have an instance?
> 
> TBH, I don't understand this question. Have instance of what?
> 
> > Is DefaultFontManager really necessary?? Seems not to me.
> 
> Removed. This was an artifact from me not wanting to have native stuff
> in SFM. Now the native stuff is simply moved to the platform
> implementations.
> 
> > Also a number of changes appear unrelated, eg :
> > make/java/nio/Makefile
> > make/java/nio/spp.sh
> > src/share/classes/com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.java
> > src/share/classes/com/sun/jmx/mbeanserver/MBeanIntrospector.java
> 
> Also an artifact of me fixing broken stuff in other places. I removed
> this.
> 
> > make/sun/font/mapfile-vers
> > The disappearance of these seems strange  ..
> >    40                 Java_sun_font_FontManager_getFont2D;
> >    41                 Java_sun_font_FontManager_setFont2D;
> >    42                 Java_sun_font_FontManager_isCreatedFont;
> >    43                 Java_sun_font_FontManager_setCreatedFont;
> >   .. ah, I see these are now using reflection In FontUtilities
> > Hmm. I don't think this change should be made
> > 1) As it stands it'll get a SecurityException
> > 2) I'm very dubious about changing the accessibility of these internal methods
> > Looks like a potential security hole.
> > 3) I'd want to such a change separately anyway to test its relative performance.
> 
> As mentioned earlier, I think the best solution to this code is the
> SharedSecrets mechanism, which has the advantage to be
> compile-time-safe, doesn't need access checks, should be secure and
> should have best performance (no JNI call, no reflection call).
> 
> > src/share/classes/java/awt/Component.java, and
> > src/windows/classes/sun/awt/windows/WToolkit.java
> > This was left in for a licensee, I'd be inclined to leave it alone
> > unless removing it has definite benefits.
> > 2770         // REMIND: PlatformFont flag should be obsolete soon...
> > 2771         if (sun.font.FontManager.usePlatformFontMetrics()) {
> > 2772             if (peer != null &&
> > 2773                 !(peer instanceof LightweightPeer)) {
> > 2774                 return peer.getFontMetrics(font);
> > 2775             }
> > 2776         }
> > 2777         return sun
> 
> I put it back in, including a comment to not remove it.
> 
> > We don't need these and similar changes, since they aren't pre-defined constants
> >   :
> > isSolaris->IS_SOLARIS, isLinux->IS_LINUX
> > 
> > ie all caps is just for pre-defined constants, not ones determined at run time.
> 
> Fixed.
> 
> > Cmap.java
> > Please try to keep lines <=80 chars, eg line 411 here :
> >   410             if (FontUtilities.isLogging()) {
> >   411                 FontUtilities.getLogger().warning("Cmap subtable overflows
> > buffer.");
> >   412             }
> >   413         }
> 
> Hmm, How can I check all my code for this?
> 
> > CompositeFont.java
> >   57     private SunFontManager fm = null;
> > 
> > I don't see why every comp-font needs a ptr to this singleton.
> 
> Removed.
> 
> > PhysicalStrike.java
> > - 29 import java.awt.GraphicsEnvironment;
> > this isn't used
> 
> Removed.
> 
> > I'm not sure about the movement of addToPool() to TrueTypeFont.java
> > Theoretically its independent of the font format, and could apply
> > to any FileFont subclass.
> > also the file closer shut down hook isn't needed except for created
> > fonts from tmp files, so that shouldn't be started unless needed.
> 
> I moved this code to a new class called FontChannelPool, and only start
> the hook when needed.
> 
> > FontManager.java has a lot of "TODO" comments
> 
> I added the missing comments.
> 
> > Why is FontManagerForSGE needed?
> > ie why cannot SunFontManager be the class in which these are defined.
> 
> I think I already replied to this. This is needed when an implementation
> wants to subclass SunGraphicsEnvironment but not reuse SunFontManager,
> just like I do. I have a fairly close GraphicsEnvironment, but a
> completely different FontManager here.
> 
> > Win32FontManager :
> >    22     // FIXME: Windows build still needs to be abstracted from
> >    23     // SunGraphicEnvironment
> >    24
> >   What does that mean?
> 
> Dunno. :-) I removed it.
> 
> >    25     // please, don't reference sgEnv in any other code in this class
> >    26     // use getGraphicsEnvironment.
> >    27     @Deprecated
> > This doesn't seem an appropriate use of deprecated.
> 
> >    28     private static SunGraphicsEnvironment sgEnv = null;
> 
> Infact, this fields wasn't even used anymore, so I removed it.
> 
> The updated webrev can be found here:
> 
> http://kennke.org/~roman/fontmanager/webrev/
> 
> Have fun, Roman
> 
-- 
Dipl.-Inform. (FH) Roman Kennke, Software Engineer, http://kennke.org
aicas Allerton Interworks Computer Automated Systems GmbH
Haid-und-Neu-Straße 18 * D-76131 Karlsruhe * Germany
http://www.aicas.com   * Tel: +49-721-663 968-48
USt-Id: DE216375633, Handelsregister HRB 109481, AG Karlsruhe
Geschäftsführer: Dr. James J. Hunt




More information about the 2d-dev mailing list