JS: cache metadata, grouped by package FQN
This commit is contained in:
+9
@@ -134,6 +134,10 @@ open class CompilerCallbackServicesFacadeServer(
|
||||
incrementalResultsConsumer!!.processInlineFunctions(functions)
|
||||
}
|
||||
|
||||
override fun incrementalResultsConsumer_processPackageMetadata(packageName: String, metadata: ByteArray) {
|
||||
incrementalResultsConsumer!!.processPackageMetadata(packageName, metadata)
|
||||
}
|
||||
|
||||
override fun incrementalDataProvider_getHeaderMetadata(): ByteArray = incrementalDataProvider!!.headerMetadata
|
||||
|
||||
override fun incrementalDataProvider_getMetadataVersion(): IntArray = incrementalDataProvider!!.metadataVersion
|
||||
@@ -142,4 +146,9 @@ open class CompilerCallbackServicesFacadeServer(
|
||||
incrementalDataProvider!!.compiledPackageParts.entries.map {
|
||||
CompiledPackagePart(it.key.path, it.value.metadata, it.value.binaryAst, it.value.inlineData)
|
||||
}
|
||||
|
||||
override fun incrementalDataProvider_getPackageMetadata(): Collection<PackageMetadata> =
|
||||
incrementalDataProvider!!.packageMetadata.entries.map { (fqName, metadata) ->
|
||||
PackageMetadata(fqName, metadata)
|
||||
}
|
||||
}
|
||||
|
||||
+17
@@ -112,6 +112,9 @@ interface CompilerCallbackServicesFacade : Remote {
|
||||
@Throws(RemoteException::class)
|
||||
fun incrementalResultsConsumer_processInlineFunctions(functions: Collection<JsInlineFunctionHash>)
|
||||
|
||||
@Throws(RemoteException::class)
|
||||
fun incrementalResultsConsumer_processPackageMetadata(packageName: String, metadata: ByteArray)
|
||||
|
||||
// ---------------------------------------------------
|
||||
// IncrementalDataProvider (js)
|
||||
@Throws(RemoteException::class)
|
||||
@@ -122,6 +125,9 @@ interface CompilerCallbackServicesFacade : Remote {
|
||||
|
||||
@Throws(RemoteException::class)
|
||||
fun incrementalDataProvider_getMetadataVersion(): IntArray
|
||||
|
||||
@Throws(RemoteException::class)
|
||||
fun incrementalDataProvider_getPackageMetadata(): Collection<PackageMetadata>
|
||||
}
|
||||
|
||||
class CompiledPackagePart(
|
||||
@@ -129,6 +135,17 @@ class CompiledPackagePart(
|
||||
val metadata: ByteArray, val binaryAst: ByteArray, val inlineData: ByteArray
|
||||
) : Serializable
|
||||
|
||||
class PackageMetadata(
|
||||
val packageName: String,
|
||||
val metadata: ByteArray
|
||||
) : Serializable {
|
||||
companion object {
|
||||
// just a random number, but should never be changed to avoid deserialization problems
|
||||
private val serialVersionUID: Long = 54021986502349756L
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class RmiFriendlyCompilationCanceledException : Exception(), Serializable {
|
||||
companion object {
|
||||
// just a random number, but should never be changed to avoid deserialization problems
|
||||
|
||||
@@ -33,4 +33,14 @@ class RemoteIncrementalDataProvider(val facade: CompilerCallbackServicesFacade,
|
||||
get() = rpcProfiler.withMeasure(this) {
|
||||
facade.incrementalDataProvider_getMetadataVersion()
|
||||
}
|
||||
|
||||
override val packageMetadata: Map<String, ByteArray>
|
||||
get() = rpcProfiler.withMeasure(this) {
|
||||
val result = mutableMapOf<String, ByteArray>()
|
||||
facade.incrementalDataProvider_getPackageMetadata().forEach {
|
||||
val prev = result.put(it.packageName, it.metadata)
|
||||
check(prev == null) { "packageMetadata: duplicated entry for package `${it.packageName}`" }
|
||||
}
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import java.io.File
|
||||
|
||||
class RemoteIncrementalResultsConsumer(val facade: CompilerCallbackServicesFacade, eventManager: EventManager, val rpcProfiler: Profiler) :
|
||||
IncrementalResultsConsumer {
|
||||
|
||||
init {
|
||||
eventManager.
|
||||
onCompilationFinished(this::flush)
|
||||
@@ -42,6 +43,12 @@ class RemoteIncrementalResultsConsumer(val facade: CompilerCallbackServicesFacad
|
||||
|
||||
override fun processInlineFunctions(functions: Collection<JsInlineFunctionHash>) = error("Should not be called in Daemon Server")
|
||||
|
||||
override fun processPackageMetadata(packageName: String, metadata: ByteArray) {
|
||||
rpcProfiler.withMeasure(this) {
|
||||
facade.incrementalResultsConsumer_processPackageMetadata(packageName, metadata)
|
||||
}
|
||||
}
|
||||
|
||||
fun flush() {
|
||||
rpcProfiler.withMeasure(this) {
|
||||
facade.incrementalResultsConsumer_processInlineFunctions(deferInlineFuncs.map {
|
||||
|
||||
Reference in New Issue
Block a user