public override void Visit(HeapRootsEvent ev)
 {
     for (int i = 0; i < ev.Roots.Count; ++i)
     {
         var root = ev.Roots[i];
         ProcessNewRoot(root.ObjectPointer, root.SlotPointer);
     }
 }
Exemple #2
0
 public override void Visit(HeapRootsEvent ev)
 {
     if (currentHeapshot != null)
     {
         foreach (var root in ev.Roots)
         {
             currentHeapshot.Roots[root.ObjectPointer] = root.Attributes.ToString();
         }
     }
 }
 public override void Visit(HeapRootsEvent ev)
 {
     if (currentHeapshot != null)
     {
         foreach (var root in ev.Roots)
         {
             var index = rootsEventsBinary.BinarySearch(root.AddressPointer);
             if (index < 0)
             {
                 index = ~index;
                 if (index == 0)
                 {
                     Console.WriteLine($"This should not happen. Root is before any HeapRootsEvent {root.AddressPointer}.");
                     continue;
                 }
                 var rootReg = rootsEvents[rootsEventsBinary[index - 1]];
                 if (rootReg.RootPointer < root.AddressPointer && rootReg.RootPointer + rootReg.RootSize >= root.AddressPointer)
                 {
                     currentHeapshot.Roots[root.ObjectPointer] = rootReg;
                 }
                 else
                 {
                     Console.WriteLine($"This should not happen. Closest root is too small({root.AddressPointer}):");
                     Console.WriteLine(rootReg);
                 }
             }
             else
             {
                 //We got exact match
                 currentHeapshot.Roots[root.ObjectPointer] = rootsEvents[root.AddressPointer];
             }
         }
     }
     else
     {
         //Console.WriteLine("This should not happen. HeapRootsEvent outside HeapshotBegin/End.");
     }
 }
Exemple #4
0
 public virtual void Visit(HeapRootsEvent ev)
 {
 }