sun/java2d/SunGraphics2D/EmptyClipRenderingTest.java

Print this page

        

@@ -1,14 +1,26 @@
-/**
- * @test
- * @bug 6335200 6419610
- * @summary Tests that we don't render anything if specific empty clip is set
- * @author Dmitri.Trembovetski@Sun.COM: area=Graphics
- * @run main EmptyClipRenderingTest
- * @run main/othervm -Dsun.java2d.noddraw=true EmptyClipRenderingTest
- * @run main/othervm -Dsun.java2d.pmoffscreen=true EmptyClipRenderingTest
- * @run main/othervm -Dsun.java2d.opengl=true EmptyClipRenderingTest
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
  */
 
 import java.awt.AWTException;
 import java.awt.Canvas;
 import java.awt.Color;

@@ -30,20 +42,30 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
 import javax.imageio.ImageIO;
 import sun.awt.ConstrainableGraphics;
-import sun.java2d.SunGraphics2D;
 
+/**
+ * @test
+ * @bug 6335200 6419610
+ * @summary Tests that we don't render anything if specific empty clip is set
+ * @author Dmitri.Trembovetski@Sun.COM: area=Graphics
+ * @run main EmptyClipRenderingTest
+ * @run main/othervm -Dsun.java2d.noddraw=true EmptyClipRenderingTest
+ * @run main/othervm -Dsun.java2d.pmoffscreen=true EmptyClipRenderingTest
+ * @run main/othervm -Dsun.java2d.opengl=true EmptyClipRenderingTest
+ */
 public class EmptyClipRenderingTest {
     static final int IMG_W = 400;
     static final int IMG_H = 400;
 
     // generated rectangles
     static HashSet<Rectangle> rects;
 
-    volatile boolean onscreenTestCompleted = false;
+    volatile boolean isActivated = false;
+    volatile boolean isPainted;
     private static boolean showErrors = false;
 
     public EmptyClipRenderingTest() {
         // initialize clip/render region rectangles
         initClips();

@@ -131,50 +153,63 @@
      */
     private BufferedImage testOnscreen() throws HeadlessException {
         final Canvas destComponent;
         final Object lock = new Object();
         Frame f = new Frame("Test Frame");
+        f.setUndecorated(true);
         f.add(destComponent = new Canvas() {
-            public void paint(Graphics g) {}
+            public void paint(Graphics g) {
+                isPainted = true;
+            }
             public Dimension getPreferredSize() {
                 return new Dimension(IMG_W, IMG_H);
             }
         });
         f.addWindowListener(new WindowAdapter() {
             public void windowActivated(WindowEvent e) {
-                if (!onscreenTestCompleted){
-                    runTest((Graphics2D)destComponent.getGraphics());
+                if (!isActivated) {
                     synchronized (lock) {
-                        onscreenTestCompleted = true;
+                        isActivated = true;
                         lock.notify();
                     }
                 }
             }
         });
         f.pack();
+        f.setLocationRelativeTo(null);
         f.setVisible(true);
         synchronized(lock) {
-            while (!onscreenTestCompleted) {
+            while (!isActivated) {
                 try {
                     lock.wait(100);
                 } catch (InterruptedException ex) {
                     ex.printStackTrace();
                 }
             }
         }
-        Robot r = null;
+        Robot r;
         try {
             r = new Robot();
         } catch (AWTException ex) {
             throw new RuntimeException("Can't create Robot");
         }
+        BufferedImage bi;
+        int attempt = 0;
+        do {
+            if (++attempt > 10) {
+                throw new RuntimeException("Too many attempts: " + attempt);
+            }
+            isPainted = false;
+            runTest((Graphics2D) destComponent.getGraphics());
+            r.waitForIdle();
         Toolkit.getDefaultToolkit().sync();
-        BufferedImage bi = r.createScreenCapture(
+            bi = r.createScreenCapture(
             new Rectangle(destComponent.getLocationOnScreen().x,
                           destComponent.getLocationOnScreen().y,
                           destComponent.getWidth(),
                           destComponent.getHeight()));
+        } while (isPainted);
         f.setVisible(false);
         f.dispose();
         return bi;
     }