# HG changeset patch # User Frank Benoit # Date 1205013181 -3600 # Node ID 74109ce6d2e0e16e824c909bb04fdfbac1d547f3 Sleak Tool diff -r 000000000000 -r 74109ce6d2e0 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sat Mar 08 22:53:01 2008 +0100 @@ -0,0 +1,14 @@ +syntax: glob + +*.a +*.swp +*.map +*.exe +*.bak + +syntax: regexp +^build.sh$ +^dsss_objs +^dsss.last +^dsss_imports + diff -r 000000000000 -r 74109ce6d2e0 dsss.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dsss.conf Sat Mar 08 22:53:01 2008 +0100 @@ -0,0 +1,4 @@ + +[dwt/sleak/Sleak.d] + + diff -r 000000000000 -r 74109ce6d2e0 dwt/sleak/Sleak.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwt/sleak/Sleak.d Sat Mar 08 22:53:01 2008 +0100 @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2000, 2002 IBM Corp. All rights reserved. + * This file is made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Port to the D programming language + * Frank Benoit + */ +module dwt.sleak.Sleak; + +import dwt.DWT; +import dwt.graphics.DeviceData; +import dwt.graphics.Rectangle; +import dwt.graphics.GC; +import dwt.graphics.Point; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.FontData; +import dwt.graphics.Region; +import dwt.graphics.Cursor; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.Canvas; +import dwt.widgets.Button; +import dwt.widgets.Label; +import dwt.widgets.List; +import dwt.widgets.Text; +import dwt.widgets.Event; +import dwt.widgets.Listener; +import dwt.widgets.MessageBox; + +import dwt.dwthelper.utils; +import tango.text.convert.Format; + +public class Sleak { + Display display; + Shell shell; + List list; + Canvas canvas; + Button start, stop, check; + Text text; + Label label; + + Object [] oldObjects; + Exception [] oldErrors; + Object [] objects; + Exception [] errors; + +public void open () { + display = Display.getCurrent (); + shell = new Shell (display); + shell.setText ("S-Leak"); + list = new List (shell, DWT.BORDER | DWT.V_SCROLL); + list.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + refreshObject (); + } + }); + text = new Text (shell, DWT.BORDER | DWT.H_SCROLL | DWT.V_SCROLL); + canvas = new Canvas (shell, DWT.BORDER); + canvas.addListener (DWT.Paint, new class() Listener { + public void handleEvent (Event event) { + paintCanvas (event); + } + }); + check = new Button (shell, DWT.CHECK); + check.setText ("Stack"); + check.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event e) { + toggleStackTrace (); + } + }); + start = new Button (shell, DWT.PUSH); + start.setText ("Snap"); + start.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + refreshAll (); + } + }); + stop = new Button (shell, DWT.PUSH); + stop.setText ("Diff"); + stop.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + refreshDifference (); + } + }); + label = new Label (shell, DWT.BORDER); + label.setText ("0 object(s)"); + shell.addListener (DWT.Resize, new class() Listener { + public void handleEvent (Event e) { + layout (); + } + }); + check.setSelection (false); + text.setVisible (false); + Point size = shell.getSize (); + shell.setSize (size.x / 2, size.y / 2); + shell.open (); +} + +void refreshLabel () { + int colors = 0, cursors = 0, fonts = 0, gcs = 0, images = 0, regions = 0; + for (int i=0; i