Author: dsnell
Date: 2006-08-11 00:42:38 -0400 (Fri, 11 Aug 2006)
New Revision: 63631
Added:
branches/dmsnell/heap-buddy/analyzer/memgraph.glade
Modified:
branches/dmsnell/heap-buddy/analyzer/GraphReport.cs
branches/dmsnell/heap-buddy/analyzer/Makefile.am
branches/dmsnell/heap-buddy/analyzer/Makefile.in
Log:
Moved into a glade gui, cleaned up the font scaling
Modified: branches/dmsnell/heap-buddy/analyzer/GraphReport.cs
===================================================================
--- branches/dmsnell/heap-buddy/analyzer/GraphReport.cs 2006-08-11 02:28:50 UTC
(rev 63630)
+++ branches/dmsnell/heap-buddy/analyzer/GraphReport.cs 2006-08-11 04:42:38 UTC
(rev 63631)
@@ -29,6 +29,7 @@
using System.Collections;
using Cairo;
using Gtk;
+using Glade;
namespace HeapBuddy {
@@ -40,41 +41,30 @@
public Gdk.Window Window;
public OutfileReader Reader;
-
public ArrayList Stamps;
+ [Widget] VBox vbox1;
+ [Widget] Gtk.Window MainWindow;
+
override public void Run (OutfileReader reader, string [] args)
{
Reader = reader;
Stamps = new ArrayList ();
CollectStamps ();
Sort ();
-
+
Application.Init ();
- Window MainWindow = new Window ("Heap-Buddy");
- MainWindow.SetDefaultSize (640, 480);
- MainWindow.DeleteEvent += QuitApplication;
-
- VPaned box1 = new VPaned ();
- MainWindow.Add (box1);
-
- MenuBar MainMenu = new MenuBar ();
- Menu FileMenu = new Menu ();
- MenuItem ExitItem = new MenuItem ("E_xit");
- ExitItem.Activated += QuitApplication;
- FileMenu.Append (ExitItem);
- MenuItem FileItem = new MenuItem ("_File");
- FileItem.Submenu = FileMenu;
- MainMenu.Append (FileItem);
- box1.Add (MainMenu);
-
+ Glade.XML gxml = new Glade.XML (null, "memgraph.glade",
"MainWindow", null);
+ gxml.Autoconnect (this);
+
CairoGraph cg = new CairoGraph (this);
- box1.Add (cg);
+ vbox1.Add (cg);
- box1.ResizeChildren ();
-
- MainWindow.ShowAll ();
+ MainWindow.ShowAll ();
+ MainWindow.Resize (640, 480);
+ MainWindow.DeleteEvent += QuitApplication;
+
Application.Run ();
}
@@ -117,10 +107,18 @@
//*********Scaling
// How much room for the labels?
- c.FontSize = 15;
+ c.FontSize = 15 * w / 640;
+ if (15 * w / 640 > 20)
+ c.FontSize = 20;
+
string label = Util.PrettySize (HighBytes);
+ double GOY = h - c.TextExtents (label).Height - 30;
+
+ c.FontSize = 15 * h / 480;
+ if (15 * h / 480 > 20)
+ c.FontSize = 20;
+
double GOX = c.TextExtents (label).Width + 15;
- double GOY = h - 30;
double GW = w - GOX - 10;
double GH = GOY - 10;
@@ -130,20 +128,55 @@
// Border
c.Color = new Color (0, 0, 0, 1);
- c.LineWidth = 5;
+ c.LineWidth = 2;
c.Rectangle (GOX, GOY, GW, -GH);
+ c.Stroke ();
// Memory line
c.MoveTo (GOX, GOY);
long LowTime = ((MemStamp)Stamps [0]).TimeT;
+
+ Color Black = new Color (0, 0, 0, 1);
+ Color GcColor = new Color (0, 0, 1, 1);
+ Color ResizeColor = new Color (1, 0, 0, 1);
+
+ double oldX = GOX;
+ double oldY = GOY;
+ double newX, newY;
+
+ c.LineWidth = 1.5;
foreach (MemStamp ms in Stamps) {
- c.LineTo (GOX + (double)(ms.TimeT - LowTime) /
xscale, GOY - (double)(ms.LiveBytes - LowBytes) / yscale);
+ switch (ms.Op) {
+ case MemAction.Gc:
+ c.Color = GcColor;
+ break;
+
+ case MemAction.Resize:
+ c.Color = ResizeColor;
+ break;
+
+ default:
+ c.Color = Black;
+ break;
+ }
+
+ newX = GOX + (double)(ms.TimeT - LowTime) /
xscale;
+ newY = GOY - (double)(ms.LiveBytes - LowBytes)
/ yscale;
+
+ c.MoveTo (oldX, oldY);
+ c.LineTo (newX, newY);
+ c.Stroke ();
+
+ oldX = newX;
+ oldY = newY;
}
- c.LineWidth = 1.5;
- c.Stroke ();
+ c.Color = Black;
// Labels
c.LineWidth = 1;
+ c.FontSize = 15 * h / 480;
+ if (15 * h / 480 > 20)
+ c.FontSize = 20;
// Memory
for (int i = 0; i <= 10; i++) {
@@ -158,6 +191,10 @@
}
// Time
+ c.FontSize = 15 * w / 640;
+ if (15 * w / 640 > 20)
+ c.FontSize = 20;
+
for (int i = 0; i < 15; i++) {
c.MoveTo (GOX + i * GW / 15, GOY);
c.LineTo (GOX + i * GW / 15, GOY + 5);
@@ -170,14 +207,28 @@
}
}
+ public enum MemAction {
+ NoOp,
+ Gc,
+ Resize
+ }
+
public class MemStamp {
public long LiveBytes;
public long TimeT;
+ public MemAction Op;
public MemStamp (long bytes, long time) {
LiveBytes = bytes;
TimeT = time;
+ Op = MemAction.NoOp;
}
+
+ public MemStamp (long bytes, long time, MemAction op) {
+ LiveBytes = bytes;
+ TimeT = time;
+ Op = op;
+ }
}
public class MemStampComparer : IComparer {
@@ -194,11 +245,11 @@
public void CollectStamps ()
{
foreach (Gc gc in Reader.Gcs) {
- Stamps.Add (new MemStamp (gc.PostGcLiveBytes,
gc.TimeT));
+ Stamps.Add (new MemStamp (gc.PostGcLiveBytes,
gc.TimeT, MemAction.Gc));
}
foreach (Resize r in Reader.Resizes) {
- Stamps.Add (new MemStamp (r.TotalLiveBytes,
r.time_t));
+ Stamps.Add (new MemStamp (r.TotalLiveBytes,
r.time_t, MemAction.Resize));
}
}
@@ -207,8 +258,31 @@
IComparer ic = new MemStampComparer ();
Stamps.Sort (ic);
}
+
+ protected void SaveGraph (object o, EventArgs e)
+ {
+ FileChooserDialog chooser = new FileChooserDialog
("Save As", MainWindow, FileChooserAction.Save);
+ chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
+ chooser.AddButton (Stock.Save, ResponseType.Ok);
+
+ int response = chooser.Run ();
+
+ if ((ResponseType)response == ResponseType.Ok) {
+ int x, y, w, h, d;
+ Window.GetGeometry (out x, out y, out w, out h,
out d);
+
+ Surface s = new ImageSurface (Format.RGB24, w,
h);
+ Context.Target = s;
+ this.Continue ();
+
+ s.WriteToPng (chooser.Filename);
+ s.Finish ();
+ }
+
+ chooser.Destroy ();
+ }
- protected static void QuitApplication (object o, EventArgs e)
+ protected void QuitApplication (object o, EventArgs e)
{
Application.Quit ();
}
Modified: branches/dmsnell/heap-buddy/analyzer/Makefile.am
===================================================================
--- branches/dmsnell/heap-buddy/analyzer/Makefile.am 2006-08-11 02:28:50 UTC
(rev 63630)
+++ branches/dmsnell/heap-buddy/analyzer/Makefile.am 2006-08-11 04:42:38 UTC
(rev 63631)
@@ -1,6 +1,6 @@
CSC = mcs -debug
-CSFLAGS = -target:exe -r:Mono.Cairo -pkg:gtk-sharp-2.0 -r:System.Drawing.dll
+CSFLAGS = -target:exe -r:Mono.Cairo -pkg:gtk-sharp-2.0 -r:System.Drawing.dll
-pkg:glade-sharp-2.0 -resource:memgraph.glade
TARGET = HeapBuddy.exe
WRAPPER = heap-buddy
Modified: branches/dmsnell/heap-buddy/analyzer/Makefile.in
===================================================================
--- branches/dmsnell/heap-buddy/analyzer/Makefile.in 2006-08-11 02:28:50 UTC
(rev 63630)
+++ branches/dmsnell/heap-buddy/analyzer/Makefile.in 2006-08-11 04:42:38 UTC
(rev 63631)
@@ -153,7 +153,7 @@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
CSC = mcs -debug
-CSFLAGS = -target:exe -r:Mono.Cairo -pkg:gtk-sharp-2.0 -r:System.Drawing.dll
+CSFLAGS = -target:exe -r:Mono.Cairo -pkg:gtk-sharp-2.0 -r:System.Drawing.dll
-pkg:glade-sharp-2.0 -resource:memgraph.glade
TARGET = HeapBuddy.exe
WRAPPER = heap-buddy
REPORT_CSFILES = \
Added: branches/dmsnell/heap-buddy/analyzer/memgraph.glade
===================================================================
--- branches/dmsnell/heap-buddy/analyzer/memgraph.glade 2006-08-11 02:28:50 UTC
(rev 63630)
+++ branches/dmsnell/heap-buddy/analyzer/memgraph.glade 2006-08-11 04:42:38 UTC
(rev 63631)
@@ -0,0 +1,191 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="MainWindow">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Heap Buddy : Graph</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="default_width">640</property>
+ <property name="default_height">480</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <signal name="delete_event" handler="QuitApplication"
last_modification_time="Fri, 11 Aug 2006 03:07:18 GMT"/>
+
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkMenuBar" id="MainMenu">
+ <property name="visible">True</property>
+ <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
+ <property
name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="menuitem1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_File</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="menu1">
+
+ <child>
+ <widget class="GtkImageMenuItem" id="new1">
+ <property name="visible">True</property>
+ <property name="label">gtk-new</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="open1">
+ <property name="visible">True</property>
+ <property name="label">gtk-open</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="save1">
+ <property name="visible">True</property>
+ <property name="label">gtk-save</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="SaveGraph"
last_modification_time="Fri, 11 Aug 2006 03:41:07 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="save_as1">
+ <property name="visible">True</property>
+ <property name="label">gtk-save-as</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkSeparatorMenuItem"
id="separatormenuitem1">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="QuitItem">
+ <property name="visible">True</property>
+ <property name="label">gtk-quit</property>
+ <property name="use_stock">True</property>
+ <signal name="activate" handler="QuitApplication"
last_modification_time="Fri, 11 Aug 2006 02:47:32 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="menuitem2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Edit</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="menu2">
+
+ <child>
+ <widget class="GtkImageMenuItem" id="cut1">
+ <property name="visible">True</property>
+ <property name="label">gtk-cut</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="copy1">
+ <property name="visible">True</property>
+ <property name="label">gtk-copy</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="paste1">
+ <property name="visible">True</property>
+ <property name="label">gtk-paste</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="delete1">
+ <property name="visible">True</property>
+ <property name="label">gtk-delete</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="menuitem3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_View</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="menu3">
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="menuitem4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="menu4">
+
+ <child>
+ <widget class="GtkMenuItem" id="about1">
+ <property name="visible">True</property>
+ <property name="label"
translatable="yes">_About</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+</glade-interface>
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches