relax for inlined bytes to avoid allocation

pull/13315/head
yang-g 7 years ago
parent c88185900d
commit b90f0e66e5
  1. 11
      include/grpc++/impl/codegen/proto_utils.h

@ -188,9 +188,14 @@ Status GenericSerialize(const grpc::protobuf::Message& msg,
"BufferWriter must be a subclass of io::ZeroCopyOutputStream");
*own_buffer = true;
int byte_size = msg.ByteSize();
if (byte_size == 0) {
grpc_slice empty_slice = g_core_codegen_interface->grpc_empty_slice();
*bp = g_core_codegen_interface->grpc_raw_byte_buffer_create(&empty_slice, 1);
if ((size_t)byte_size <= GRPC_SLICE_INLINED_SIZE) {
grpc_slice slice = g_core_codegen_interface->grpc_slice_malloc(byte_size);
GPR_CODEGEN_ASSERT(
GRPC_SLICE_END_PTR(slice) ==
msg.SerializeWithCachedSizesToArray(GRPC_SLICE_START_PTR(slice)));
*bp = g_core_codegen_interface->grpc_raw_byte_buffer_create(&slice, 1);
g_core_codegen_interface->grpc_slice_unref(slice);
return g_core_codegen_interface->ok();
}
BufferWriter writer(bp, kGrpcBufferWriterMaxBufferLength, byte_size);

Loading…
Cancel
Save