summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAyush Ranjan <ayushranjan@google.com>2021-11-08 00:38:28 -0800
committergVisor bot <gvisor-bot@google.com>2021-11-08 00:46:16 -0800
commit510bad19b6a71aec63b351e24b08cf6596c871b3 (patch)
tree003a98cfbb819902337c4074c7ea3333f21dc84a
parent4622e17bccc7c40a2698e8314d29bbde87090cec (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.go4
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)
}
}