Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
 public bool TryGetLocationInfo(LocationDescriptor locationDescriptor, out PProfInfo.Location locationInfo)
 {
     return(_locations.TryGetValue(locationDescriptor, out locationInfo));
 }
Example #5
0
        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;
        }