[artifacts metrics] AT-598 Taking into account all the returns in measured code

GitOrigin-RevId: f2a9833a22cc6c4d6148a232a97fefd830022051
This commit is contained in:
Nikita Kudrin
2023-11-28 10:35:54 +00:00
committed by intellij-monorepo-bot
parent 2c9e6d6595
commit 57e33ebc7f
4 changed files with 28 additions and 82 deletions
@@ -22,7 +22,7 @@ import com.intellij.platform.backend.workspace.useNewWorkspaceModelApi
import com.intellij.platform.backend.workspace.workspaceModel
import com.intellij.platform.diagnostic.telemetry.Compiler
import com.intellij.platform.diagnostic.telemetry.TelemetryManager
import com.intellij.platform.diagnostic.telemetry.helpers.addElapsedTimeMs
import com.intellij.platform.diagnostic.telemetry.helpers.addMeasuredTimeMs
import com.intellij.platform.workspace.storage.*
import com.intellij.platform.workspace.storage.query.entities
import com.intellij.platform.workspace.storage.query.flatMap
@@ -47,9 +47,7 @@ internal class ArtifactVirtualFileListener(private val project: Project) : BulkF
}
}
private fun filePathChanged(oldPath: String, newPath: String) {
val start = System.currentTimeMillis()
private fun filePathChanged(oldPath: String, newPath: String) = filePathChangedMs.addMeasuredTimeMs {
val artifactEntities = if (useNewWorkspaceModelApi()) {
val refs = parentPathToArtifactReferences[oldPath]?.asSequence() ?: return
val storage = project.workspaceModel.entityStorage.current
@@ -79,8 +77,6 @@ internal class ArtifactVirtualFileListener(private val project: Project) : BulkF
}, artifactManager.resolvingContext, false)
}
model.commit()
filePathChangedMs.addElapsedTimeMs(start)
}
private val parentPathToArtifactReferences: Map<String, List<EntityReference<ArtifactEntity>>>
@@ -92,9 +88,7 @@ internal class ArtifactVirtualFileListener(private val project: Project) : BulkF
private val parentPathToArtifacts: Map<String, List<ArtifactEntity>>
get() = getInstance(project).entityStorage.cachedValue(parentPathsToArtifacts)
private fun propertyChanged(event: VFilePropertyChangeEvent) {
val start = System.currentTimeMillis()
private fun propertyChanged(event: VFilePropertyChangeEvent) = propertyChangedMs.addMeasuredTimeMs {
if (VirtualFile.PROP_NAME == event.propertyName) {
val parent = event.file.parent
if (parent != null) {
@@ -102,8 +96,6 @@ internal class ArtifactVirtualFileListener(private val project: Project) : BulkF
filePathChanged(parentPath + "/" + event.oldValue, parentPath + "/" + event.newValue)
}
}
propertyChangedMs.addElapsedTimeMs(start)
}
companion object {
@@ -19,7 +19,7 @@ import com.intellij.platform.backend.workspace.WorkspaceModelTopics
import com.intellij.platform.backend.workspace.virtualFile
import com.intellij.platform.diagnostic.telemetry.Compiler
import com.intellij.platform.diagnostic.telemetry.TelemetryManager
import com.intellij.platform.diagnostic.telemetry.helpers.addElapsedTimeMs
import com.intellij.platform.diagnostic.telemetry.helpers.addMeasuredTimeMs
import com.intellij.platform.workspace.jps.JpsImportedEntitySource
import com.intellij.platform.workspace.storage.*
import com.intellij.platform.workspace.storage.impl.VersionedEntityStorageOnBuilder
@@ -42,8 +42,7 @@ open class ArtifactBridge(
init {
project.messageBus.connect().subscribe(WorkspaceModelTopics.CHANGED, object : WorkspaceModelChangeListener {
override fun beforeChanged(event: VersionedStorageChange) {
val start = System.currentTimeMillis()
override fun beforeChanged(event: VersionedStorageChange) = beforeChangedMs.addMeasuredTimeMs {
event.getChanges(ArtifactEntity::class.java).filterIsInstance<EntityChange.Removed<ArtifactEntity>>().forEach {
if (it.entity.symbolicId != artifactId) return@forEach
@@ -61,8 +60,6 @@ open class ArtifactBridge(
entityStorage = VersionedEntityStorageOnBuilder(event.storageBefore.toBuilder())
assert(artifactId in entityStorage.base) { "Cannot resolve artifact $artifactId." }
}
beforeChangedMs.addElapsedTimeMs(start)
}
})
}
@@ -27,6 +27,7 @@ import com.intellij.platform.backend.workspace.workspaceModel
import com.intellij.platform.diagnostic.telemetry.Compiler
import com.intellij.platform.diagnostic.telemetry.TelemetryManager
import com.intellij.platform.diagnostic.telemetry.helpers.addElapsedTimeMs
import com.intellij.platform.diagnostic.telemetry.helpers.addMeasuredTimeMs
import com.intellij.platform.workspace.storage.*
import com.intellij.util.concurrency.annotations.RequiresReadLock
import com.intellij.util.concurrency.annotations.RequiresWriteLock
@@ -49,36 +50,28 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
}
@RequiresReadLock
override fun getArtifacts(): Array<ArtifactBridge> {
val start = System.currentTimeMillis()
override fun getArtifacts(): Array<ArtifactBridge> = getArtifactsMs.addMeasuredTimeMs {
initBridges()
val store = project.workspaceModel.currentSnapshot
val artifacts: Array<ArtifactBridge> = store
return@addMeasuredTimeMs store
.entities(ArtifactEntity::class.java)
.map { store.artifactsMap.getDataByEntity(it) ?: error("All artifact bridges should be already created at this moment") }
.filter { VALID_ARTIFACT_CONDITION.value(it) }
.toList().toTypedArray()
getArtifactsMs.addElapsedTimeMs(start)
return artifacts
}
@RequiresReadLock
override fun findArtifact(name: String): Artifact? {
val start = System.currentTimeMillis()
override fun findArtifact(name: String): Artifact? = findArtifactMs.addMeasuredTimeMs {
initBridges()
val store = project.workspaceModel.currentSnapshot
val artifactEntity = store.resolve(ArtifactId(name)) ?: return null
val artifactBridge: ArtifactBridge = store.artifactsMap.getDataByEntity(artifactEntity)
?: error("All artifact bridges should be already created at this moment")
findArtifactMs.addElapsedTimeMs(start)
return artifactBridge
return@addMeasuredTimeMs store.artifactsMap.getDataByEntity(artifactEntity)
?: error("All artifact bridges should be already created at this moment")
}
override fun getArtifactByOriginal(artifact: Artifact): Artifact = artifact
@@ -86,9 +79,7 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
override fun getOriginalArtifact(artifact: Artifact): Artifact = artifact
@RequiresReadLock
override fun getArtifactsByType(type: ArtifactType): List<ArtifactBridge> {
val start = System.currentTimeMillis()
override fun getArtifactsByType(type: ArtifactType): List<ArtifactBridge> = getArtifactsByTypeMs.addMeasuredTimeMs {
// XXX @RequiresReadLock annotation doesn't work for kt now
ApplicationManager.getApplication().assertReadAccessAllowed()
initBridges()
@@ -96,14 +87,11 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
val store = project.workspaceModel.currentSnapshot
val typeId = type.id
val artifacts: List<ArtifactBridge> = store
return@addMeasuredTimeMs store
.entities(ArtifactEntity::class.java)
.filter { it.artifactType == typeId }
.map { store.artifactsMap.getDataByEntity(it) ?: error("All artifact bridges should be already created at this moment") }
.toList()
getArtifactsByTypeMs.addElapsedTimeMs(start)
return artifacts
}
@RequiresReadLock
@@ -142,9 +130,8 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
override fun getResolvingContext(): PackagingElementResolvingContext = resolvingContext
override fun addArtifact(name: String, type: ArtifactType, root: CompositePackagingElement<*>?): Artifact {
val start = System.currentTimeMillis()
val artifact = WriteAction.compute(ThrowableComputable<ModifiableArtifact, RuntimeException> {
override fun addArtifact(name: String, type: ArtifactType, root: CompositePackagingElement<*>?): Artifact = addArtifactMs.addMeasuredTimeMs {
return@addMeasuredTimeMs WriteAction.compute(ThrowableComputable<ModifiableArtifact, RuntimeException> {
val model = createModifiableModel()
val artifact = model.addArtifact(name, type)
if (root != null) {
@@ -153,9 +140,6 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
model.commit()
artifact
})
addArtifactMs.addElapsedTimeMs(start)
return artifact
}
override fun addElementsToDirectory(artifact: Artifact, relativePath: String, elements: Collection<PackagingElement<*>>) {
@@ -174,9 +158,7 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
}
@RequiresWriteLock
fun commit(artifactModel: ArtifactModifiableModelBridge) {
val start = System.currentTimeMillis()
fun commit(artifactModel: ArtifactModifiableModelBridge) = commitMs.addMeasuredTimeMs {
// XXX @RequiresReadLock annotation doesn't work for kt now
ApplicationManager.getApplication().assertWriteAccessAllowed()
LOG.trace { "Committing artifact manager bridge. diff: ${artifactModel.diff}" }
@@ -271,8 +253,6 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
if (changes.isNotEmpty()) {
BuildManager.getInstance().clearState(project)
}
commitMs.addElapsedTimeMs(start)
}
private fun updateCustomElements(diff: MutableEntityStorage) {
@@ -291,9 +271,7 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
// Initialize all artifact bridges
@RequiresReadLock
private fun initBridges() {
val start = System.currentTimeMillis()
private fun initBridges() = initBridgesMs.addMeasuredTimeMs {
// XXX @RequiresReadLock annotation doesn't work for kt now
ApplicationManager.getApplication().assertReadAccessAllowed()
val workspaceModel = project.workspaceModel
@@ -322,8 +300,6 @@ class ArtifactManagerBridge(private val project: Project) : ArtifactManager(), D
}
}
}
initBridgesMs.addElapsedTimeMs(start)
}
companion object {
@@ -18,7 +18,6 @@ import com.intellij.packaging.impl.artifacts.workspacemodel.ArtifactManagerBridg
import com.intellij.platform.backend.workspace.WorkspaceModel
import com.intellij.platform.diagnostic.telemetry.Compiler
import com.intellij.platform.diagnostic.telemetry.TelemetryManager
import com.intellij.platform.diagnostic.telemetry.helpers.addElapsedTimeMs
import com.intellij.platform.diagnostic.telemetry.helpers.addMeasuredTimeMs
import com.intellij.platform.workspace.storage.EntityChange
import com.intellij.platform.workspace.storage.MutableEntityStorage
@@ -47,9 +46,7 @@ class ArtifactModifiableModelBridge(
private val versionedOnBuilder = VersionedEntityStorageOnBuilder(diff)
override fun getArtifacts(): Array<ArtifactBridge> {
val start = System.currentTimeMillis()
override fun getArtifacts(): Array<ArtifactBridge> = getArtifactsMs.addMeasuredTimeMs {
val newBridges = mutableListOf<ArtifactBridge>()
val artifacts = diff
.entities(ArtifactEntity::class.java)
@@ -62,14 +59,10 @@ class ArtifactModifiableModelBridge(
.filter { VALID_ARTIFACT_CONDITION.value(it) }
.toList().toTypedArray()
addBridgesToDiff(newBridges, diff)
val out = artifacts.mapInPlace { modifiableToOriginal.getKeysByValue(it)?.singleOrNull() ?: it }
getArtifactsMs.addElapsedTimeMs(start)
return out
return@addMeasuredTimeMs artifacts.mapInPlace { modifiableToOriginal.getKeysByValue(it)?.singleOrNull() ?: it }
}
override fun findArtifact(name: String): Artifact? {
val start = System.currentTimeMillis()
override fun findArtifact(name: String): Artifact? = findArtifactMs.addMeasuredTimeMs {
val artifactEntity = diff.resolve(ArtifactId(name)) ?: return null
val newBridges = mutableListOf<ArtifactBridge>()
@@ -80,9 +73,7 @@ class ArtifactModifiableModelBridge(
}
addBridgesToDiff(newBridges, diff)
val artifactBridge: ArtifactBridge = modifiableToOriginal.getKeysByValue(bridge)?.singleOrNull() ?: bridge
findArtifactMs.addElapsedTimeMs(start)
return artifactBridge
return@addMeasuredTimeMs modifiableToOriginal.getKeysByValue(bridge)?.singleOrNull() ?: bridge
}
override fun getArtifactByOriginal(artifact: Artifact): Artifact {
@@ -93,9 +84,7 @@ class ArtifactModifiableModelBridge(
return modifiableToOriginal[artifact as ArtifactBridge] ?: artifact
}
override fun getArtifactsByType(type: ArtifactType): Collection<Artifact> {
val start = System.currentTimeMillis()
override fun getArtifactsByType(type: ArtifactType): Collection<Artifact> = getArtifactsByTypeMs.addMeasuredTimeMs {
val typeId = type.id
val newBridges = mutableListOf<ArtifactBridge>()
@@ -111,7 +100,6 @@ class ArtifactModifiableModelBridge(
.toList()
addBridgesToDiff(newBridges, diff)
getArtifactsByTypeMs.addElapsedTimeMs(start)
return artifacts
}
@@ -133,8 +121,7 @@ class ArtifactModifiableModelBridge(
override fun addArtifact(name: String,
artifactType: ArtifactType,
rootElement: CompositePackagingElement<*>,
externalSource: ProjectModelExternalSource?): ModifiableArtifact {
val start = System.currentTimeMillis()
externalSource: ProjectModelExternalSource?): ModifiableArtifact = addArtifactMs.addMeasuredTimeMs {
val uniqueName = generateUniqueName(name)
val outputPath = ArtifactUtil.getDefaultArtifactOutputPath(uniqueName, project)
@@ -164,7 +151,6 @@ class ArtifactModifiableModelBridge(
eventDispatcher.multicaster.artifactAdded(modifiableArtifact)
addArtifactMs.addElapsedTimeMs(start)
return modifiableArtifact
}
@@ -221,16 +207,13 @@ class ArtifactModifiableModelBridge(
}
@RequiresWriteLock
override fun commit() {
commitMs.addMeasuredTimeMs {
// XXX @RequiresReadLock annotation doesn't work for kt now
ApplicationManager.getApplication().assertWriteAccessAllowed()
manager.commit(this)
}
override fun commit() = commitMs.addMeasuredTimeMs {
// XXX @RequiresReadLock annotation doesn't work for kt now
ApplicationManager.getApplication().assertWriteAccessAllowed()
manager.commit(this)
}
override fun dispose() {
val start = System.currentTimeMillis()
override fun dispose() = disposeMs.addMeasuredTimeMs {
val artifacts: MutableList<Artifact> = ArrayList()
val modifiableToOriginalCopy = BidirectionalMap<ArtifactBridge, ArtifactBridge>()
@@ -281,8 +264,6 @@ class ArtifactModifiableModelBridge(
bridge.elementsWithDiff.forEach { it.setStorage(entityStorage, project, HashSet(), PackagingElementInitializer) }
bridge.elementsWithDiff.clear()
}
disposeMs.addElapsedTimeMs(start)
}
companion object {