Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
213 changes: 80 additions & 133 deletions test/jdk/java/awt/image/MemoryLeakTest/MemoryLeakTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 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 @@ -22,154 +22,101 @@
*/

/* @test
@bug 4078566 6658398
@summary Test for a memory leak in Image.
@run main/manual MemoryLeakTest
*/

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

class Globals {
static boolean testPassed=false;
static Thread mainThread=null;
}

public class MemoryLeakTest extends Applet {

public static void main(String args[]) throws Exception {
new TestDialog(new Frame(), "MemoryLeakTest").start();
new MemoryLeak().start();
Globals.mainThread = Thread.currentThread();
try {
Thread.sleep(300000);
} catch (InterruptedException e) {
if (!Globals.testPassed)
throw new Exception("MemoryLeakTest failed.");
}
}

}

class TestDialog extends Dialog
implements ActionListener {

TextArea output;
Button passButton;
Button failButton;
String name;

public TestDialog(Frame frame, String name)
{
super(frame, name + " Pass/Fail Dialog");
this.name = name;
output = new TextArea(11, 50);
add("North", output);
output.append("Do the following steps on Solaris only.\n");
output.append("Maximize and minimize the Memory Leak Test window.\n");
output.append("Execute the following after minimize.\n");
output.append(" ps -al | egrep -i 'java|PPID'\n");
output.append("Examine the size of the process under SZ.\n");
output.append("Maximize and minimize the Memory Leak Test window again.\n");
output.append("Execute the following after minimize.\n");
output.append(" ps -al | egrep -i 'java|PPID'\n");
output.append("Examine the size of the process under SZ.\n");
output.append("If the two SZ values are the same, plus or minus one,\n");
output.append("then click Pass, else click Fail.");
Panel buttonPanel = new Panel();
passButton = new Button("Pass");
failButton = new Button("Fail");
passButton.addActionListener(this);
failButton.addActionListener(this);
buttonPanel.add(passButton);
buttonPanel.add(failButton);
add("South", buttonPanel);
pack();
}

public void start()
{
show();
}
* @bug 4078566 6658398
* @requires (os.family == "linux")
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @summary Test for a memory leak in Image.
* @run main/manual MemoryLeakTest
*/

public void actionPerformed(ActionEvent event)
{
if ( event.getSource() == passButton ) {
Globals.testPassed = true;
System.err.println(name + " Passed.");
}
else if ( event.getSource() == failButton ) {
Globals.testPassed = false;
System.err.println(name + " Failed.");
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

public class MemoryLeakTest {
private static final String INSTRUCTIONS =
"""
Do the following steps on Unix platforms.
Maximize and minimize the Memory Leak Test window.
Execute the following after minimize.
ps -al | egrep -i 'java|PPID'
Examine the size of the process under SZ.
Maximize and minimize the Memory Leak Test window again.
Execute the following after minimize.
ps -al | egrep -i 'java|PPID'
Examine the size of the process under SZ.
If the two SZ values are the same, plus or minus one,
then click Pass, else click Fail.
""";

public static void main(String[] args) throws Exception {
PassFailJFrame
.builder()
.title("MemoryLeakTest Instructions")
.instructions(INSTRUCTIONS)
.rows(15)
.columns(40)
.testUI(MemoryLeak::new)
.build()
.awaitAndCheck();
}
this.dispose();
if (Globals.mainThread != null)
Globals.mainThread.interrupt();
}

}
class MemoryLeak extends Frame implements ComponentListener {
private Image osImage;

public MemoryLeak() {
super("Memory Leak Test");
setSize(200, 200);
addComponentListener(this);
}

class MemoryLeak extends Frame implements ComponentListener
{
private Image osImage;
public static void main(String[] args) {
new MemoryLeak().start();
}

public MemoryLeak()
{
super("Memory Leak Test");
setSize(200, 200);
addComponentListener(this);
}
public void start() {
setVisible(true);
}

public static void main(String args[])
{
new MemoryLeak().start();
}
public void paint(Graphics g) {
if (osImage != null) {
g.drawImage(osImage, 0, 0, this);
}
}

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

public void paint(Graphics g) {
if (osImage != null) {
g.drawImage(osImage, 0, 0, this);
public void componentResized(ComponentEvent e) {
Image oldimage = osImage;
osImage = createImage(getSize().width, getSize().height);
Graphics g = osImage.getGraphics();
if (oldimage != null) {
g.drawImage(oldimage, 0, 0, getSize().width, getSize().height, this);
oldimage.flush();
} else {
g.setColor(Color.blue);
g.drawLine(0, 0, getSize().width, getSize().height);
}
g.dispose();
}
}

public void update(Graphics g)
{
paint(g);
}
public void componentMoved(ComponentEvent e) {}

public void componentResized(ComponentEvent e)
{
Image oldimage = osImage;
osImage = createImage(getSize().width, getSize().height);
Graphics g = osImage.getGraphics();
if (oldimage != null) {
g.drawImage(oldimage, 0, 0, getSize().width, getSize().height, this);
oldimage.flush();
} else {
public void componentShown(ComponentEvent e) {
osImage = createImage(getSize().width, getSize().height);
Graphics g = osImage.getGraphics();
g.setColor(Color.blue);
g.drawLine(0, 0, getSize().width, getSize().height);
g.dispose();
}
g.dispose();
}

public void componentMoved(ComponentEvent e) {}

public void componentShown(ComponentEvent e)
{
osImage = createImage(getSize().width, getSize().height);
Graphics g = osImage.getGraphics();
g.setColor(Color.blue);
g.drawLine(0, 0, getSize().width, getSize().height);
g.dispose();
}

public void componentHidden(ComponentEvent e) {}
public void componentHidden(ComponentEvent e) {}

}