Byte array allocation/copy hunt (#30266)
* Loads of byte array copy/allocations squashed * Use a central place for the proto unsafe instead of ad hoc * Extra docs on serializer toBinary about not mutating bytes after returned * Found some more toArray:s that can potentially benefit from being unsafe * Array handed to user callback so extra docs needed * Unsafe reading of underlying bytes of strings fixed
This commit is contained in:
parent
b5cbf383d6
commit
e43f2be6cd
31 changed files with 145 additions and 98 deletions
|
|
@ -7,10 +7,13 @@ package akka.stream.serialization
|
|||
import akka.actor.ExtendedActorSystem
|
||||
import akka.annotation.InternalApi
|
||||
import akka.protobufv3.internal.ByteString
|
||||
import akka.protobufv3.internal.UnsafeByteOperations
|
||||
import akka.serialization._
|
||||
import akka.stream.StreamRefMessages
|
||||
import akka.stream.impl.streamref._
|
||||
|
||||
import java.nio.charset.StandardCharsets
|
||||
|
||||
/** INTERNAL API */
|
||||
@InternalApi
|
||||
private[akka] final class StreamRefSerializer(val system: ExtendedActorSystem)
|
||||
|
|
@ -86,7 +89,10 @@ private[akka] final class StreamRefSerializer(val system: ExtendedActorSystem)
|
|||
|
||||
private def serializeRemoteSinkFailure(
|
||||
d: StreamRefsProtocol.RemoteStreamFailure): StreamRefMessages.RemoteStreamFailure = {
|
||||
StreamRefMessages.RemoteStreamFailure.newBuilder().setCause(ByteString.copyFrom(d.msg.getBytes)).build()
|
||||
StreamRefMessages.RemoteStreamFailure
|
||||
.newBuilder()
|
||||
.setCause(UnsafeByteOperations.unsafeWrap(d.msg.getBytes(StandardCharsets.UTF_8)))
|
||||
.build()
|
||||
}
|
||||
|
||||
private def serializeRemoteSinkCompleted(
|
||||
|
|
@ -108,7 +114,7 @@ private[akka] final class StreamRefSerializer(val system: ExtendedActorSystem)
|
|||
|
||||
val payloadBuilder = StreamRefMessages.Payload
|
||||
.newBuilder()
|
||||
.setEnclosedMessage(ByteString.copyFrom(msgSerializer.toBinary(p)))
|
||||
.setEnclosedMessage(UnsafeByteOperations.unsafeWrap(msgSerializer.toBinary(p)))
|
||||
.setSerializerId(msgSerializer.identifier)
|
||||
|
||||
val ms = Serializers.manifestFor(msgSerializer, p)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue