[OpenJDK 2D-Dev] RFR: 8221741 [AIX] Unexpected X11 bitmap fonts are loaded because of fontconfig.properties
Ichiroh Takiguchi
takiguc at linux.vnet.ibm.com
Fri May 24 12:55:52 UTC 2019
Hello.
Could you review the fix and give me your suggestion, please ?
I really appreciate your feedback.
Change: https://cr.openjdk.java.net/~itakiguchi/8221741/webrev.02/
Bug: https://bugs.openjdk.java.net/browse/JDK-8221741
And I'd like to obtain a sponsor for this issue.
Thanks,
Ichiroh Takiguchi
On 2019-05-14 21:13, Ichiroh Takiguchi wrote:
> Hello Phil.
> I appreciate your comment.
>
> I tried to debug this issue from another side.
> I checked fontconfig.properties file by CompileFontConfig (.bfc build
> tool) with -verbose option [1]
> Following messages were displayed:
> Note: 'filename' entry is undefined for
> "-monotype-sanswt-medium-r-normal--*-%d-75-75-*-*-ucs2.cjk_japan-0"
> ...
> I could find out encoding name has "_" character.
> And '_' -> ' ' conversion was in FontConfiguration.
>
> I applied following fixes:
> src/java.desktop/share/classes/sun/awt/FontConfiguration.java
> * '_' -> ' ' conversion only applies before PIXEL_SIZE field on XLFD
> * fontconfig.bfc is built by boot compiler, so above fix does not
> affect.
> After reading fontconfig.bfc, data need to be modified
> src/java.desktop/unix/classes/sun/awt/X11FontManager.java
> * Fix typo for logging output
>
> Could you review the fix again ?
>
> Change: https://cr.openjdk.java.net/~itakiguchi/8221741/webrev.02/
> Bug: https://bugs.openjdk.java.net/browse/JDK-8221741
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8221741
>
> I'd like to obtain a sponsor for this issue.
>
> Thanks,
> Ichiroh Takiguchi
>
> On 2019-04-26 05:41, Phil Race wrote:
>> I am not sure about this. It would seem better to fix the config file.
>> Other config files have been carefully written to use the real XLFD
>> and if it changes in a different release, then you provide a new
>> one with the specific release file.
>>
>> Also I have no way to test this works for AIX, all I can say for sure
>> is that it will add extra overhead on other platforms.
>>
>> Also I am puzzled when I see this :
>> 449 &&
>> "FILE_NAMES_ALIASES".equals(st.sval)) {
>>
>> and then go read about this unfamiliar syntax :
>> https://www.x.org/archive/X11R7.5/doc/man/man1/mkfontdir.1.html
>>
>> I just can't imagine what the AIX fonts.alias file must look like
>> as your code is parsing XLFDs but that syntax is used to
>> say that the file might not have anything like that, instead if
>> a font is in a file called "DejaVuSans.ttf" that "DejaVuSans" is
>> automatically an X11 alias for that font, without any XLFDs involved
>> ..
>> At least that's how I read it.
>> Your code seems to expect that line at the beginning
>> and then says "and the rest of the file is aliases I want to read".
>> SFAICT it is perfectly legitimate to NOT have that line or have it
>> in a random place, and your code is broken.
>>
>> -phil.
>>
>>
>> On 4/25/19 5:27 AM, Ichiroh Takiguchi wrote:
>>> (Sorry, please ignore previous mail, it has wrong link for "Change")
>>>
>>> Hello Phil.
>>>
>>> I appreciate your suggestion.
>>>
>>> I could find out the root cause.
>>> XLFD format font name (which was on AIX's fontconfig.properties file)
>>> is not included
>>> into fonts.dir (fonts.scale) file.
>>> It was in fonts.alias file.
>>> It seems that Java could not find font file on fonts.dir,
>>> then it tried to use XLFD format font name to load X11's font for
>>> logical font.
>>>
>>> On AIX platform, TrueType font files had been changed several times.
>>> XLFD format font names were registered into fonts.alias file for
>>> compatibility.
>>>
>>> On this condition, I think adding fonts.alias support feature is
>>> better than
>>> fixing AIX's fontconfig.properties file.
>>>
>>> Could you review the fix ?
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8221741
>>> Change: https://cr.openjdk.java.net/~itakiguchi/8221741/webrev.01/
>>>
>>> I'd like to obtain a sponsor for this issue.
>>>
>>> Thanks,
>>> Ichiroh Takiguchi
>>>
>>> On 2019-04-20 03:55, Phil Race wrote:
>>>> Something must have gone wrong upstream to have this font registered
>>>> as a native font.
>>>> You should trace back to find out. I suggest to start with this code
>>>> in SunFontManager.java,
>>>> where I am guessing you don't have the file name for some reason.
>>>>
>>>> protected void registerFontFile(String fontFileName, String[]
>>>> nativeNames,
>>>>
>>>> int fontRank, boolean defer) {
>>>> // REMIND: case compare depends on platform
>>>> if (registeredFontFiles.contains(fontFileName)) {
>>>> return;
>>>> }
>>>> int fontFormat;
>>>> if (ttFilter.accept(null, fontFileName)) {
>>>> fontFormat = FONTFORMAT_TRUETYPE;
>>>> } else if (t1Filter.accept(null, fontFileName)) {
>>>> fontFormat = FONTFORMAT_TYPE1;
>>>> } else {
>>>> fontFormat = FONTFORMAT_NATIVE; /// <<<<< I
>>>> think you are getting here, but why ?
>>>> }
>>>>
>>>> -phil.
>>>>
>>>> On 4/19/19 5:18 AM, Ichiroh Takiguchi wrote:
>>>>> Hello Phil.
>>>>>
>>>>> I'm using standard OpenJDK JDK13 b13 for AIX, like:
>>>>> openjdk version "13-internal" 2019-09-17
>>>>> OpenJDK Runtime Environment (build 13-internal+0-jdk13-13)
>>>>> OpenJDK 64-Bit Server VM (build 13-internal+0-jdk13-13, mixed mode)
>>>>> (Compiled it by myself)
>>>>>
>>>>> To see stack trace, I tried following instruction:
>>>>> 1. Login to AIX box from another machine
>>>>> 2. Login to AIX box from AIX CDE on local AIX box Japanese locale
>>>>> (Ja_JP) or C locale
>>>>> 3. Open terminal, like dtterm on local AIX box
>>>>> 4. Start SwingSet2 demo program
>>>>> 5. Check java's process id
>>>>> 6. Move mouse cursor to 2nd icon (ToolTipDemo) from right side
>>>>> 7. Move mouse cursor on cow image to display ToolTip
>>>>> 8. Keep moving the mouse cursor slowly, mouse cursor may be
>>>>> stopped
>>>>> (I said this situation was "frozen".)
>>>>> 9. After Xserver was frozen, execute "kill -3" with java process
>>>>> id
>>>>> 10. Then stack trace is displayed
>>>>>
>>>>> "AWT-EventQueue-0" #14 prio=6 os_prio=57 cpu=1362.57ms
>>>>> elapsed=31.90s tid=0x0000000113f44800 nid=0x1516 runnable
>>>>> [0x0000000114159000]
>>>>> java.lang.Thread.State: RUNNABLE
>>>>> at
>>>>> sun.font.NativeFont.countGlyphs(java.desktop at 13-internal/Native
>>>>> Method)
>>>>> at
>>>>> sun.font.NativeFont.getNumGlyphs(java.desktop at 13-internal/NativeFont.java:312)
>>>>> at
>>>>> sun.font.NativeFont.<init>(java.desktop at 13-internal/NativeFont.java:90)
>>>>> at
>>>>> sun.font.SunFontManager.registerFontFile(java.desktop at 13-internal/SunFontManager.java:1023)
>>>>> at
>>>>> sun.font.SunFontManager.initialiseDeferredFont(java.desktop at 13-internal/SunFontManager.java:946)
>>>>> ...
>>>>>
>>>>> I could recreate same issue on AdoptOpenJDK JDK12 with Hotspot JVM.
>>>>>
>>>>> Thanks,
>>>>> Ichiroh Takiguchi
>>>>>
>>>>> On 2019-04-19 05:20, Phil Race wrote:
>>>>>> On startup ?
>>>>>> What is the Java stack trace that gets you into that call ?
>>>>>> Is it this with any modified IBM code, or pure OpenJDK ?
>>>>>>
>>>>>> -phil.
>>>>>>
>>>>>> On 4/17/19 11:55 PM, Ichiroh Takiguchi wrote:
>>>>>>> Hello Phil.
>>>>>>>
>>>>>>> I appreciate your reply.
>>>>>>> I put problem analysis information in JDK-8221741 [1].
>>>>>>>
>>>>>>> The issue is AIX's Xserver was frozen about 25 secs on my local
>>>>>>> AIX box.
>>>>>>> According to my problem analysis,
>>>>>>> In this case, Java tried to load large 11 X11 bitmap fonts via
>>>>>>> XLoadQueryFont() on Xlib.
>>>>>>> The situation can emulate by "xlsfonts -ll" command, like:
>>>>>>>
>>>>>>> $ time xlsfonts -ll -fn
>>>>>>> "-monotype-sansmonowt-medium-r-normal--*-80-72-72-*-*-ucs2.cjk_japan-0"
>>>>>>> ...
>>>>>>> real 0m2.07s
>>>>>>> user 0m0.00s
>>>>>>> sys 0m0.00s
>>>>>>>
>>>>>>> One of solution is, Unix's fontconfig.properties can support
>>>>>>> TrueType/Type1 font name format. [2]
>>>>>>>
>>>>>>> Anyway,
>>>>>>> I don't know the reason why X11 bitmap font is required for
>>>>>>> logical font.
>>>>>>> (I don't know how to use X11 bitmap font for physical font.
>>>>>>> I could not see X11 bitmap font name via
>>>>>>> GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames().)
>>>>>>> I just want to fix Xserver frozen issue.
>>>>>>> I appreciate your advice.
>>>>>>> (Other solutions are welcome)
>>>>>>>
>>>>>>> [1] https://bugs.openjdk.java.net/browse/JDK-8221741
>>>>>>> [2] https://cr.openjdk.java.net/~itakiguchi/8221741/webrev.00/
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Ichiroh Takiguchi
>>>>>>> IBM Japan, Ltd.
>>>>>>>
>>>>>>> On 2019-04-04 01:09, Philip Race wrote:
>>>>>>>> On 4/2/19, 9:27 AM, Ichiroh Takiguchi wrote:
>>>>>>>>> Hello.
>>>>>>>>> (I am sorry to post it again. Previously, I posted the wrong
>>>>>>>>> mailing list.)
>>>>>>>>>
>>>>>>>>> Could you review the fix ?
>>>>>>>>>
>>>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8221741
>>>>>>>>> Change:
>>>>>>>>> https://cr.openjdk.java.net/~itakiguchi/8221741/webrev.00/
>>>>>>>>>
>>>>>>>>> I'd like to obtain a sponsor for this issue.
>>>>>>>>>
>>>>>>>>> On AIX platform, fontconfig.properties file is used to pick up
>>>>>>>>> proper fonts.
>>>>>>>>> TrueType font settings are written by XLFD format on
>>>>>>>>> fontconfig.properties file.
>>>>>>>>>
>>>>>>>>> On current implementation, Java tries to load X11 bitmap fonts
>>>>>>>>> even if these are not used.
>>>>>>>>
>>>>>>>> I think you need to clarify what you mean here.
>>>>>>>>
>>>>>>>> I'd like you to provide a step by step analysis of what happens
>>>>>>>> and
>>>>>>>> what the effect of your proposed change is on AIX *AND* what it
>>>>>>>> might
>>>>>>>> mean for other X11 platforms, as I don't have time to reverse
>>>>>>>> engineer the
>>>>>>>> reasons for the odd-looking change.
>>>>>>>> It looks like a hack to short-circuit support your syntax.
>>>>>>>> Right now I am saying no to this.
>>>>>>>>
>>>>>>>>> This font load work is almost name as "xlsfonts -ll".
>>>>>>>>> It spends many CPU time and memories.
>>>>>>>>>
>>>>>>>>> Just font name format should be supported.
>>>>>>>>
>>>>>>>> Not clear enough for me.
>>>>>>>>
>>>>>>>> -phil.
>>>>>>>>>
>>>>>>>>> To SAP representative,
>>>>>>>>> I have a question about copyright year on
>>>>>>>>> make/data/fontconfig/aix.fontconfig.properties.
>>>>>>>>> Please let me know how I should write down copyright year.
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Ichiroh Takiguchi
>>>>>>>>> IBM Japan, Ltd.
>>>>>>>>>
>>>>>>>
>>>>>
>>>
More information about the ppc-aix-port-dev
mailing list