blob: e041a4104e403318a2dea22a46fcdf3a47a603b5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Red Hat and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat - initial API and implementation
*******************************************************************************/
package org.eclipse.swt.tests.gtk.snippets;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
public class Bug321573_ImageScalingLeakTest {
public static void main(String[] args) {
Display display = Display.getDefault();
Image image = new Image(display, 3200, 2400);
ImageData imageData = image.getImageData();
image.dispose();
long time = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
image = new Image(display, imageData);
image = scale(image, 320, 240);
image.dispose();
image = null;
System.gc(); // just make sure we don't see the Java heap growing
System.out.println(i);
}
System.out.println(System.currentTimeMillis() - time);
}
public static Image scale(Image image, int width, int height) {
Rectangle bounds = image.getBounds();
Image thumbnail = new Image(image.getDevice(), width, height);
GC gc = null;
try {
gc = new GC(thumbnail);
gc.drawImage(image, 0, 0, bounds.width, bounds.height, 0, 0, width,
height);
return thumbnail;
} finally {
image.dispose();
if (gc != null)
gc.dispose();
}
}
}