public override void BuildNode(ITreeBuilder builder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon) { HeapBuddyProfilingSnapshot snapshot = (HeapBuddyProfilingSnapshot)dataObject; label = snapshot.Name; icon = Context.GetIcon("md-prof-gc"); snapshot.NameChanged += nameChangedHandler; }
public override void BuildChildNodes(ITreeBuilder builder, object dataObject) { HeapBuddyProfilingSnapshot snapshot = (HeapBuddyProfilingSnapshot)dataObject; builder.AddChild(new HistoryNode(snapshot)); builder.AddChild(new TypesNode(snapshot)); builder.AddChild(new BacktracesNode(snapshot)); builder.Expanded = true; }
public void Load(HeapBuddyProfilingSnapshot snapshot) { this.snapshot = snapshot; foreach (Type type in snapshot.Outfile.Types) { store.AppendValues("md-class", type.Name, type.LastObjectStats.AllocatedCount.ToString(), ProfilingService.PrettySize(type.LastObjectStats.AllocatedTotalBytes), String.Format("{0:0.0}", type.LastObjectStats.AllocatedAverageBytes), String.Format("{0:0.0}", type.LastObjectStats.AllocatedAverageAge), type.BacktraceCount.ToString(), type); } }
private void AsyncTakeSnapshot(object state) { string dumpFile = null; lock (sync) dumpFile = Context.FileName; int attempts = 40; bool success = false; while (!success) { if (--attempts == 0) { OnSnapshotFailed(EventArgs.Empty); return; } Thread.Sleep(500); if (!File.Exists(dumpFile)) { continue; } try { string destFile = GetSaveLocation(); if (destFile != null) //ignore if Cancel is clicked in the save dialog { File.Copy(dumpFile, destFile); File.Delete(dumpFile); IProfilingSnapshot snapshot = new HeapBuddyProfilingSnapshot(this, destFile); OnSnapshotTaken(new ProfilingSnapshotEventArgs(snapshot)); } success = true; } catch (Exception ex) { LoggingService.LogError("HeapBuddyProfiler", "AsyncTakeSnapshot", ex); } } Stop(); }
public void Load(HeapBuddyProfilingSnapshot snapshot) { this.snapshot = snapshot; foreach (Backtrace bt in snapshot.Outfile.Backtraces) { TreeIter iter = store.AppendValues("md-class", bt.Type.Name, bt.LastObjectStats.AllocatedCount.ToString(), ProfilingService.PrettySize(bt.LastObjectStats.AllocatedTotalBytes), String.Format("{0:0.0}", bt.LastObjectStats.AllocatedAverageBytes), String.Format("{0:0.0}", bt.LastObjectStats.AllocatedAverageAge), bt); foreach (Frame frame in bt.Frames) { if (!frame.MethodName.StartsWith("(wrapper")) { store.AppendValues(iter, "md-method", frame.MethodName, String.Empty, String.Empty, String.Empty, String.Empty, frame); } } } }
public TypesNode (HeapBuddyProfilingSnapshot snapshot) : base (snapshot) { }
public BaseNode (HeapBuddyProfilingSnapshot snapshot) { this.snapshot = snapshot; }
public HistoryNode (HeapBuddyProfilingSnapshot snapshot) : base (snapshot) { }
public TypesNode(HeapBuddyProfilingSnapshot snapshot) : base(snapshot) { }
public HistoryNode(HeapBuddyProfilingSnapshot snapshot) : base(snapshot) { }
public BacktracesNode(HeapBuddyProfilingSnapshot snapshot) : base(snapshot) { }
public override string GetNodeName(ITreeNavigator thisNode, object dataObject) { HeapBuddyProfilingSnapshot snapshot = (HeapBuddyProfilingSnapshot)dataObject; return(snapshot.Name); }
public BaseNode(HeapBuddyProfilingSnapshot snapshot) { this.snapshot = snapshot; }
public BacktracesNode (HeapBuddyProfilingSnapshot snapshot) : base (snapshot) { }
public void Load (HeapBuddyProfilingSnapshot snapshot) { this.snapshot = snapshot; foreach (Type type in snapshot.Outfile.Types) { store.AppendValues ("md-class", type.Name, type.LastObjectStats.AllocatedCount.ToString (), ProfilingService.PrettySize (type.LastObjectStats.AllocatedTotalBytes), String.Format ("{0:0.0}", type.LastObjectStats.AllocatedAverageBytes), String.Format ("{0:0.0}", type.LastObjectStats.AllocatedAverageAge), type.BacktraceCount.ToString (), type); } }
public void Load (HeapBuddyProfilingSnapshot snapshot) { this.snapshot = snapshot; foreach (Backtrace bt in snapshot.Outfile.Backtraces) { TreeIter iter = store.AppendValues ("md-class", bt.Type.Name, bt.LastObjectStats.AllocatedCount.ToString (), ProfilingService.PrettySize (bt.LastObjectStats.AllocatedTotalBytes), String.Format ("{0:0.0}", bt.LastObjectStats.AllocatedAverageBytes), String.Format ("{0:0.0}", bt.LastObjectStats.AllocatedAverageAge), bt); foreach (Frame frame in bt.Frames) { if (!frame.MethodName.StartsWith ("(wrapper")) store.AppendValues (iter, "md-method", frame.MethodName, String.Empty, String.Empty, String.Empty, String.Empty, frame); } } }
public void Load(HeapBuddyProfilingSnapshot snapshot) { this.snapshot = snapshot; OutfileReader reader = snapshot.Outfile; Resize[] resizes = reader.Resizes; Gc[] gcs = reader.Gcs; int i_resize = 0; int i_gc = 0; long heap_size = 0; while (i_resize < resizes.Length || i_gc < gcs.Length) { Resize r = null; if (i_resize < resizes.Length) { r = resizes [i_resize]; } Gc gc = null; if (i_gc < gcs.Length) { gc = gcs [i_gc]; } string timestamp, tag, message; if (r != null && (gc == null || r.Generation <= gc.Generation)) { timestamp = string.Format("{0:HH:mm:ss}", r.Timestamp); if (r.PreviousSize == 0) { tag = GettextCatalog.GetString("Init"); message = String.Format(GettextCatalog.GetString("Initialized heap to {0}"), ProfilingService.PrettySize(r.NewSize)); } else { tag = GettextCatalog.GetString("Resize"); message = String.Format(GettextCatalog.GetString("Grew heap from {0} to {1}") + Environment.NewLine + GettextCatalog.GetString("{2} in {3} live objects") + Environment.NewLine + GettextCatalog.GetString("Heap went from {4:0.0}% to {5:0.0}% capacity"), ProfilingService.PrettySize(r.PreviousSize), ProfilingService.PrettySize(r.NewSize), ProfilingService.PrettySize(r.TotalLiveBytes), r.TotalLiveObjects, r.PreResizeCapacity, r.PostResizeCapacity); } heap_size = r.NewSize; ++i_resize; } else { timestamp = String.Format("{0:HH:mm:ss}", gc.Timestamp); if (gc.Generation >= 0) { tag = GettextCatalog.GetString("GC ") + gc.Generation; message = String.Format(GettextCatalog.GetString("Collected {0} of {1} objects ({2:0.0}%)") + Environment.NewLine + GettextCatalog.GetString("Collected {3} of {4} ({5:0.0}%)") + Environment.NewLine + GettextCatalog.GetString("Heap went from {6:0.0}% to {7:0.0}% capacity"), gc.FreedObjects, gc.PreGcLiveObjects, gc.FreedObjectsPercentage, ProfilingService.PrettySize(gc.FreedBytes), ProfilingService.PrettySize(gc.PreGcLiveBytes), gc.FreedBytesPercentage, 100.0 * gc.PreGcLiveBytes / heap_size, 100.0 * gc.PostGcLiveBytes / heap_size); } else { tag = GettextCatalog.GetString("Exit"); message = String.Format(GettextCatalog.GetString("{0} live objects using {1}"), gc.PreGcLiveObjects, ProfilingService.PrettySize(gc.PreGcLiveBytes)); } ++i_gc; } store.AppendValues(timestamp, tag, message); } }
public void Load (HeapBuddyProfilingSnapshot snapshot) { this.snapshot = snapshot; OutfileReader reader = snapshot.Outfile; Resize[] resizes = reader.Resizes; Gc[] gcs = reader.Gcs; int i_resize = 0; int i_gc = 0; long heap_size = 0; while (i_resize < resizes.Length || i_gc < gcs.Length) { Resize r = null; if (i_resize < resizes.Length) r = resizes [i_resize]; Gc gc = null; if (i_gc < gcs.Length) gc = gcs [i_gc]; string timestamp, tag, message; if (r != null && (gc == null || r.Generation <= gc.Generation)) { timestamp = string.Format ("{0:HH:mm:ss}", r.Timestamp); if (r.PreviousSize == 0) { tag = GettextCatalog.GetString ("Init"); message = String.Format (GettextCatalog.GetString ("Initialized heap to {0}"), ProfilingService.PrettySize (r.NewSize)); } else { tag = GettextCatalog.GetString ("Resize"); message = String.Format (GettextCatalog.GetString ("Grew heap from {0} to {1}") + Environment.NewLine + GettextCatalog.GetString ("{2} in {3} live objects") + Environment.NewLine + GettextCatalog.GetString ("Heap went from {4:0.0}% to {5:0.0}% capacity"), ProfilingService.PrettySize (r.PreviousSize), ProfilingService.PrettySize (r.NewSize), ProfilingService.PrettySize (r.TotalLiveBytes), r.TotalLiveObjects, r.PreResizeCapacity, r.PostResizeCapacity); } heap_size = r.NewSize; ++i_resize; } else { timestamp = String.Format ("{0:HH:mm:ss}", gc.Timestamp); if (gc.Generation >= 0) { tag = GettextCatalog.GetString ("GC ") + gc.Generation; message = String.Format (GettextCatalog.GetString ("Collected {0} of {1} objects ({2:0.0}%)") + Environment.NewLine + GettextCatalog.GetString ("Collected {3} of {4} ({5:0.0}%)") + Environment.NewLine + GettextCatalog.GetString ("Heap went from {6:0.0}% to {7:0.0}% capacity"), gc.FreedObjects, gc.PreGcLiveObjects, gc.FreedObjectsPercentage, ProfilingService.PrettySize (gc.FreedBytes), ProfilingService.PrettySize (gc.PreGcLiveBytes), gc.FreedBytesPercentage, 100.0 * gc.PreGcLiveBytes / heap_size, 100.0 * gc.PostGcLiveBytes / heap_size); } else { tag = GettextCatalog.GetString ("Exit"); message = String.Format (GettextCatalog.GetString ("{0} live objects using {1}"), gc.PreGcLiveObjects, ProfilingService.PrettySize (gc.PreGcLiveBytes)); } ++i_gc; } store.AppendValues (timestamp, tag, message); } }
private void AsyncTakeSnapshot (object state) { string dumpFile = null; lock (sync) dumpFile = Context.FileName; int attempts = 40; bool success = false; while (!success) { if (--attempts == 0) { OnSnapshotFailed (EventArgs.Empty); return; } Thread.Sleep (500); if (!File.Exists (dumpFile)) continue; try { string destFile = GetSaveLocation (); if (destFile != null) { //ignore if Cancel is clicked in the save dialog File.Copy (dumpFile, destFile); File.Delete (dumpFile); IProfilingSnapshot snapshot = new HeapBuddyProfilingSnapshot (this, destFile); OnSnapshotTaken (new ProfilingSnapshotEventArgs (snapshot)); } success = true; } catch (Exception ex) { LoggingService.LogError ("HeapBuddyProfiler", "AsyncTakeSnapshot", ex); } } Stop (); }