public override void Visit(HeapRootRegisterEvent ev) { var index = rootsEventsBinary.BinarySearch(ev.RootPointer); if (index < 0) { //negative index means it's not there index = ~index; if (index - 1 >= 0) { var oneBefore = rootsEvents[rootsEventsBinary[index - 1]]; if (oneBefore.RootPointer + oneBefore.RootSize > ev.RootPointer) { Console.WriteLine("2 HeapRootRegisterEvents overlap:"); Console.WriteLine(ev); Console.WriteLine(oneBefore); } } if (index < rootsEventsBinary.Count) { var oneAfter = rootsEvents[rootsEventsBinary[index]]; if (oneAfter.RootPointer < ev.RootPointer + ev.RootSize) { Console.WriteLine("2 HeapRootRegisterEvents overlap:"); Console.WriteLine(ev); Console.WriteLine(oneAfter); } } rootsEventsBinary.Insert(index, ev.RootPointer); rootsEvents.Add(ev.RootPointer, ev); } else { Console.WriteLine("2 HeapRootRegisterEvent at same address:"); Console.WriteLine(ev); Console.WriteLine(rootsEvents[ev.RootPointer]); rootsEvents[ev.RootPointer] = ev; } }
public static HeapRoot ToHeapRoot(this HeapRootRegisterEvent rootReg) => new HeapRoot(rootReg.RootPointer, (HeapRootKind)(int)rootReg.Source);
public virtual void Visit(HeapRootRegisterEvent ev) { }
public void RegisterRoot(long address, HeapRootRegisterEvent heapRootRegisterEvent) { Roots[address] = heapRootRegisterEvent; }