void OpenMetricData(Treemap.IMetricValue metric, bool focus) { if (metric is Treemap.ManagedObjectMetric) { var m = (Treemap.ManagedObjectMetric)metric; if (m_CurrentTableTypeFilter == metric.GetGroupName()) { var builder = new Database.View.Where.Builder("Index", Database.Operation.Operator.Equal, new Database.Operation.Expression.MetaExpression(metric.GetObjectUID().ToString(), true)); var whereStatement = builder.Build(null, null, null, null, null, m_Spreadsheet.DisplayTable, null); //yeah we could add a no param Build() too.. var row = whereStatement.GetFirstMatchIndex(-1); if (row > 0) { m_Spreadsheet.Goto(new Database.CellPosition(row, 0)); return; } } var lr = new Database.LinkRequestTable(); lr.LinkToOpen = new Database.TableLink(); lr.LinkToOpen.TableName = TableName; lr.SourceTable = null; lr.SourceColumn = null; lr.SourceRow = -1; lr.Parameters.AddValue(ObjectTable.ObjParamName, m.m_Object.PtrObject); lr.Parameters.AddValue(ObjectTable.TypeParamName, m.m_Object.ITypeDescription); OpenLinkRequest(lr, focus, metric.GetGroupName()); } else if (metric is Treemap.NativeObjectMetric) { var m = (Treemap.NativeObjectMetric)metric; if (m_CurrentTableTypeFilter == metric.GetGroupName()) { var builder = new Database.View.Where.Builder("NativeInstanceId", Database.Operation.Operator.Equal, new Database.Operation.Expression.MetaExpression(m_UIState.snapshotMode.snapshot.nativeObjects.instanceId[m.m_ObjectIndex].ToString(), true)); var whereStatement = builder.Build(null, null, null, null, null, m_Spreadsheet.DisplayTable, null); //yeah we could add a no param Build() too.. var row = whereStatement.GetFirstMatchIndex(-1); if (row > 0) { m_Spreadsheet.Goto(new Database.CellPosition(row, 0)); return; } } var lr = new Database.LinkRequestTable(); lr.LinkToOpen = new Database.TableLink(); lr.LinkToOpen.TableName = TableName; var instanceId = m_UIState.snapshotMode.snapshot.nativeObjects.instanceId[m.m_ObjectIndex]; var b = new Database.View.Where.Builder("NativeInstanceId", Database.Operation.Operator.Equal, new Database.Operation.Expression.MetaExpression(instanceId.ToString(), true)); lr.LinkToOpen.RowWhere = new System.Collections.Generic.List <Database.View.Where.Builder>(); lr.LinkToOpen.RowWhere.Add(b); lr.SourceTable = null; lr.SourceColumn = null; lr.SourceRow = -1; OpenLinkRequest(lr, focus, metric.GetGroupName()); } }
public History(TreeMapPane pane) { Mode = pane.m_UIState.CurrentMode; if (pane.m_TreeMap.SelectedItem != null) { m_SelectedItem = pane.m_TreeMap.SelectedItem._metric; m_GroupName = m_SelectedItem.GetGroupName(); } else if (pane.m_TreeMap.SelectedGroup != null) { m_GroupName = pane.m_TreeMap.SelectedGroup._name; } }
public void ShowAllObjects(Treemap.IMetricValue itemCopyToSelect, bool focus) { // TODO: Fix history zooming UX focus = false; Treemap.IMetricValue itemToSelect = null; m_TreeMap.ClearMetric(); if (m_CurrentCodeType == CodeType.Unknown || m_CurrentCodeType == CodeType.Managed) { foreach (var managedObject in m_UIState.snapshotMode.snapshot.CrawledData.ManagedObjects) { if (managedObject.Size > 0) { var o = new Treemap.ManagedObjectMetric(m_UIState.snapshotMode.snapshot, managedObject); if (o.IsSame(itemCopyToSelect)) { itemToSelect = o; } m_TreeMap.AddMetric(o); } } } if (m_CurrentCodeType == CodeType.Unknown || m_CurrentCodeType == CodeType.Native) { for (int i = 0; i != m_UIState.snapshotMode.snapshot.nativeObjects.Count; ++i) { if (m_UIState.snapshotMode.snapshot.nativeObjects.size[i] > 0) { var o = new Treemap.NativeObjectMetric(m_UIState.snapshotMode.snapshot, i); if (o.IsSame(itemCopyToSelect)) { itemToSelect = o; } m_TreeMap.AddMetric(o); } } } m_TreeMap.UpdateMetric(); if (itemToSelect != null) { OpenMetricData(itemToSelect, focus); } else { try { using (new Service <IDebugContextService> .ScopeService(new DebugContextService())) { var lr = new Database.LinkRequestTable(); lr.LinkToOpen = new Database.TableLink(); lr.LinkToOpen.TableName = ObjectAllTable.TableName; lr.SourceTable = null; lr.SourceColumn = null; lr.SourceRow = -1; OpenLinkRequest(lr, false, null, false); } } catch (ExitGUIException) { throw; } catch (Exception e) { throw new Exception(DebugUtility.GetExceptionHelpMessage(e)); } } }