Mercurial > hg > openjdk > aarch64-port > jdk
changeset 998:59696dfd5455
6727719: Performance of TextLayout.getBounds()
Reviewed-by: jgodinez, dougfelt
author | prr |
---|---|
date | Thu, 12 Mar 2009 12:01:49 -0700 |
parents | 8d5144dfc642 |
children | 9318628e8eee |
files | src/share/classes/sun/font/FileFontStrike.java |
diffstat | 1 files changed, 15 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/sun/font/FileFontStrike.java Thu Mar 05 10:56:06 2009 -0800 +++ b/src/share/classes/sun/font/FileFontStrike.java Thu Mar 12 12:01:49 2009 -0700 @@ -842,8 +842,22 @@ return fileFont.getGlyphOutlineBounds(pScalerContext, glyphCode); } + private ConcurrentHashMap<Integer, GeneralPath> outlineMap; + GeneralPath getGlyphOutline(int glyphCode, float x, float y) { - return fileFont.getGlyphOutline(pScalerContext, glyphCode, x, y); + if (outlineMap == null) { + outlineMap = new ConcurrentHashMap<Integer, GeneralPath>(); + } + GeneralPath gp = (GeneralPath)outlineMap.get(glyphCode); + if (gp == null) { + gp = fileFont.getGlyphOutline(pScalerContext, glyphCode, 0, 0); + outlineMap.put(glyphCode, gp); + } + gp = (GeneralPath)gp.clone(); // mutable! + if (x != 0f || y != 0f) { + gp.transform(AffineTransform.getTranslateInstance(x, y)); + } + return gp; } GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) {