示例#1
0
            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;
                }
            }
示例#2
0
 public static HeapRoot ToHeapRoot(this HeapRootRegisterEvent rootReg)
 => new HeapRoot(rootReg.RootPointer, (HeapRootKind)(int)rootReg.Source);
示例#3
0
 public virtual void Visit(HeapRootRegisterEvent ev)
 {
 }
示例#4
0
 public void RegisterRoot(long address, HeapRootRegisterEvent heapRootRegisterEvent)
 {
     Roots[address] = heapRootRegisterEvent;
 }