Skip to content

Conversation

@Sergio0694
Copy link
Contributor

@Sergio0694 Sergio0694 commented Apr 8, 2020

What kind of change does this PR introduce?

This PR adds a profiler project using BenchmarkDotNet.

What is the current behavior?

There is no built-in profiler.

What is the new behavior?

There is a profiler to benchmark some REST calls on .NET Core 2.1 and 3.1.

What might this PR break?
Nothing.

Please check if the PR fulfills these requirements

  • Tests for the changes have been added (for bug fixes / features)
  • Docs have been added / updated (for bug fixes / features)

Other information:
cc. @clairernovotny, this PR is still marked as draft for now. I can't figure out how to make the project build with BenchmarkDotNet when refit is directly referenced from the local projects and not through NuGet, could you help with that? I copied/modified the .csproj code from the test project and I can get the profiler to build and run correctly if I run it directly from VS and try to execute one of the benchmarking methods, but if I use just dotnet Refit.Profiler.dll and let BenchmarkDotNet do its thing, it fails to run the benchmark with an error saying the interface in use is not a valid refit interface, which shows the build task is not run correctly I guess? Any help here is welcome 😄

cc. @Dreamescaper - feel free to help out with new benchmarks to add!

NOTE: this PR needs to be merged in before #897 so that we can then run comparative benchmarks between the two versions of refit in that other branch before adding those optimizations.

@clairernovotny
Copy link
Member

How's this PR doing?

@Sergio0694
Copy link
Contributor Author

Hey @clairernovotny, so the profiler project is basically ready, but as mentioned above I can't get the BenchmarkDotNet run to work correctly. That is, manually running the benchmark in both Debug/Release mode from VS works just fine, but when running the profiler with dotnet Refit.Profiler.dll (which triggers the BenchmarkDotNet build/run), all runs fail with this error:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Refit.ApiException: Response status code does not indicate success: 404 (No matching mock handler for "GET http://github.com/users/refit.json").
   at Refit.RequestBuilderImplementation.<>c__DisplayClass14_0`2.<<BuildCancellableTaskFuncForMethod>b__0>d.MoveNext() in C:\Users\Sergio\Documents\GitHub\refit_fork\Refit\RequestBuilderImplementation.cs:line 263
--- End of stack trace from previous location where exception was thrown ---
   at BenchmarkDotNet.Autogenerated.Runnable_0.<.ctor>b__3_3() in C:\Users\Sergio\Documents\GitHub\refit_fork\Refit.Profiler\bin\Release\netcoreapp2.1\307006d4-87b1-42df-bfcb-df67874f1ad2\307006d4-87b1-42df-bfcb-df67874f1ad2.notcs:line 185
   at BenchmarkDotNet.Autogenerated.Runnable_0.WorkloadActionNoUnroll(Int64 invokeCount) in C:\Users\Sergio\Documents\GitHub\refit_fork\Refit.Profiler\bin\Release\netcoreapp2.1\307006d4-87b1-42df-bfcb-df67874f1ad2\307006d4-87b1-42df-bfcb-df67874f1ad2.notcs:line 487
   at BenchmarkDotNet.Engines.Engine.RunIteration(IterationData data)
   at BenchmarkDotNet.Engines.EngineStage.RunIteration(IterationMode mode, IterationStage stage, Int32 index, Int64 invokeCount, Int32 unrollFactor)
   at BenchmarkDotNet.Engines.EnginePilotStage.RunAuto()
   at BenchmarkDotNet.Engines.Engine.Run()
   at BenchmarkDotNet.Autogenerated.Runnable_0.Run(IHost host, String benchmarkName) in C:\Users\Sergio\Documents\GitHub\refit_fork\Refit.Profiler\bin\Release\netcoreapp2.1\307006d4-87b1-42df-bfcb-df67874f1ad2\307006d4-87b1-42df-bfcb-df67874f1ad2.notcs:line 168
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at BenchmarkDotNet.Autogenerated.UniqueProgramName.AfterAssemblyLoadingAttached(String[] args) in C:\Users\Sergio\Documents\GitHub\refit_fork\Refit.Profiler\bin\Release\netcoreapp2.1\307006d4-87b1-42df-bfcb-df67874f1ad2\307006d4-87b1-42df-bfcb-df67874f1ad2.notcs:line 50

Any help here? 😅

@clairernovotny
Copy link
Member

A lot has changed in Refit since 2020, including its use of Source Generators. A profiling project would still be most welcome if anyone cares to finish this! :)

@github-actions
Copy link

This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 27, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants