Return-Path: X-Original-To: apmail-jmeter-dev-archive@minotaur.apache.org Delivered-To: apmail-jmeter-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D675F176A6 for ; Thu, 20 Nov 2014 22:57:57 +0000 (UTC) Received: (qmail 17860 invoked by uid 500); 20 Nov 2014 22:57:57 -0000 Delivered-To: apmail-jmeter-dev-archive@jmeter.apache.org Received: (qmail 17823 invoked by uid 500); 20 Nov 2014 22:57:57 -0000 Mailing-List: contact dev-help@jmeter.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jmeter.apache.org Delivered-To: mailing list dev@jmeter.apache.org Delivered-To: moderator for dev@jmeter.apache.org Received: (qmail 47373 invoked by uid 99); 20 Nov 2014 10:47:32 -0000 X-ASF-Spam-Status: No, hits=-0.1 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_MED,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of balchandra.vaidya@oracle.com designates 156.151.31.81 as permitted sender) Message-ID: <546DC69F.4020400@oracle.com> Date: Thu, 20 Nov 2014 10:46:55 +0000 From: Balchandra Vaidya User-Agent: Mozilla/5.0 (X11; SunOS i86pc; rv:17.0) Gecko/20140429 Thunderbird/17.0.11 MIME-Version: 1.0 To: Philippe Mouawad CC: rory.odonnell@oracle.com, Dalibor Topic , "dev@jmeter.apache.org" Subject: Re: Fwd: JAVA8u20 and JAVA8u25 Regression in Graphics2D drawing of derived Fonts ? References: <546CACBE.7010900@oracle.com> <546CBB1A.3050907@oracle.com> <546CDB36.1030800@oracle.com> In-Reply-To: Content-Type: multipart/alternative; boundary="------------090400050506010704070300" X-Source-IP: ucsinet22.oracle.com [156.151.31.94] X-Virus-Checked: Checked by ClamAV on apache.org --------------090400050506010704070300 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi Philippe, On 11/19/14 08:53 PM, Philippe Mouawad wrote: > Hello, > Thanks for fast answer and workaround although as it's a third party > library it will be a problem. I tested workaround it is not enough as > with it test is moved from its location. > Updated the bug JDK-8065373 with your comments. > Another point, looking at: > https://bugs.openjdk.java.net/browse/JDK-8031109 > > I don't see any progress on it , any chance it gets fixed ? I tested > on Java 9, it is still there. Thanks for confirming. I have added jdk 9 as affected version and also increased the priority. Thanks for reporting it. Regards Balchandra > As there is a comment saying this, I am someone who is reporting it :-) :/ > Nevertheless if someone have a report against 9 - please reopen and > add affectedVersion 9 or 7u specific escalations might be reopen to > Sustaining / > > Regards > Philippe > > On Wed, Nov 19, 2014 at 7:02 PM, Balchandra Vaidya > > > wrote: > > > Hi Philippe, > > > Thanks for the update. Sergey Bylokhov provided a following > workaround in the bug JDK-8065373 > . > > Workaround is to apply a transfrom to the graphics instead of > font: > + g2.transform(rotator); > - g2.setFont(font.deriveFont(rotator)); > > > He has also provided a suggested fix. A blog [1] from Dalibor > might help you to track the JBS bug yourself. > > > > Thanks > Balchandra > > [1] http://robilad.livejournal.com/139637.html > > > > > > On 11/19/14 04:58 PM, Philippe Mouawad wrote: >> Hi, >> I tested on windows 7 , issue is not reproduced. >> Don't have Linux to test. >> >> Maybe other member of team can do this. >> >> Regards >> >> On Wed, Nov 19, 2014 at 4:45 PM, Balchandra Vaidya >> > > wrote: >> >> >> Hi Philippe, >> >> Here is the JBS ID - >> https://bugs.openjdk.java.net/browse/JDK-8065373. >> Did you see this issue only on Mac OS or did you see it on >> another >> OS/platform such as Windows? >> >> Thanks for reporting it. >> >> Regards, >> Balchandra >> >> >> >> >> On 11/19/14 03:11 PM, Philippe Mouawad wrote: >>> Hi, >>> >>> >>> JI-9016915 >>> >>> Regards >>> Philippe >>> >>> On Wed, Nov 19, 2014 at 4:10 PM, Philippe Mouawad >>> >> > wrote: >>> >>> Hello Rory, >>> I posted a bug, waiting for mail notification. >>> It seems bug appeared after Java 7 u40 as I just tested >>> now with Java7 u71 and it is also broken there. >>> I didn't test versions between 7u40 and 7u71. >>> >>> Regards >>> Philippe >>> >>> On Wed, Nov 19, 2014 at 3:44 PM, Rory O'Donnell >>> >> > wrote: >>> >>> Hi Philippe, >>> >>> Can you log a Java Incident and send us the JI number ? >>> >>> Rgds,Rory >>> On 19/11/2014 14:36, Philippe Mouawad wrote: >>> >>> Hello Rory, >>> For information, I submitted this question on >>> Swing-dev , I am not sure it >>> is the right list, if so hope you can help. >>> >>> Regards >>> Philippe >>> ---------- Forwarded message ---------- >>> From: Philippe Mouawad >>> >> > >>> Date: Wed, Nov 19, 2014 at 3:34 PM >>> Subject: JAVA8u20 and JAVA8u25 Regression in >>> Graphics2D drawing of derived >>> Fonts ? >>> To: swing-dev@openjdk.java.net >>> >>> >>> >>> Hello, >>> We had recently a report of a bug on Apache JMeter: >>> >>> - >>> https://issues.apache.org/bugzilla/show_bug.cgi?id=57221 >>> >>> >>> >>> The bug only occurs on Java 8 (u20 and u25). >>> >>> We use jCharts library. >>> >>> I narrowed the bug and it seems to come from the >>> way derived fonts are >>> drawn: >>> >>> Library uses: >>> >>> public static final AffineTransform >>> VERTICAL_ROTATION = >>> AffineTransform.getRotateInstance( -Math.PI / 2 ); >>> >>> Then >>> >>> this.affineTransform= VERTICAL_ROTATION; >>> this.font.deriveFont( this.affineTransform ) >>> >>> So I build a stupid and ugly isolated class to >>> show issue, run it on Java 7 >>> display is fine , run it on Java8 result is strange. >>> >>> package org.jCharts; >>> >>> import java.awt.Color; >>> import java.awt.Dimension; >>> import java.awt.Font; >>> import java.awt.Graphics; >>> import java.awt.Graphics2D; >>> import java.awt.RenderingHints; >>> import java.awt.font.FontRenderContext; >>> import java.awt.font.LineMetrics; >>> import java.awt.geom.AffineTransform; >>> import java.awt.geom.GeneralPath; >>> import java.awt.geom.Rectangle2D; >>> >>> import javax.swing.JFrame; >>> import javax.swing.JPanel; >>> >>> public class Test extends JPanel { >>> Rectangle2D.Float rect = new >>> Rectangle2D.Float(200, 200, 220, 35); >>> // float theta = 1.1748778437843f; >>> double theta = Math.PI / 6; >>> >>> @Override >>> protected void paintComponent(Graphics g) { >>> super.paintComponent(g); >>> Graphics2D g2 = (Graphics2D) g; >>> g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, >>> RenderingHints.VALUE_ANTIALIAS_ON); >>> g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, >>> RenderingHints.VALUE_FRACTIONALMETRICS_ON); >>> g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, >>> RenderingHints.VALUE_STROKE_PURE); >>> g2.setPaint(Color.blue); >>> Font font = g2.getFont().deriveFont(18f); >>> g2.setFont(font); >>> FontRenderContext frc = g2.getFontRenderContext(); >>> String s = "This text should be rotated"; >>> float width = (float) >>> font.getStringBounds(s, frc).getWidth(); >>> LineMetrics lm = font.getLineMetrics(s, frc); >>> float height = lm.getAscent() + >>> lm.getDescent(); >>> // Scale text into rect. >>> float xScale = rect.width / width; >>> float yScale = rect.height / height; >>> float scale = (xScale > yScale) ? >>> yScale : xScale; >>> // Locate string origin. >>> double x = rect.x; >>> double y = rect.y + (rect.height + >>> scale * height) / 2 - scale >>> * lm.getDescent(); >>> AffineTransform at = >>> AffineTransform.getTranslateInstance(x, y); >>> at.scale(scale, scale); >>> AffineTransform rotator = new AffineTransform(); >>> rotator.rotate(theta, rect.getCenterX(), >>> rect.getCenterY()); >>> GeneralPath rect2 = new GeneralPath( >>> rotator.createTransformedShape(rect)); >>> // Draw with no rotation. >>> g2.draw(rect); >>> g2.setPaint(Color.red); >>> g2.setFont(font.deriveFont(at)); >>> g2.drawString(s, 0, 0); >>> // Rotate once. >>> g2.setPaint(Color.blue); >>> g2.draw(rect2); >>> rotator.concatenate(at); >>> g2.setFont(font.deriveFont(rotator)); >>> g2.setPaint(Color.red); >>> g2.drawString(s, 0, 0); >>> // Rotate again. >>> rotator.setToIdentity(); >>> rotator.rotate(2 * theta, rect.getCenterX(), >>> rect.getCenterY()); >>> rect2 = new >>> GeneralPath(rotator.createTransformedShape(rect)); >>> g2.setPaint(Color.blue); >>> g2.draw(rect2); >>> rotator.concatenate(at); >>> g2.setFont(font.deriveFont(rotator)); >>> g2.setPaint(Color.red); >>> g2.drawString(s, 0, 0); >>> // Check scaled string bounds. >>> // this was handled by the fractional >>> metrics rendering hint >>> } >>> >>> public static void main(String[] args) { >>> Test test = new Test(); >>> test.setPreferredSize(new Dimension(800, 600)); >>> JFrame f = new JFrame(); >>> f.getContentPane().add(test); >>> f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); >>> f.pack(); >>> f.setVisible(true); >>> } >>> } >>> >>> Regards >>> Philippe M. >>> >>> >>> >>> >>> -- >>> Rgds,Rory O'Donnell >>> Quality Engineering Manager >>> Oracle EMEA , Dublin, Ireland >>> >>> >>> >>> >>> -- >>> Cordialement. >>> Philippe Mouawad. >>> >>> >>> >>> >>> >>> -- >>> Cordialement. >>> Philippe Mouawad. >>> >>> >> >> >> >> >> -- >> Cordialement. >> Philippe Mouawad. >> >> > > > > > -- > Cordialement. > Philippe Mouawad. > > --------------090400050506010704070300--