diff --git a/crates/bindings-cpp/include/spacetimedb/procedure_macros.h b/crates/bindings-cpp/include/spacetimedb/procedure_macros.h index 5c6728a9f5f..4ec02222f90 100644 --- a/crates/bindings-cpp/include/spacetimedb/procedure_macros.h +++ b/crates/bindings-cpp/include/spacetimedb/procedure_macros.h @@ -105,7 +105,8 @@ struct is_valid_procedure_return_type : std::integral_constant::value, \ @@ -120,4 +121,4 @@ struct is_valid_procedure_return_type : std::integral_constant> \ /* TODO: When parameters are supported, function definition becomes: */ \ /* return_type view_name(ctx_param, __VA_ARGS__) */ \ - return_type view_name(ctx_param) + /* noinline ensures this function appears as a named frame in backtraces */ \ + __attribute__((noinline)) return_type view_name(ctx_param) #define SPACETIMEDB_VIEW_NAMED(return_type, view_name, canonical_name, access_enum, ctx_param) \ static_assert(access_enum == SpacetimeDB::Internal::TableAccess::Public, \ @@ -130,4 +131,4 @@ struct is_valid_view_return_type> #view_name, view_name, is_public, param_names); \ SpacetimeDB::Module::RegisterExplicitFunctionName(#view_name, canonical_name); \ } \ - return_type view_name(ctx_param) + __attribute__((noinline)) return_type view_name(ctx_param) diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs index 3ce055b4bc7..64dc1675dc1 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs @@ -2050,6 +2050,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar >().GetAlgebraicType(registrar) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -2100,6 +2103,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -2144,6 +2150,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -2186,6 +2195,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -2228,6 +2240,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -2268,6 +2283,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ReturnType: new Player.BSATN().GetAlgebraicType(registrar) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -2309,6 +2327,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -2354,6 +2375,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -2399,6 +2423,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IAnonymousViewContext ctx @@ -2444,6 +2471,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IAnonymousViewContext ctx @@ -2489,6 +2519,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IAnonymousViewContext ctx @@ -2536,6 +2569,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar >().GetAlgebraicType(registrar) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IAnonymousViewContext ctx @@ -2981,6 +3017,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.__ReducerWithReservedPrefix((SpacetimeDB.ReducerContext)ctx); @@ -3004,6 +3043,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { TestScheduleIssues.DummyScheduledReducer( @@ -3028,6 +3070,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.OnReducerWithReservedPrefix((SpacetimeDB.ReducerContext)ctx); @@ -3049,6 +3094,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => SpacetimeDB.Internal.Lifecycle.Init; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.TestDuplicateReducerKind1((SpacetimeDB.ReducerContext)ctx); @@ -3070,6 +3118,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => SpacetimeDB.Internal.Lifecycle.Init; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.TestDuplicateReducerKind2((SpacetimeDB.ReducerContext)ctx); @@ -3091,6 +3142,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.TestDuplicateReducerName((SpacetimeDB.ReducerContext)ctx); @@ -3112,6 +3166,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.TestReducerReturnType((SpacetimeDB.ReducerContext)ctx); @@ -3133,6 +3190,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { throw new System.InvalidOperationException(); diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/explicitnames/snapshots/Module#FFI.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/explicitnames/snapshots/Module#FFI.verified.cs index a9774bfc69e..936f934fd53 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/explicitnames/snapshots/Module#FFI.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/explicitnames/snapshots/Module#FFI.verified.cs @@ -367,6 +367,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -477,6 +480,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.DemoReducer((SpacetimeDB.ReducerContext)ctx, valueRW.Read(reader)); @@ -495,6 +501,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar Visibility: SpacetimeDB.Internal.FunctionVisibility.ClientCallable ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke(BinaryReader reader, SpacetimeDB.Internal.IProcedureContext ctx) { Reducers.DemoProcedure((SpacetimeDB.ProcedureContext)ctx); diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs index 4632875e05f..dc77525a2ac 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/server/snapshots/Module#FFI.verified.cs @@ -1722,6 +1722,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar ) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -1764,6 +1767,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar >().GetAlgebraicType(registrar) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IViewContext ctx @@ -1811,6 +1817,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar >().GetAlgebraicType(registrar) ); + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public byte[] Invoke( System.IO.BinaryReader reader, global::SpacetimeDB.Internal.IAnonymousViewContext ctx @@ -2286,6 +2295,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => SpacetimeDB.Internal.Lifecycle.Init; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Timers.Init((SpacetimeDB.ReducerContext)ctx); @@ -2309,6 +2321,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.InsertData((SpacetimeDB.ReducerContext)ctx, dataRW.Read(reader)); @@ -2332,6 +2347,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Test.NestingNamespaces.AndClasses.InsertData2( @@ -2358,6 +2376,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { MultiTableRow.InsertMultiData((SpacetimeDB.ReducerContext)ctx, dataRW.Read(reader)); @@ -2381,6 +2402,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Reducers.ScheduleImmediate((SpacetimeDB.ReducerContext)ctx, dataRW.Read(reader)); @@ -2404,6 +2428,9 @@ SpacetimeDB.BSATN.ITypeRegistrar registrar public SpacetimeDB.Internal.Lifecycle? Lifecycle => null; + [System.Runtime.CompilerServices.MethodImpl( + System.Runtime.CompilerServices.MethodImplOptions.NoInlining + )] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { Timers.SendScheduledMessage((SpacetimeDB.ReducerContext)ctx, argRW.Read(reader)); diff --git a/crates/bindings-csharp/Codegen/Module.cs b/crates/bindings-csharp/Codegen/Module.cs index e778b6d69cc..fb7b1b77975 100644 --- a/crates/bindings-csharp/Codegen/Module.cs +++ b/crates/bindings-csharp/Codegen/Module.cs @@ -1386,6 +1386,7 @@ sealed class {{{Name}}}ViewDispatcher : {{{interfaceName}}} { public SpacetimeDB.Internal.RawViewDefV10 {{{makeViewDefMethod}}}(SpacetimeDB.BSATN.ITypeRegistrar registrar) => {{{GenerateViewDef(index)}}} + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] public byte[] Invoke( System.IO.BinaryReader reader, {{{interfaceContext}}} ctx @@ -1491,6 +1492,7 @@ class {{Identifier}}: SpacetimeDB.Internal.IReducer { _ => "null" }}}; + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] public void Invoke(BinaryReader reader, SpacetimeDB.Internal.IReducerContext ctx) { {{invocation}}; } @@ -1713,6 +1715,7 @@ class {{{Identifier}}} : SpacetimeDB.Internal.IProcedure { Visibility: SpacetimeDB.Internal.FunctionVisibility.ClientCallable ); + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] public byte[] Invoke(BinaryReader reader, SpacetimeDB.Internal.IProcedureContext ctx) { {{{paramReads}}}{{{invokeBody}}} } diff --git a/crates/bindings-csharp/Runtime/Internal/Module.cs b/crates/bindings-csharp/Runtime/Internal/Module.cs index 8dcf6cebb4e..145179829c1 100644 --- a/crates/bindings-csharp/Runtime/Internal/Module.cs +++ b/crates/bindings-csharp/Runtime/Internal/Module.cs @@ -469,6 +469,7 @@ BytesSink error } catch (Exception e) { + Log.Error($"Error while invoking reducer: {e}"); var error_str = e.Message ?? e.GetType().FullName; var error_bytes = System.Text.Encoding.UTF8.GetBytes(error_str); error.Write(error_bytes);