From 510bad19b6a71aec63b351e24b08cf6596c871b3 Mon Sep 17 00:00:00 2001 From: Ayush Ranjan Date: Mon, 8 Nov 2021 00:38:28 -0800 Subject: Use faster marshalling method for non primitive struct fields. In autogenerating the implementation of Marshallable.MarshalBytes(), we were using the slower MarshalBytes(). Instead use MarshalUnsafe which is faster and falls back to slow MarshalBytes() if the type is not packed. Even if the outer struct is not packed, we can at least do fast marshalling on its packed fields. PiperOrigin-RevId: 408268469 --- tools/go_marshal/gomarshal/generator_interfaces.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/go_marshal/gomarshal/generator_interfaces.go b/tools/go_marshal/gomarshal/generator_interfaces.go index db135fd74..2050c1cee 100644 --- a/tools/go_marshal/gomarshal/generator_interfaces.go +++ b/tools/go_marshal/gomarshal/generator_interfaces.go @@ -132,7 +132,7 @@ func (g *interfaceGenerator) marshalScalar(accessor, typ, bufVar string) { g.emit("hostarch.ByteOrder.PutUint64(%s[:8], uint64(%s))\n", bufVar, accessor) g.shift(bufVar, 8) default: - g.emit("%s = %s.MarshalBytes(%s)\n", bufVar, accessor, bufVar) + g.emit("%s = %s.MarshalUnsafe(%s)\n", bufVar, accessor, bufVar) } } @@ -158,7 +158,7 @@ func (g *interfaceGenerator) unmarshalScalar(accessor, typ, bufVar string) { g.emit("%s = %s(hostarch.ByteOrder.Uint64(%s[:8]))\n", accessor, typ, bufVar) g.shift(bufVar, 8) default: - g.emit("%s = %s.UnmarshalBytes(%s)\n", bufVar, accessor, bufVar) + g.emit("%s = %s.UnmarshalUnsafe(%s)\n", bufVar, accessor, bufVar) g.recordPotentiallyNonPackedField(accessor) } } -- cgit v1.2.3