[JS IR IC] Do not save metadata to tmp file
Optimization: keep serialized metadata in memory
This commit is contained in:
committed by
Space Team
parent
08a5e36ee7
commit
033ad33322
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.protobuf.CodedOutputStream
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
import java.io.OutputStream
|
||||
|
||||
internal inline fun <T> File.ifExists(f: File.() -> T): T? = if (exists()) f() else null
|
||||
|
||||
@@ -28,14 +29,15 @@ internal inline fun <T> File.useCodedInputIfExists(f: CodedInputStream.() -> T)
|
||||
}
|
||||
}
|
||||
|
||||
internal inline fun OutputStream.useCodedOutput(f: CodedOutputStream.() -> Unit) = use {
|
||||
val out = CodedOutputStream.newInstance(it)
|
||||
out.f()
|
||||
out.flush()
|
||||
}
|
||||
|
||||
internal inline fun File.useCodedOutput(f: CodedOutputStream.() -> Unit) {
|
||||
parentFile?.mkdirs()
|
||||
recreate()
|
||||
FileOutputStream(this).use {
|
||||
val out = CodedOutputStream.newInstance(it)
|
||||
out.f()
|
||||
out.flush()
|
||||
}
|
||||
FileOutputStream(this).useCodedOutput(f)
|
||||
}
|
||||
|
||||
internal fun icError(what: String, libFile: KotlinLibraryFile? = null, srcFile: KotlinSourceFile? = null): Nothing {
|
||||
|
||||
+9
-7
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.serialization.IdSignatureDeserializer
|
||||
import org.jetbrains.kotlin.ir.util.IdSignature
|
||||
import org.jetbrains.kotlin.protobuf.CodedInputStream
|
||||
import org.jetbrains.kotlin.protobuf.CodedOutputStream
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.File
|
||||
|
||||
internal class IncrementalCache(private val library: KotlinLibraryHeader, val cacheDir: File) {
|
||||
@@ -17,7 +18,6 @@ internal class IncrementalCache(private val library: KotlinLibraryHeader, val ca
|
||||
|
||||
private const val BINARY_AST_SUFFIX = "ast.bin"
|
||||
private const val METADATA_SUFFIX = "metadata.bin"
|
||||
private const val METADATA_TMP_SUFFIX = "metadata.tmp.bin"
|
||||
}
|
||||
|
||||
private val cacheHeaderFile = File(cacheDir, CACHE_HEADER)
|
||||
@@ -240,11 +240,13 @@ internal class IncrementalCache(private val library: KotlinLibraryHeader, val ca
|
||||
}
|
||||
}
|
||||
|
||||
val tmpCacheFile = srcFile.getCacheFile(METADATA_TMP_SUFFIX)
|
||||
tmpCacheFile.useCodedOutput {
|
||||
writeDirectDependencies(sourceFileMetadata.directDependencies)
|
||||
writeInverseDependencies(sourceFileMetadata.inverseDependencies)
|
||||
}
|
||||
return SourceFileCacheArtifact.CommitMetadata(srcFile, binaryAstFile, headerCacheFile, tmpCacheFile)
|
||||
val encodedMetadata = ByteArrayOutputStream(4096).apply {
|
||||
useCodedOutput {
|
||||
writeDirectDependencies(sourceFileMetadata.directDependencies)
|
||||
writeInverseDependencies(sourceFileMetadata.inverseDependencies)
|
||||
}
|
||||
}.toByteArray()
|
||||
|
||||
return SourceFileCacheArtifact.CommitMetadata(srcFile, binaryAstFile, headerCacheFile, encodedMetadata)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-7
@@ -29,15 +29,11 @@ internal sealed class SourceFileCacheArtifact(val srcFile: KotlinSourceFile, val
|
||||
srcFile: KotlinSourceFile,
|
||||
binaryAstFile: File,
|
||||
private val metadataFile: File,
|
||||
private val tmpMetadataFile: File
|
||||
private val encodedMetadata: ByteArray
|
||||
) : SourceFileCacheArtifact(srcFile, binaryAstFile) {
|
||||
override fun commitMetadata() {
|
||||
metadataFile.delete()
|
||||
if (!tmpMetadataFile.renameTo(metadataFile)) {
|
||||
tmpMetadataFile.copyTo(metadataFile, true)
|
||||
tmpMetadataFile.delete()
|
||||
}
|
||||
|
||||
metadataFile.recreate()
|
||||
metadataFile.writeBytes(encodedMetadata)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user