Added System.Runtime.ProfileOptimization (dotnet/corefx#31067)
authorMarco Rossignoli <marco.rossignoli@gmail.com>
Fri, 3 Aug 2018 04:16:26 +0000 (06:16 +0200)
committerJan Kotas <jkotas@microsoft.com>
Fri, 3 Aug 2018 04:16:26 +0000 (21:16 -0700)
Commit migrated from https://github.com/dotnet/corefx/commit/23fab4631ed927f5657e4ab4a6ce4d45d08bcf7a

src/libraries/System.Runtime.Extensions/ref/System.Runtime.Extensions.cs
src/libraries/System.Runtime.Extensions/src/System.Runtime.Extensions.csproj
src/libraries/System.Runtime.Extensions/src/System/Runtime/ProfileOptimization.cs [new file with mode: 0644]
src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj
src/libraries/System.Runtime.Extensions/tests/System/Runtime/ProfileOptimization.netcoreapp.cs [new file with mode: 0644]

index 761ad44..cab542f 100644 (file)
@@ -1757,6 +1757,14 @@ namespace System.Reflection
         public System.Reflection.AssemblyName GetAssemblyName(System.String assemblyFile) { throw null; }
     }
 }
+namespace System.Runtime
+{
+    public static class ProfileOptimization
+    {
+        public static void SetProfileRoot(string directoryPath) { throw null; }
+        public static void StartProfile(string profile) { throw null; }
+    }
+}
 namespace System.Runtime.Versioning
 {
     public sealed partial class FrameworkName : System.IEquatable<System.Runtime.Versioning.FrameworkName>
index 4600b9a..5ba1cce 100644 (file)
@@ -36,6 +36,7 @@
     <Compile Include="System\IO\InvalidDataException.cs" />
     <Compile Include="System\Net\WebUtility.cs" />
     <Compile Include="System\Reflection\AssemblyNameProxy.cs" />
+    <Compile Include="System\Runtime\ProfileOptimization.cs" />
     <Compile Include="System\Runtime\Versioning\FrameworkName.cs" />
     <Compile Include="System\Runtime\Versioning\ComponentGuaranteesAttribute.cs" />
     <Compile Include="System\Runtime\Versioning\ResourceConsumptionAttribute.cs" />
diff --git a/src/libraries/System.Runtime.Extensions/src/System/Runtime/ProfileOptimization.cs b/src/libraries/System.Runtime.Extensions/src/System/Runtime/ProfileOptimization.cs
new file mode 100644 (file)
index 0000000..31b0f65
--- /dev/null
@@ -0,0 +1,21 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Runtime.Loader;
+
+namespace System.Runtime
+{
+    public static class ProfileOptimization
+    {
+        public static void SetProfileRoot(string directoryPath)
+        {
+            AssemblyLoadContext.Default.SetProfileOptimizationRoot(directoryPath);
+        }
+
+        public static void StartProfile(string profile)
+        {
+            AssemblyLoadContext.Default.StartProfileOptimization(profile);
+        }
+    }
+}
index 4e4a20b..f2800ce 100644 (file)
@@ -30,6 +30,7 @@
     <Compile Include="System\IO\PathTests.netcoreapp.cs" />
     <Compile Include="System\IO\PathTests_Unix.cs" />
     <Compile Include="System\IO\PathTests_Join.netcoreapp.cs" />
+    <Compile Include="System\Runtime\ProfileOptimization.netcoreapp.cs" />
   </ItemGroup>
   <ItemGroup Condition="'$(TargetGroup)'!='netstandard'">
     <Compile Include="System\BitConverterSpan.cs" />
diff --git a/src/libraries/System.Runtime.Extensions/tests/System/Runtime/ProfileOptimization.netcoreapp.cs b/src/libraries/System.Runtime.Extensions/tests/System/Runtime/ProfileOptimization.netcoreapp.cs
new file mode 100644 (file)
index 0000000..367a9df
--- /dev/null
@@ -0,0 +1,30 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Diagnostics;
+using System.IO;
+using Xunit;
+
+namespace System.Runtime.Tests
+{
+    public class ProfileOptimizationTest : RemoteExecutorTestBase
+    {
+        [Fact]
+        public void ProfileOptimization_CheckFileExists()
+        {
+            string tmpProfileFilePath = GetTestFileName();
+
+            RemoteInvoke(profileFilePath =>
+            {
+                ProfileOptimization.SetProfileRoot(Path.GetDirectoryName(profileFilePath));
+                ProfileOptimization.StartProfile(Path.GetFileName(profileFilePath));
+                return 42;
+            }, tmpProfileFilePath).Dispose();
+
+            FileInfo fileInfo = new FileInfo(tmpProfileFilePath);
+            Assert.True(fileInfo.Exists);
+            Assert.True(fileInfo.Length > 0);
+        }
+    }
+}