void MigrateSelectedState(bool expandIfNecessary) { if (m_SelectedItemMarkerIdPath == null && m_LegacySelectedItemMarkerNamePath == null) { return; } // Find view id which corresponds to markerPath var newSelectedId = m_FrameDataView.GetRootItemID(); bool selectedItemsPathIsExpanded = true; if (m_SelectedItemMarkerIdPath != null) { foreach (var marker in m_SelectedItemMarkerIdPath.Value.markerIds) { var childrenId = m_FrameDataView.GetItemChildren(newSelectedId); foreach (var childId in childrenId) { if (marker == m_FrameDataView.GetItemMarkerID(childId)) { // check if the parent is expanded if (!IsExpanded(newSelectedId)) { selectedItemsPathIsExpanded = false; } newSelectedId = childId; break; } } if (newSelectedId == 0) { break; } } } else if (m_LegacySelectedItemMarkerNamePath != null) { var markerIdPath = new List <int>(); var markerNames = m_LegacySelectedItemMarkerNamePath.Split('/'); foreach (var markerName in markerNames) { var childrenId = m_FrameDataView.GetItemChildren(newSelectedId); foreach (var childId in childrenId) { if (markerName == m_FrameDataView.GetItemFunctionName(childId)) { // check if the parent is expanded if (!IsExpanded(newSelectedId)) { selectedItemsPathIsExpanded = false; } newSelectedId = childId; markerIdPath.Add(m_FrameDataView.GetItemMarkerID(childId)); break; } } if (newSelectedId == 0) { break; } } m_SelectedItemMarkerIdPath = new FrameDataView.MarkerPath(markerIdPath); m_LegacySelectedItemMarkerNamePath = null; } var newSelection = (newSelectedId == 0) ? new List <int>() : new List <int>() { newSelectedId }; state.selectedIDs = newSelection; if (newSelectedId != 0 && isInitialized && (selectedItemsPathIsExpanded || expandIfNecessary)) { FrameItem(newSelectedId); } }
void MigrateSelectedState(bool expandIfNecessary) { if (m_SelectedItemMarkerIdPath == null && m_LegacySelectedItemMarkerNamePath == null) { return; } // Find view id which corresponds to markerPath var newSelectedId = m_FrameDataView.GetRootItemID(); bool selectedItemsPathIsExpanded = true; if (m_SelectedItemMarkerIdPath != null) { foreach (var marker in m_SelectedItemMarkerIdPath.Value.markerIds) { if (m_FrameDataView.HasItemChildren(newSelectedId)) { m_FrameDataView.GetItemChildren(newSelectedId, m_ReusableChildrenIds); foreach (var childId in m_ReusableChildrenIds) { if (marker == m_FrameDataView.GetItemMarkerID(childId)) { // check if the parent is expanded if (!IsExpanded(newSelectedId)) { selectedItemsPathIsExpanded = false; } newSelectedId = childId; break; } } } if (newSelectedId == 0) { break; } } } else if (m_LegacySelectedItemMarkerNamePath != null) { var markerIdPath = new List <int>(); var markerNames = m_LegacySelectedItemMarkerNamePath.Split('/'); foreach (var markerName in markerNames) { if (m_FrameDataView.HasItemChildren(newSelectedId)) { m_FrameDataView.GetItemChildren(newSelectedId, m_ReusableChildrenIds); foreach (var childId in m_ReusableChildrenIds) { if (markerName == m_FrameDataView.GetItemFunctionName(childId)) { // check if the parent is expanded if (!IsExpanded(newSelectedId)) { selectedItemsPathIsExpanded = false; } newSelectedId = childId; markerIdPath.Add(m_FrameDataView.GetItemMarkerID(childId)); break; } } } if (newSelectedId == 0) { break; } } m_SelectedItemMarkerIdPath = new FrameDataView.MarkerPath(markerIdPath); m_LegacySelectedItemMarkerNamePath = null; } var newSelection = (newSelectedId == 0) ? new List <int>() : new List <int>() { newSelectedId }; state.selectedIDs = newSelection; // Framing invalidates expanded state and this is very expensive operation to perform each frame. // Thus we auto frame selection only when we are not profiling. var collectingSamples = ProfilerDriver.enabled && (ProfilerDriver.profileEditor || EditorApplication.isPlaying); var isFramingAllowed = !collectingSamples; if (newSelectedId != 0 && isInitialized && isFramingAllowed && (selectedItemsPathIsExpanded || expandIfNecessary)) { FrameItem(newSelectedId); } }