Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServerClient.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LiveShare.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Microbenchmarks.Compiler, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Microbenchmarks, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
Original file line number Diff line number Diff line change
@@ -1,35 +1,36 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See License.txt in the project root for license information.

using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Microsoft.AspNetCore.Razor.ProjectSystem;
using Microsoft.AspNetCore.Razor.Serialization;

namespace Microsoft.AspNetCore.Razor.Microbenchmarks;

internal static class CommonResources
{
public static readonly byte[] LegacyTagHelperBytes = Resources.GetResourceBytes("taghelpers.json");
public static readonly IReadOnlyList<TagHelperDescriptor> LegacyTagHelpers = LoadTagHelpers(LegacyTagHelperBytes);
public static readonly ImmutableArray<TagHelperDescriptor> LegacyTagHelpers = LoadTagHelpers(LegacyTagHelperBytes);

public static readonly byte[] LegacyProjectRazorJsonBytes = Resources.GetResourceBytes("project.razor.json");
public static readonly ProjectRazorJson LegacyProjectRazorJson = LoadProjectRazorJson(LegacyProjectRazorJsonBytes);

public static readonly byte[] TelerikTagHelperBytes = Resources.GetResourceBytes("Kendo.Mvc.Examples.taghelpers.json", folder: "Telerik");
public static readonly IReadOnlyList<TagHelperDescriptor> TelerikTagHelpers = LoadTagHelpers(TelerikTagHelperBytes);
public static readonly ImmutableArray<TagHelperDescriptor> TelerikTagHelpers = LoadTagHelpers(TelerikTagHelperBytes);

public static readonly byte[] TelerikProjectRazorJsonBytes = Resources.GetResourceBytes("Kendo.Mvc.Examples.project.razor.json", folder: "Telerik");
public static readonly ProjectRazorJson TelerikProjectRazorJson = LoadProjectRazorJson(TelerikProjectRazorJsonBytes);

private static IReadOnlyList<TagHelperDescriptor> LoadTagHelpers(byte[] bytes)
private static ImmutableArray<TagHelperDescriptor> LoadTagHelpers(byte[] bytes)
{
using var stream = new MemoryStream(bytes);
using var reader = new StreamReader(stream);

return JsonDataConvert.DeserializeData(reader,
static r => r.ReadArrayOrEmpty(
static r => ObjectReaders.ReadTagHelper(r, useCache: false)));
static r => r.ReadImmutableArray(
static r => ObjectReaders.ReadTagHelper(r, useCache: false))).NullToEmpty();
}

private static ProjectRazorJson LoadProjectRazorJson(byte[] bytes)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.LanguageServer;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Microsoft.AspNetCore.Razor.ProjectSystem;
using Microsoft.AspNetCore.Razor.Telemetry;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
Expand Down Expand Up @@ -59,7 +59,7 @@ internal IDocumentSnapshot GetDocumentSnapshot(string projectFilePath, string fi

var projectSnapshotManager = CreateProjectSnapshotManager();
projectSnapshotManager.ProjectAdded(hostProject);
var tagHelpers = GetTagHelperDescriptors();
var tagHelpers = CommonResources.LegacyTagHelpers;
var projectWorkspaceState = new ProjectWorkspaceState(tagHelpers, CodeAnalysis.CSharp.LanguageVersion.CSharp11);
projectSnapshotManager.ProjectWorkspaceStateChanged(projectFilePath, projectWorkspaceState);
projectSnapshotManager.DocumentAdded(hostProject, hostDocument, textLoader);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Microsoft.AspNetCore.Razor.Serialization;
using Microsoft.AspNetCore.Razor.Telemetry;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Razor;
Expand All @@ -18,9 +17,9 @@ public abstract partial class ProjectSnapshotManagerBenchmarkBase
{
private class StaticTagHelperResolver : TagHelperResolver
{
private readonly IReadOnlyList<TagHelperDescriptor> _tagHelpers;
private readonly ImmutableArray<TagHelperDescriptor> _tagHelpers;

public StaticTagHelperResolver(IReadOnlyList<TagHelperDescriptor> tagHelpers, ITelemetryReporter telemetryReporter)
public StaticTagHelperResolver(ImmutableArray<TagHelperDescriptor> tagHelpers, ITelemetryReporter telemetryReporter)
: base(telemetryReporter)
{
_tagHelpers = tagHelpers;
Expand All @@ -30,6 +29,6 @@ public override Task<TagHelperResolutionResult> GetTagHelpersAsync(
Project project,
IProjectSnapshot projectSnapshot,
CancellationToken cancellationToken = default)
=> Task.FromResult(new TagHelperResolutionResult(_tagHelpers, Array.Empty<RazorDiagnostic>()));
=> Task.FromResult(new TagHelperResolutionResult(_tagHelpers));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,16 @@
// Licensed under the MIT license. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.PooledObjects;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Microsoft.AspNetCore.Razor.Telemetry;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.Razor;
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
using Microsoft.CodeAnalysis.Text;
using Newtonsoft.Json;

namespace Microsoft.AspNetCore.Razor.Microbenchmarks;

Expand Down Expand Up @@ -63,19 +60,8 @@ protected ProjectSnapshotManagerBenchmarkBase()

Documents = documents.ToImmutable();

TagHelperResolver = new StaticTagHelperResolver(GetTagHelperDescriptors(), NoOpTelemetryReporter.Instance);
}

internal IReadOnlyList<TagHelperDescriptor> GetTagHelperDescriptors()
{
var tagHelperBuffer = Resources.GetResourceBytes("taghelpers.json");

var serializer = new JsonSerializer();
serializer.Converters.Add(TagHelperDescriptorJsonConverter.Instance);
using var stream = new MemoryStream(tagHelperBuffer);
using var reader = new JsonTextReader(new StreamReader(stream));

return serializer.Deserialize<IReadOnlyList<TagHelperDescriptor>>(reader) ?? Array.Empty<TagHelperDescriptor>();
var tagHelpers = CommonResources.LegacyTagHelpers;
TagHelperResolver = new StaticTagHelperResolver(tagHelpers, NoOpTelemetryReporter.Instance);
}

internal DefaultProjectSnapshotManager CreateProjectSnapshotManager()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
using System.IO;
using System.Text;
using BenchmarkDotNet.Attributes;
using Microsoft.CodeAnalysis.Razor;
using Microsoft.AspNetCore.Razor.Serialization;
using Microsoft.AspNetCore.Razor.Serialization.Converters;
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
using Newtonsoft.Json;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using BenchmarkDotNet.Attributes;
Expand All @@ -15,34 +14,37 @@ public class RemoteTagHelperDeltaProviderBenchmark
{
public RemoteTagHelperDeltaProviderBenchmark()
{
DefaultTagHelperSet = CommonResources.LegacyTagHelpers.ToHashSet();
DefaultTagHelperSet = CommonResources.LegacyTagHelpers.ToHashSet().ToImmutableArray();

Added50PercentMoreDefaultTagHelpers = DefaultTagHelperSet
.Take(DefaultTagHelperSet.Count / 2)
.Take(DefaultTagHelperSet.Length / 2)
.Select(th => new RenamedTagHelperDescriptor(th.Name + "Added", th))
.Concat(DefaultTagHelperSet)
.ToHashSet();
.ToHashSet()
.ToImmutableArray();

RemovedHalfOfDefaultTagHelpers = DefaultTagHelperSet
.Take(CommonResources.LegacyTagHelpers.Count / 2)
.ToHashSet();
.Take(CommonResources.LegacyTagHelpers.Length / 2)
.ToHashSet()
.ToImmutableArray();

var tagHelpersToMutate = DefaultTagHelperSet
.Take(2)
.Select(th => new RenamedTagHelperDescriptor(th.Name + "Mutated", th));
MutatedTwoDefaultTagHelpers = DefaultTagHelperSet
.Skip(2)
.Concat(tagHelpersToMutate)
.ToHashSet();
.ToHashSet()
.ToImmutableArray();
}

private IReadOnlyCollection<TagHelperDescriptor> DefaultTagHelperSet { get; }
private ImmutableArray<TagHelperDescriptor> DefaultTagHelperSet { get; }

private IReadOnlyCollection<TagHelperDescriptor> Added50PercentMoreDefaultTagHelpers { get; }
private ImmutableArray<TagHelperDescriptor> Added50PercentMoreDefaultTagHelpers { get; }

private IReadOnlyCollection<TagHelperDescriptor> RemovedHalfOfDefaultTagHelpers { get; }
private ImmutableArray<TagHelperDescriptor> RemovedHalfOfDefaultTagHelpers { get; }

private IReadOnlyCollection<TagHelperDescriptor> MutatedTwoDefaultTagHelpers { get; }
private ImmutableArray<TagHelperDescriptor> MutatedTwoDefaultTagHelpers { get; }

private string ProjectFilePath { get; } = "C:/path/to/project.csproj";

Expand All @@ -68,7 +70,7 @@ public void TagHelper_GetTagHelpersDelta_NewProject()
[Benchmark(Description = "Calculate Delta - Remove project")]
public void TagHelper_GetTagHelpersDelta_RemoveProject()
{
_ = Provider.GetTagHelpersDelta(ProjectFilePath, LastResultId, Array.Empty<TagHelperDescriptor>());
_ = Provider.GetTagHelpersDelta(ProjectFilePath, LastResultId, ImmutableArray<TagHelperDescriptor>.Empty);
}

[Benchmark(Description = "Calculate Delta - Add lots of TagHelpers")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@
// Licensed under the MIT license. See License.txt in the project root for license information.

using System.Collections.Generic;
using System.IO;
using System.Linq;
using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Newtonsoft.Json;
using Microsoft.AspNetCore.Razor.Utilities;

namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization;

Expand All @@ -24,16 +22,8 @@ public class MemoryCacheBenchmark
[GlobalSetup]
public void Setup()
{
var tagHelperBuffer = Resources.GetResourceBytes("taghelpers.json");

// Deserialize from json file.
var serializer = new JsonSerializer();
serializer.Converters.Add(TagHelperDescriptorJsonConverter.Instance);
using var stream = new MemoryStream(tagHelperBuffer);
using var reader = new JsonTextReader(new StreamReader(stream));

_tagHelpers = serializer.Deserialize<IReadOnlyList<TagHelperDescriptor>>(reader).AssumeNotNull();
_tagHelperHashes = TagHelpers.Select(th => th.GetHashCode()).ToList();
_tagHelpers = CommonResources.LegacyTagHelpers;
_tagHelperHashes = TagHelpers.Select(th => th.GetHashCode()).ToArray();

// Set cache size to 400 so anything more then that will force compacts
_cache = new MemoryCache<int, TagHelperDescriptor>(400);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
using System.IO;
using System.Text;
using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Microsoft.AspNetCore.Razor.ProjectSystem;
using Microsoft.AspNetCore.Razor.Serialization;

namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization;

Expand Down Expand Up @@ -56,7 +57,7 @@ public void Deserialize()
var projectRazorJson = DeserializeProjectRazorJson(reader);

if (projectRazorJson.ProjectWorkspaceState is null ||
projectRazorJson.ProjectWorkspaceState.TagHelpers.Count != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Count)
projectRazorJson.ProjectWorkspaceState.TagHelpers.Length != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Length)
{
throw new InvalidDataException();
}
Expand All @@ -78,7 +79,7 @@ public void RoundTrip()
var projectRazorJson = DeserializeProjectRazorJson(reader);

if (projectRazorJson.ProjectWorkspaceState is null ||
projectRazorJson.ProjectWorkspaceState.TagHelpers.Count != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Count)
projectRazorJson.ProjectWorkspaceState.TagHelpers.Length != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Length)
{
throw new InvalidDataException();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Text;
using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Microsoft.AspNetCore.Razor.Serialization;
using Microsoft.AspNetCore.Razor.Serialization.Converters;
using Newtonsoft.Json;

namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization;
Expand All @@ -17,7 +17,7 @@ public class TagHelperResolutionResultSerializationBenchmark
[ParamsAllValues]
public ResourceSet ResourceSet { get; set; }

private IReadOnlyList<TagHelperDescriptor> TagHelpers
private ImmutableArray<TagHelperDescriptor> TagHelpers
=> ResourceSet switch
{
ResourceSet.Telerik => CommonResources.TelerikTagHelpers,
Expand All @@ -40,7 +40,7 @@ public void GlobalSetup()
[IterationSetup]
public void IterationSetup()
{
_tagHelperResolutionResult = new TagHelperResolutionResult(TagHelpers, Array.Empty<RazorDiagnostic>());
_tagHelperResolutionResult = new TagHelperResolutionResult(TagHelpers);
}

[Benchmark(Description = "RoundTrip TagHelperDescriptorResult")]
Expand All @@ -60,7 +60,7 @@ public void RoundTrip()
var result = Serializer.Deserialize<TagHelperResolutionResult>(jsonReader);

if (result is null ||
result.Descriptors.Count != TagHelpers.Count)
result.Descriptors.Length != TagHelpers.Length)
{
throw new InvalidDataException();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT license. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Microsoft.AspNetCore.Razor.Serialization;

namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization;

Expand All @@ -32,8 +33,9 @@ private byte[] TagHelperBytes
private static IReadOnlyList<TagHelperDescriptor> DeserializeTagHelpers(TextReader reader)
{
return JsonDataConvert.DeserializeData(reader,
static r => r.ReadArrayOrEmpty(
static r => ObjectReaders.ReadTagHelper(r, useCache: false)));
static r => r.ReadArray(
static r => ObjectReaders.ReadTagHelper(r, useCache: false)))
?? Array.Empty<TagHelperDescriptor>();
}

private static void SerializeTagHelpers(TextWriter writer, IReadOnlyList<TagHelperDescriptor> tagHelpers)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Licensed under the MIT license. See License.txt in the project root for license information.

using Microsoft.AspNetCore.Razor.ExternalAccess.OmniSharp.Document;
using Microsoft.AspNetCore.Razor.ProjectEngineHost.Serialization;
using Microsoft.AspNetCore.Razor.ProjectSystem;
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
using Microsoft.CodeAnalysis.Razor.Workspaces.ProjectSystem;
using Newtonsoft.Json;
Expand Down
Loading