Ejemplo n.º 1
0
 public PProfInfo.Location GetOrCreateLocationInfo(
     LocationDescriptor locationDescriptor,
     PProfInfo.Mapping mappingInfo,
     PProfInfo.Function functionInfo)
 {
     return(GetOrCreateLocationInfo(locationDescriptor, mappingInfo, new PProfInfo.Function[1] {
         functionInfo
     }));
 }
Ejemplo n.º 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);
        }
Ejemplo n.º 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);
        }
Ejemplo n.º 4
0
        public bool TryAddLocationToLastSample(
            LocationDescriptor locationDescriptor,
            PProfBuilder.TryResolveLocationSymbolsDelegate tryResolveLocationSymbolsDelegate)
        {
            if (!OwnerBuilder.TryGetOrResolveCreatePProfLocationInfo(
                    locationDescriptor,
                    this,
                    tryResolveLocationSymbolsDelegate,
                    out PProfInfo.Location locationInfo))
            {
                return(false);
            }

            // Functions:
            for (int i = 0; i < locationInfo.FunctionInfos.Count; i++)
            {
                PProfInfo.Function functionInfo = locationInfo.FunctionInfos[0];

                if (functionInfo.NameInfo != null)
                {
                    AddToStringTable(functionInfo.NameInfo);
                    functionInfo.Item.Name = functionInfo.NameInfo.OffsetInStringTable;
                }

                if (functionInfo.SystemNameInfo != null)
                {
                    AddToStringTable(functionInfo.SystemNameInfo);
                    functionInfo.Item.SystemName = functionInfo.SystemNameInfo.OffsetInStringTable;
                }

                if (functionInfo.FilenameInfo != null)
                {
                    AddToStringTable(functionInfo.FilenameInfo);
                    functionInfo.Item.Filename = functionInfo.FilenameInfo.OffsetInStringTable;
                }

                AddToFunctionsList(functionInfo);
            }

            // Mapping:
            PProfInfo.Mapping mappingInfo = locationInfo.MappingInfo;

            if (mappingInfo.FilenameInfo != null)
            {
                AddToStringTable(mappingInfo.FilenameInfo);
                mappingInfo.Item.Filename = mappingInfo.FilenameInfo.OffsetInStringTable;
            }

            if (mappingInfo.BuildIdInfo != null)
            {
                AddToStringTable(mappingInfo.BuildIdInfo);
                mappingInfo.Item.BuildId = mappingInfo.BuildIdInfo.OffsetInStringTable;
            }

            AddToMappingsList(mappingInfo);

            // Location:
            AddToLocationsList(locationInfo);

            // Sample:
            _lastSample.LocationId.Add(locationInfo.Item.Id);

            return(true);
        }
Ejemplo n.º 5
0
 public bool TryGetLocationInfo(LocationDescriptor locationDescriptor, out PProfInfo.Location locationInfo)
 {
     return(_locations.TryGetValue(locationDescriptor, out locationInfo));
 }