From e8327bc4f8ade222bc1758773cbee6d9acfd05c6 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Tue, 28 Mar 2017 02:35:10 +0300 Subject: [PATCH] Gzipping serialized metadata saves some library load time. --- .../konan/serialization/KonanSerializationUtil.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt index 94111f71af6..e830ce171b5 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt @@ -30,6 +30,10 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.SimpleType +import java.util.zip.GZIPInputStream +import java.util.zip.GZIPOutputStream +import java.io.ByteArrayInputStream +import java.io.ByteArrayOutputStream /* ------------ Deserializer part ------------------------------------------*/ @@ -81,7 +85,8 @@ internal fun deserializeModule(configuration: CompilerConfiguration, builtIns.builtInsModule = moduleDescriptor val deserializationConfiguration = CompilerDeserializationConfiguration(configuration) - val libraryAsByteArray = base64Decode(base64) + val gzipped = base64Decode(base64) + val libraryAsByteArray = GZIPInputStream(ByteArrayInputStream(gzipped)) val libraryProto = KonanLinkData.Library.parseFrom( libraryAsByteArray, KonanSerializerProtocol.extensionRegistry) @@ -205,7 +210,12 @@ internal class KonanSerializationUtil(val context: Context) { } val libraryAsByteArray = library.build().toByteArray() - val base64 = base64Encode(libraryAsByteArray) + + val gzipped = ByteArrayOutputStream() + val gzipStream = GZIPOutputStream(gzipped) + gzipStream.write(libraryAsByteArray) + gzipStream.close() + val base64 = base64Encode(gzipped.toByteArray()) return base64 }