|
|
|
@ -50,18 +50,21 @@ namespace Grpc.Microbenchmarks |
|
|
|
|
var call = CreateFakeCall(cq); |
|
|
|
|
|
|
|
|
|
var sendCompletionCallback = new NopSendCompletionCallback(); |
|
|
|
|
var payload = SliceBufferSafeHandle.Create(); |
|
|
|
|
payload.GetSpan(PayloadSize); |
|
|
|
|
payload.Advance(PayloadSize); |
|
|
|
|
var sliceBuffer = SliceBufferSafeHandle.Create(); |
|
|
|
|
var writeFlags = default(WriteFlags); |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < Iterations; i++) |
|
|
|
|
{ |
|
|
|
|
// TODO: sending for the first time actually steals the slices... |
|
|
|
|
call.StartSendMessage(sendCompletionCallback, payload, writeFlags, false); |
|
|
|
|
// SendMessage steals the slices from the slice buffer, so we need to repopulate in each iteration. |
|
|
|
|
sliceBuffer.Reset(); |
|
|
|
|
sliceBuffer.GetSpan(PayloadSize); |
|
|
|
|
sliceBuffer.Advance(PayloadSize); |
|
|
|
|
|
|
|
|
|
call.StartSendMessage(sendCompletionCallback, sliceBuffer, writeFlags, false); |
|
|
|
|
var callback = completionRegistry.Extract(completionRegistry.LastRegisteredKey); |
|
|
|
|
callback.OnComplete(true); |
|
|
|
|
} |
|
|
|
|
sliceBuffer.Dispose(); |
|
|
|
|
cq.Dispose(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|