Skip to content

Commit

Permalink
cleanup CorProfiler (#94)
Browse files Browse the repository at this point in the history
* refactor environment references

* cleanup GetAssemblyName

* extract function info

* format

* remove unnecessary trace::

* cleanup goto

* cleanup module_info

* rename integration structs

* move filter functions, add test

* add virtual method example

* add test for filter by target

* use DWORD

* fix sln change

* fix sln

* add more logging in ModuleLoadFinished() and JITCompilationStarted()

* more tests

* re-add integration.h, fix logging

* more logging tweaks and never add assembly references to mscorlib

* break out of some loops

* disable clr tests

* add `testhost.x86` to the list of valid test runner names

* try to find repo root directory

* reduce C++ compiler optimizations (#100)

* fix trying to find repo root

* add more detailed logging in ModuleLoadFinished()

* turn C++ compiler optimizations down slightly, they were breaking EnumAssemblyRefs()

* maybe fix x86

* Reduce C++ compiler optimizations, redux (#101)

* Revert "maybe fix x86"

This reverts commit 90320a7.

* fix duplicate logging, include method token

* use BYTE typedef

* add more output to console app integration test

* turn off more C++ optimizations: don't inline any method and don't omit frame pointers
  • Loading branch information
dd-caleb authored and lucaspimentel committed Sep 5, 2018
1 parent 09b9715 commit 8fac6cf
Show file tree
Hide file tree
Showing 23 changed files with 910 additions and 444 deletions.
4 changes: 3 additions & 1 deletion samples/Samples.ConsoleFramework/Program.cs
Expand Up @@ -11,7 +11,9 @@ private static void Main(string[] args)

private void Run()
{
Console.WriteLine(new ExampleLibrary.Class1().Add(1, 2));
Console.WriteLine($"1 + 2 = {new ExampleLibrary.Class1().Add(1, 2)}");
Console.WriteLine($"1 * 2 = {new ExampleLibrary.Class1().Multiply(1, 2)}");
Console.WriteLine($"1 / 2 = {new ExampleLibrary.Class1().Divide(1, 2)}");
Console.ReadLine();
}
}
Expand Down
9 changes: 9 additions & 0 deletions samples/Samples.ExampleLibrary/Class1.cs
Expand Up @@ -2,6 +2,8 @@
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>

using System;

namespace Samples.ExampleLibrary
{
public class Class1
Expand All @@ -10,5 +12,12 @@ public int Add(int x, int y)
{
return x + y;
}

public virtual int Multiply(int x, int y)
{
return x * y;
}

public Func<int, int, int> Divide = (int x, int y) => x / y;
}
}
5 changes: 5 additions & 0 deletions samples/Samples.ExampleLibraryTracer/Class1.cs
Expand Up @@ -8,5 +8,10 @@ public int Add(int x, int y)
{
return 2 * (x + y);
}

public virtual int Multiply(int x, int y)
{
return 2 * (x * y);
}
}
}
Expand Up @@ -60,25 +60,25 @@
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(VC_IncludePath);$(CORECLR_PATH)\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;$(CORECLR_PATH)\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)\inc;$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath)</IncludePath>
<IncludePath>$(CORECLR_PATH)\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;$(CORECLR_PATH)\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)\inc;$(VC_IncludePath);$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath)</IncludePath>
<OutDir>bin\$(Configuration)\$(Platform)\static\</OutDir>
<IntDir>obj\$(Configuration)\$(Platform)\static\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(VC_IncludePath);$(CORECLR_PATH)\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;$(CORECLR_PATH)\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)\inc;$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath)</IncludePath>
<IncludePath>$(CORECLR_PATH)\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;$(CORECLR_PATH)\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)\inc;$(VC_IncludePath);$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath)</IncludePath>
<OutDir>bin\$(Configuration)\x86\static\</OutDir>
<IntDir>obj\$(Configuration)\x86\static\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(VC_IncludePath);$(CORECLR_PATH)\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;$(CORECLR_PATH)\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)\inc;$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath)</IncludePath>
<IncludePath>$(CORECLR_PATH)\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;$(CORECLR_PATH)\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)\inc;$(VC_IncludePath);$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath)</IncludePath>
<OutDir>bin\$(Configuration)\$(Platform)\static\</OutDir>
<IntDir>obj\$(Configuration)\$(Platform)\static\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(VC_IncludePath);$(CORECLR_PATH)\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;$(CORECLR_PATH)\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)\inc;$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath)</IncludePath>
<IncludePath>$(CORECLR_PATH)\src\pal\prebuilt\inc;$(CORECLR_PATH)\src\inc;$(CORECLR_PATH)\bin\Product\$(BuildOS).$(BuildArch).$(BuildType)\inc;$(VC_IncludePath);$(NETFXSDKDir)Include\um;$(WindowsSDK_IncludePath)</IncludePath>
<OutDir>bin\$(Configuration)\x86\static\</OutDir>
<IntDir>obj\$(Configuration)\x86\static\</IntDir>
</PropertyGroup>
Expand All @@ -90,6 +90,8 @@
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<LanguageStandard>stdcpp17</LanguageStandard>
<PreprocessorDefinitions>_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
Expand All @@ -100,30 +102,44 @@
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<LanguageStandard>stdcpp17</LanguageStandard>
<PreprocessorDefinitions>_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<Optimization>Custom</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<IntrinsicFunctions>false</IntrinsicFunctions>
<TreatWarningAsError>true</TreatWarningAsError>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PreprocessorDefinitions>_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpp17</LanguageStandard>
<WholeProgramOptimization>true</WholeProgramOptimization>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>false</OmitFramePointers>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<Optimization>Custom</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<IntrinsicFunctions>false</IntrinsicFunctions>
<TreatWarningAsError>true</TreatWarningAsError>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PreprocessorDefinitions>_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpp17</LanguageStandard>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<WholeProgramOptimization>true</WholeProgramOptimization>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ConformanceMode>true</ConformanceMode>
<OmitFramePointers>false</OmitFramePointers>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
Expand All @@ -137,7 +153,6 @@
<ClInclude Include="ILRewriterWrapper.h" />
<ClInclude Include="integration.h" />
<ClInclude Include="integration_loader.h" />
<ClInclude Include="IntegrationType.h" />
<ClInclude Include="clr_helpers.h" />
<ClInclude Include="json.hpp" />
<ClInclude Include="Macros.h" />
Expand All @@ -157,6 +172,7 @@
<ClCompile Include="integration_loader.cpp" />
<ClCompile Include="Interop.cpp" />
<ClCompile Include="metadata_builder.cpp" />
<ClCompile Include="util.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>
8 changes: 0 additions & 8 deletions src/Datadog.Trace.ClrProfiler.Native/IntegrationType.h

This file was deleted.

27 changes: 24 additions & 3 deletions src/Datadog.Trace.ClrProfiler.Native/ModuleMetadata.h
Expand Up @@ -3,7 +3,10 @@
#include <corhlpr.h>
#include <unordered_map>
#include "ComPtr.h"
#include "Integration.h"
#include "clr_helpers.h"
#include "integration.h"

namespace trace {

class ModuleMetadata {
private:
Expand All @@ -13,11 +16,11 @@ class ModuleMetadata {
public:
const ComPtr<IMetaDataImport> metadata_import{};
std::wstring assemblyName = L"";
std::vector<integration> integrations = {};
std::vector<Integration> integrations = {};

ModuleMetadata(ComPtr<IMetaDataImport> metadata_import,
std::wstring assembly_name,
std::vector<integration> integrations)
std::vector<Integration> integrations)
: metadata_import(std::move(metadata_import)),
assemblyName(std::move(assembly_name)),
integrations(std::move(integrations)) {}
Expand Down Expand Up @@ -55,4 +58,22 @@ class ModuleMetadata {
const mdTypeRef valueIn) {
wrapper_parent_type[keyIn] = valueIn;
}

inline std::vector<MethodReplacement> GetMethodReplacementsForCaller(
const trace::FunctionInfo& caller) {
std::vector<MethodReplacement> enabled;
for (auto& i : integrations) {
for (auto& mr : i.method_replacements) {
if ((mr.caller_method.type_name.empty() ||
mr.caller_method.type_name == caller.type.name) &&
(mr.caller_method.method_name.empty() ||
mr.caller_method.method_name == caller.name)) {
enabled.push_back(mr);
}
}
}
return enabled;
}
};

} // namespace trace

0 comments on commit 8fac6cf

Please sign in to comment.