Exemplo n.º 1
0
        private void LoadMemOperations(String fileName)
        {
            Stream          s         = File.Open(fileName, FileMode.Open);
            BinaryFormatter formatter = new BinaryFormatter();

            StackTracer.Deserialize(s, formatter);
            m_memOperations             = formatter.Deserialize(s) as List <MemOperation>;
            m_snapshots                 = formatter.Deserialize(s) as List <SnapshotDesc>;
            m_numFrames                 = (int)formatter.Deserialize(s);
            m_mostAllocatedBlocks       = formatter.Deserialize(s) as int[];
            CallstackTab.m_callStackMap = formatter.Deserialize(s) as Dictionary <ulong, ulong[]>;
            TagDict.m_tags              = formatter.Deserialize(s) as Dictionary <ulong, string>;

            foreach (SnapshotDesc snapDesc in m_snapshots)
            {
                AddSnapshot(snapDesc.name, snapDesc.bytes, snapDesc.blocks, snapDesc.memOperationNr);
            }

            s.Close();

            m_selectedSnapshotIndex = -1;
            m_globalSnapshot        = BuildEndSnapshot();
            UpdateFrameStats();

            SetControlButtonsState(m_numFrames > 0);
            m_lastMemOpFrame        = -1;
            m_lastSnapshotViewFrame = -1;
            GoToFrame(0);
        }
Exemplo n.º 2
0
        private MemSnapshot BuildSnapshotForFrame(int frame)
        {
            MemSnapshot snapshot      = new MemSnapshot();
            int         numOperations = m_memOperations.Count;
            int         frames        = 0;

            for (int i = 0; i < numOperations; ++i)
            {
                MemOperation op = m_memOperations[i];
                if (op.OpType == MemOperation.Type.Alloc)
                {
                    snapshot.AddBlock(op.UserData as MemBlock);
                }
                else if (op.OpType == MemOperation.Type.Free)
                {
                    snapshot.RemoveBlock((ulong)op.UserData);
                }
                else if (op.OpType == MemOperation.Type.FrameEnd)
                {
                    ++frames;
                }

                if (frames > frame)
                {
                    break;
                }
            }
            m_lastSnapshotViewFrame = frame;
            return(snapshot);
        }
Exemplo n.º 3
0
 void BuildTree(MemSnapshot snapshot, int minMemOpNo, int maxMemOpNo)
 {
     m_tree.Clear();
     treeView1.Nodes.Clear();
     foreach (MemBlock block in snapshot.Blocks.Values)
     {
         int memOpNr = MemTracerForm.ms_MainForm.MemOperationNrForBlock(block);
         if (memOpNr < maxMemOpNo && memOpNr > minMemOpNo)
         {
             if (m_detailed)
             {
                 m_tree.AddMemBlockSubTree(block);
             }
             else
             {
                 m_tree.AddMemBlock(block);
             }
         }
     }
     m_tree.Sort();
     treeView1.BeginUpdate();
     PopulateTreeView(m_tree.Root, treeView1.Nodes);
     treeView1.EndUpdate();
     m_snapshot = snapshot;
 }
Exemplo n.º 4
0
        MemBlock[] CollectLargestBlocks(MemSnapshot snap, int n)
        {
            MemBlock[] largestBlocks = new MemBlock[snap.Blocks.Values.Count];
            int        i             = 0;

            foreach (MemBlock block in snap.Blocks.Values)
            {
                largestBlocks[i++] = block;
            }
            Array.Sort(largestBlocks, new CompareBySize());

            /*for (int i = 0; i < largestBlocks.Length; ++i)
             * {
             *  if (largestBlocks[i] != null && largestBlocks[i].m_size == block.m_size)
             *      break;
             *
             *  if (largestBlocks[i] == null)
             *  {
             *      largestBlocks[i] = block;
             *      break;
             *  }
             *  if (largestBlocks[i].m_size < block.m_size)
             *  {
             *      for (int j = i + 1; j < largestBlocks.Length; ++j)
             *          largestBlocks[j] = largestBlocks[j - 1];
             *      largestBlocks[i] = block;
             *      break;
             *  }
             * }
             * }*/
            return(largestBlocks);
        }
Exemplo n.º 5
0
        public MemSnapshot Difference(MemSnapshot other)
        {
            MemSnapshot ret = new MemSnapshot();
            //uint order = 0;
            Dictionary <MemBlock, int> usedBlocks = new Dictionary <MemBlock, int>();

            foreach (MemBlock otherBlock in other.m_blocks.Values)
            {
                /*StackTracer.Symbol[] syms = new StackTracer.Symbol[otherBlock.m_callStack.Count];
                 * for (int i = 0; i < otherBlock.m_callStack.Count; ++i)
                 *  syms[i] = StackTracer.GetSymbolForAddress(otherBlock.m_callStack[i]);*/

                bool found = false;
                foreach (MemBlock block in m_blocks.Values)
                {
                    if (!usedBlocks.ContainsKey(block) &&
                        otherBlock.m_size == block.m_size &&
                        otherBlock.IsCallStackEqual(block))
                    {
                        usedBlocks.Add(block, 1);
                        found = true;
                        break;
                    }
                }
                //otherBlock.m_tag = order;
                if (!found)
                {
                    ret.AddBlock(otherBlock);
                }

                //++order;
            }
            return(ret);
        }
Exemplo n.º 6
0
        void CompareSnapshots(int snapAIdx, int snapBIdx)
        {
            MemSnapshot      snapA = BuildSnapshotFromDesc(m_snapshots[snapAIdx]);
            MemSnapshot      snapB = BuildSnapshotFromDesc(m_snapshots[snapBIdx]);
            CompareSnapshots dlg   = new CompareSnapshots(snapA, snapB, m_snapshots[snapAIdx].name, m_snapshots[snapBIdx].name);

            dlg.ShowDialog();
        }
Exemplo n.º 7
0
        void OverlapSnapshots(int snapAIdx, int snapBIdx)
        {
            MemSnapshot  snapA  = BuildSnapshotFromDesc(m_snapshots[snapAIdx]);
            MemSnapshot  snapB  = BuildSnapshotFromDesc(m_snapshots[snapBIdx]);
            MemSnapshot  result = snapA.Overlap(snapB);
            ShowSnapshot dlg    = new ShowSnapshot(result, "Overlap");

            dlg.ShowDialog();
        }
Exemplo n.º 8
0
        public void OnSnapshotSelected(int index)
        {
            MemSnapshot snap = BuildSnapshotFromDesc(m_snapshots[index]);

            snapshotInfo2.Init(m_snapshots[index].name);
            snapshotInfo2.Update(snap);
            snapshotInfo2.Visible   = true;
            m_selectedSnapshotIndex = index;
        }
Exemplo n.º 9
0
        public ShowSnapshot(MemSnapshot snap, string name)
        {
            InitializeComponent();

            Text = name;
            snapshotInfoControl1.Init(name);
            snapshotInfoControl1.Update(snap);
            memAllocTree1.BuildTree(snap);
            memAllocTree1.SetDoubleClickDelegate(new DelegateDoubleClickNode(DoubleClickNode));
        }
Exemplo n.º 10
0
        public void Update(MemSnapshot snapshot)
        {
            m_snapshot = snapshot;
            uint  usedBytes = snapshot.NumAllocatedBytes;
            float usedMb    = (float)usedBytes / (1024 * 1024);

            labelMemUsed.Text = usedMb.ToString("N") + " MB";
            float maxUsedMb = (float)snapshot.TopAllocatedBytes / (1024 * 1024);

            labelMaxMemUsed.Text = maxUsedMb.ToString("N") + " MB";
            labelMaxBlocks.Text  = snapshot.TopAllocatedBlocks.ToString();
            labelBlocks.Text     = snapshot.NumAllocatedBlocks.ToString();
            float largestMb = (float)snapshot.LargestAllocation / (1024 * 1024);

            labelLargest.Text = largestMb.ToString("N") + " MB";
        }
Exemplo n.º 11
0
 private void tabControl1_Selected(object sender, TabControlEventArgs e)
 {
     if (e.TabPage == tabPageFrameSnapshot)
     {
         if (m_frame != m_lastSnapshotViewFrame)
         {
             MemSnapshot ms = BuildSnapshotForFrame(m_frame);
             memAllocTreeFrame.BuildTree(ms);
         }
     }
     else if (e.TabPage == tabPageFrameOps)
     {
         if (m_frame != m_lastMemOpFrame)
         {
             memOpTree1.BuildTree(BuildOperationsListForFrame(m_frame));
         }
     }
 }
Exemplo n.º 12
0
        private void GoToFrame(int frame)
        {
            if (frameAnalysisToolStripMenuItem.Checked)
            {
                m_frame = frame;
                MemSnapshot ms = BuildSnapshotForFrame(m_frame);
                memAllocTreeFrame.BuildTree(ms);
                memOpTree1.BuildTree(BuildOperationsListForFrame(m_frame));

                toolStripStatusFrame.Text = "Frame: " + m_frame.ToString() + "/" + m_numFrames.ToString();
                UpdateUsageGraph((int)ms.NumAllocatedBytes >> 10);

                butRewind.Enabled    = (m_frame > 0);
                butPrevFrame.Enabled = (m_frame > 0);
                butFFwd.Enabled      = (m_frame < m_numFrames);
                butNextFrame.Enabled = (m_frame < m_numFrames);
            }
        }
Exemplo n.º 13
0
        public CompareSnapshots(MemSnapshot snapA, MemSnapshot snapB, string nameA, string nameB)
        {
            InitializeComponent();

            snapshotInfoControl1.Init(nameA);
            snapshotInfoControl2.Init(nameB);
            snapshotInfoControl1.Update(snapA);
            snapshotInfoControl2.Update(snapB);

            memAllocTree1.BuildTree(snapA);

            labelSnap1.Text = nameA;
            labelSnap2.Text = nameB;

            MemSnapshot diff = snapA.Difference(snapB);

            memAllocTree1.BuildTree(snapA);
            memAllocTree2.BuildTree(snapB);
            memAllocTreeDiff.BuildTree(diff);
        }
Exemplo n.º 14
0
 public void BuildTree(MemSnapshot snapshot)
 {
     m_tree.Clear();
     treeView1.Nodes.Clear();
     foreach (MemBlock block in snapshot.Blocks.Values)
     {
         if (m_detailed)
         {
             m_tree.AddMemBlockSubTree(block);
         }
         else
         {
             m_tree.AddMemBlock(block);
         }
     }
     m_tree.Sort();
     treeView1.BeginUpdate();
     PopulateTreeView(m_tree.Root, treeView1.Nodes);
     treeView1.EndUpdate();
     m_snapshot = snapshot;
 }
Exemplo n.º 15
0
        MemSnapshot BuildEndSnapshot()
        {
            MemSnapshot snapshot = new MemSnapshot();

            foreach (MemOperation op in m_memOperations)
            {
                if (op.OpType == MemOperation.Type.Alloc)
                {
                    snapshot.AddBlock(op.UserData as MemBlock);
                }
                else if (op.OpType == MemOperation.Type.Free)
                {
                    snapshot.RemoveBlock((ulong)op.UserData);
                }

                /*else
                 * {
                 *  int breakh = 1;
                 * }*/
            }
            return(snapshot);
        }
Exemplo n.º 16
0
        public MemSnapshot Overlap(MemSnapshot other)
        {
            MemSnapshot ret = new MemSnapshot();

            foreach (MemBlock otherBlock in other.m_blocks.Values)
            {
                bool found = false;
                foreach (MemBlock block in m_blocks.Values)
                {
                    if (otherBlock == block)
                    {
                        found = true;
                        break;
                    }
                }
                if (found)
                {
                    ret.AddBlock(otherBlock);
                }
            }
            return(ret);
        }
Exemplo n.º 17
0
        MemSnapshot BuildSnapshotFromDesc(SnapshotDesc desc)
        {
            MemSnapshot snapshot      = new MemSnapshot();
            int         numOperations = desc.memOperationNr;

            if (numOperations > m_memOperations.Count)
            {
                numOperations = m_memOperations.Count;
            }
            for (int i = 0; i < numOperations; ++i)
            {
                MemOperation op = m_memOperations[i];
                if (op.OpType == MemOperation.Type.Alloc)
                {
                    snapshot.AddBlock(op.UserData as MemBlock);
                }
                else if (op.OpType == MemOperation.Type.Free)
                {
                    snapshot.RemoveBlock((ulong)op.UserData);
                }
            }

            return(snapshot);
        }
Exemplo n.º 18
0
 public void BuildTree(MemSnapshot snap)
 {
     memAllocTree1.BuildTree(snap);
     memAllocTree1.ExpandAll();
 }