private void AddToLocationsList(PProfInfo.Location locationInfo) { if (locationInfo != null && !locationInfo.IsIncludedInSession) { PProfBuildSessionState buildState = ValidOwnerBuildState; locationInfo.IsIncludedInSession = true; buildState.Locations.Add(locationInfo); _profile.Location.Add(locationInfo.Item); } }
internal bool TryGetOrResolveCreatePProfLocationInfo( LocationDescriptor locationDescriptor, PProfBuildSession pprofBuildSession, TryResolveLocationSymbolsDelegate tryResolveLocationSymbolsDelegate, out PProfInfo.Location locationInfo) { if (_cache.TryGetLocationInfo(locationDescriptor, out locationInfo)) { return(true); } if ( tryResolveLocationSymbolsDelegate == null || !tryResolveLocationSymbolsDelegate( pprofBuildSession, locationDescriptor, out string functionName, out string classTypeName, out string binaryContainerName, out string binaryContainerVersion)) { locationInfo = null; return(false); } BuildMonikers( ref functionName, ref classTypeName, ref binaryContainerName, ref binaryContainerVersion, out string functionMoniker, out string binaryContainerMoniker); // system name is not used so pass null (i.e. empty string) PProfInfo.Function functionInfo = _cache.GetOrCreateFunctionInfo(functionMoniker, functionMoniker, null); PProfInfo.Mapping mappingInfo = _cache.GetOrCreateMappingInfo(binaryContainerMoniker, binaryContainerName, binaryContainerVersion); locationInfo = _cache.GetOrCreateLocationInfo(locationDescriptor, mappingInfo, functionInfo); return(true); }
public PProfInfo.Location GetOrCreateLocationInfo( LocationDescriptor locationDescriptor, PProfInfo.Mapping mappingInfo, IReadOnlyList <PProfInfo.Function> functionInfos) { // locationDescriptor is value type so can never be null Validate.NotNull(mappingInfo, nameof(mappingInfo)); Validate.NotNull(functionInfos, nameof(functionInfos)); if (!_locations.TryGetValue(locationDescriptor, out PProfInfo.Location locationInfo)) { var locationItem = new PProfProto.Location() { Id = NextIdForLocation(), MappingId = mappingInfo.Item.Id, Address = ProtoConstants.NumericValue.UnsetUInt64, IsFolded = false }; for (int i = 0; i < functionInfos.Count; i++) { if (functionInfos[i] != null) { locationItem.Line.Add(new PProfProto.Line() { FunctionId = functionInfos[i].Item.Id, Line_ = ProtoConstants.NumericValue.UnsetInt64 }); } } locationInfo = new PProfInfo.Location(locationItem, mappingInfo, functionInfos); _locations.Add(locationDescriptor, locationInfo); } return(locationInfo); }
public bool TryGetLocationInfo(LocationDescriptor locationDescriptor, out PProfInfo.Location locationInfo) { return(_locations.TryGetValue(locationDescriptor, out locationInfo)); }
public void ResetSession() { // Clear Locations: { var list = _locations; int itemCount = list.Count; for (int i = 0; i < itemCount; i++) { PProfInfo.Location pprofInfo = list[i]; pprofInfo.IsIncludedInSession = false; } list.Clear(); } // Clear Mappings: { var list = _mappings; int itemCount = list.Count; for (int i = 0; i < itemCount; i++) { PProfInfo.Mapping pprofInfo = list[i]; pprofInfo.IsIncludedInSession = false; pprofInfo.Item.Filename = ProtoConstants.StringTableIndex.GetUnresolvedIfSet(pprofInfo.Item.Filename); pprofInfo.Item.BuildId = ProtoConstants.StringTableIndex.GetUnresolvedIfSet(pprofInfo.Item.BuildId); } list.Clear(); } // Clear Functions: { var list = _functions; int itemCount = list.Count; for (int i = 0; i < itemCount; i++) { PProfInfo.Function pprofInfo = list[i]; pprofInfo.IsIncludedInSession = false; pprofInfo.Item.Name = ProtoConstants.StringTableIndex.GetUnresolvedIfSet(pprofInfo.Item.Name); pprofInfo.Item.SystemName = ProtoConstants.StringTableIndex.GetUnresolvedIfSet(pprofInfo.Item.SystemName); pprofInfo.Item.Filename = ProtoConstants.StringTableIndex.GetUnresolvedIfSet(pprofInfo.Item.Filename); } list.Clear(); } // Clear the String Table: { var list = _stringTable; int itemCount = list.Count; for (int i = 0; i < itemCount; i++) { list[i].ResetOffsetInStringTable(); } list.Clear(); } // Finally, clear the Session: _currentSession = null; }