Skip to content

Commit

Permalink
8328154: Convert sun/java2d/loops/CopyAreaSpeed.java applet test to main
Browse files Browse the repository at this point in the history
Reviewed-by: kizune, abhiscxk
  • Loading branch information
Tejesh R committed Mar 19, 2024
1 parent 9059727 commit 652fb3a
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 223 deletions.
39 changes: 0 additions & 39 deletions test/jdk/sun/java2d/loops/CopyAreaSpeed.html

This file was deleted.

243 changes: 59 additions & 184 deletions test/jdk/sun/java2d/loops/CopyAreaSpeed.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2024, 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
Expand All @@ -20,53 +20,72 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import java.util.Date;

/*
* @test
* @bug 4189070
* @summary This test prints out the time it takes for a certain amount of
* copyArea calls to be completed. Because the performance measurement is
* relative, this code only provides a benchmark to run with different releases
* to compare the outcomes.
* @run applet/manual=done CopyAreaSpeed.html
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @run main/manual CopyAreaSpeed
*/

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class CopyAreaSpeed extends Applet implements Runnable {
int top = 0;
public class CopyAreaSpeed {
public static void main(String args[]) throws Exception {
String instructions = """
This test prints out the time it takes for a certain amount
of copyArea calls to be completed. Because the performance
measurement is relative, this code only provides a benchmark
to run with different releases to compare the outcomes.
""";

PassFailJFrame.builder()
.title("Test Instructions")
.instructions(instructions)
.rows(5)
.columns(35)
.testUI(CopyAreaSpeed::initialize)
.build()
.awaitAndCheck();
}

public void init() {
public static JFrame initialize() {
JFrame frame = new JFrame("Copy Area Test");
frame.add(new CopyAreaSpeedTest());
frame.setSize(300, 320);
frame.setVisible(true);
return frame;
}
}

class CopyAreaSpeedTest extends Container implements Runnable {
int top = 0;
public static String result;

public CopyAreaSpeed()
{
public CopyAreaSpeedTest() {
super();
String[] instructions =
{
"This test prints out the time it takes for a certain amount ",
"of copyArea calls to be completed. Because the performance ",
"measurement is relative, this code only provides a benchmark ",
"to run with different releases to compare the outcomes."
};
Sysout.createDialogWithInstructions( instructions );
(new Thread(this)).start();
Button bt = new Button("Hello");
bt.setBounds(50, 10, 50, 22);
bt.setVisible(false);
add(bt);
}

public void update(Graphics g)
{
public void update(Graphics g) {
paint(g);
}

public void paint(Graphics g)
{
synchronized(this) {
public void paint(Graphics g) {
synchronized (this) {
Rectangle rct = g.getClipBounds();
g.setColor(Color.white);
g.fillRect(rct.x, rct.y, rct.width, rct.height);
Expand All @@ -78,19 +97,18 @@ public void paint(Graphics g)
if (y > rct.y) {
int z = y / 20 + top;
g.drawString("" + z, 10, y);
} /* endif */
} // endfor
}
}
}
}

static long millsec(Date s, Date e) {
long ts = s.getTime();
long te = e.getTime();
return te-ts;
return te - ts;
}

public void run()
{
public void run() {
int count = 1000;
int loops = count;
Date start;
Expand All @@ -100,7 +118,7 @@ public void run()
while (count-- > 0) {
Dimension dm = getSize();
if (dm != null && dm.width != 0 && dm.height != 0) {
synchronized(this) {
synchronized (this) {
top++;
Graphics g = getGraphics();
g.copyArea(0, 20, dm.width, dm.height - 20, 0, -20);
Expand All @@ -111,158 +129,15 @@ public void run()
}
try {
Thread.sleep(1);
} catch(Exception ex) {
} catch (Exception ex) {
ex.printStackTrace();
}
}
end = new Date();
Sysout.println("copyArea X "+loops+" = "+ millsec(start, end) + " msec");
}

public static void main(String args[]) {
Frame frm = new Frame("CopyAreaSpeed");
frm.add(new CopyAreaSpeed());
frm.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
System.exit(0);
}
});
frm.setSize(500, 500);
frm.show();
Graphics g = getGraphics();
g.setFont(getFont());
g.setColor(Color.black);
result = "copyArea X " + loops + " = " + millsec(start, end) + " msec";
JOptionPane.showMessageDialog(null, result);
}
}
/****************************************************
Standard Test Machinery
DO NOT modify anything below -- it's a standard
chunk of code whose purpose is to make user
interaction uniform, and thereby make it simpler
to read and understand someone else's test.
****************************************************/

/**
This is part of the standard test machinery.
It creates a dialog (with the instructions), and is the interface
for sending text messages to the user.
To print the instructions, send an array of strings to Sysout.createDialog
WithInstructions method. Put one line of instructions per array entry.
To display a message for the tester to see, simply call Sysout.println
with the string to be displayed.
This mimics System.out.println but works within the test harness as well
as standalone.
*/
class Sysout
{
private static TestDialog dialog;

public static void createDialogWithInstructions( String[] instructions )
{
dialog = new TestDialog( new Frame(), "Instructions" );
dialog.printInstructions( instructions );
dialog.show();
println( "Any messages for the tester will display here." );
}

public static void createDialog( )
{
dialog = new TestDialog( new Frame(), "Instructions" );
String[] defInstr = { "Instructions will appear here. ", "" } ;
dialog.printInstructions( defInstr );
dialog.show();
println( "Any messages for the tester will display here." );
}


public static void printInstructions( String[] instructions )
{
dialog.printInstructions( instructions );
}


public static void println( String messageIn )
{
dialog.displayMessage( messageIn );
}

}// Sysout class

/**
This is part of the standard test machinery. It provides a place for the
test instructions to be displayed, and a place for interactive messages
to the user to be displayed.
To have the test instructions displayed, see Sysout.
To have a message to the user be displayed, see Sysout.
Do not call anything in this dialog directly.
*/
class TestDialog extends Dialog
{

TextArea instructionsText;
TextArea messageText;
int maxStringLength = 80;

//DO NOT call this directly, go through Sysout
public TestDialog( Frame frame, String name )
{
super( frame, name );
int scrollBoth = TextArea.SCROLLBARS_BOTH;
instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
add( "North", instructionsText );

messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
add("South", messageText);

pack();

show();
}// TestDialog()

//DO NOT call this directly, go through Sysout
public void printInstructions( String[] instructions )
{
//Clear out any current instructions
instructionsText.setText( "" );

//Go down array of instruction strings

String printStr, remainingStr;
for( int i=0; i < instructions.length; i++ )
{
//chop up each into pieces maxSringLength long
remainingStr = instructions[ i ];
while( remainingStr.length() > 0 )
{
//if longer than max then chop off first max chars to print
if( remainingStr.length() >= maxStringLength )
{
//Try to chop on a word boundary
int posOfSpace = remainingStr.
lastIndexOf( ' ', maxStringLength - 1 );

if( posOfSpace <= 0 ) {
posOfSpace = maxStringLength - 1;
}

printStr = remainingStr.substring( 0, posOfSpace + 1 );
remainingStr = remainingStr.substring( posOfSpace + 1 );
}
else //else just print
{
printStr = remainingStr;
remainingStr = "";
}

instructionsText.append( printStr + "\n" );

}// while

}// for

}//printInstructions()

//DO NOT call this directly, go through Sysout
public void displayMessage( String messageIn )
{
messageText.append( messageIn + "\n" );
}

}// TestDialog class

1 comment on commit 652fb3a

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.