diff options
author | Ayush Ranjan <ayushranjan@google.com> | 2021-11-08 00:38:28 -0800 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-11-08 00:46:16 -0800 |
commit | 510bad19b6a71aec63b351e24b08cf6596c871b3 (patch) | |
tree | 003a98cfbb819902337c4074c7ea3333f21dc84a | |
parent | 4622e17bccc7c40a2698e8314d29bbde87090cec (diff) |
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
-rw-r--r-- | tools/go_marshal/gomarshal/generator_interfaces.go | 4 |
1 files 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) } } |