IJ-MR-182960-to-253

[pycharm] PY-85729 Post-cherry-pick fixes

[pycharm] PY-85729 Fix stress test on Windows

[pycharm] PY-85729 Fix smoke tests

[pycharm] PY-85729 Add visibility attribute to plugin config

[pycharm] PY-85729 Add a coroutine cleanup test

[pycharm] PY-85729 Add a stress env test

[pycharm] PY-85729 Minor cosmetic fixes

[pycharm] PY-85729 Performance improvement: add debounce to reduce the amount of GC garbage

[pycharm] PY-85729 Fix potential OOM: adjust limits

[pycharm] PY-85729 Fix potential OOM: add cancellation logic for background process observer

The background error process observation logic didn't cancel the coroutines, making them last for way longer than needed. Cancellation logic was added to remedy this.

[pycharm] PY-85729 Fix OOM: Force LazyTree recomposition on tree change

It looks like LazyTree composable hogs memory by keeping track of all the previous trees; this is bad for our use case as any snapshot change to the tree will be saved, causing potential OOM by not freeing the processes. This is fixed by forcing a recomposition on each tree change (via key(tree)).


Merge-request: IJ-MR-183264
Merged-by: David Lysenko <david.lysenko@jetbrains.com>

GitOrigin-RevId: 6a3f71219da1b8577b26d35ce73846685314eb3d
This commit is contained in:
David Lysenko
2025-11-22 11:20:30 +00:00
committed by intellij-monorepo-bot
parent cd499f175b
commit 7ae15dd8d4
11 changed files with 299 additions and 58 deletions

View File

@@ -7,7 +7,6 @@ import com.intellij.openapi.components.Service
import com.intellij.openapi.components.service
import com.intellij.util.io.awaitExit
import com.intellij.util.io.readLineAsync
import com.intellij.util.io.toByteArray
import com.jetbrains.python.TraceContext
import com.jetbrains.python.errorProcessing.Exe
import kotlinx.coroutines.CoroutineScope
@@ -21,22 +20,21 @@ import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.Nls
import java.io.BufferedReader
import java.io.ByteArrayInputStream
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader
import java.io.OutputStream
import java.nio.ByteBuffer
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicInteger
import kotlin.time.Clock
import kotlin.time.Instant
internal object LoggingLimits {
@ApiStatus.Internal
object LoggingLimits {
/**
* The maximum buffer size of a LoggingProcess
*/
const val MAX_OUTPUT_SIZE = 10_000_000
const val MAX_OUTPUT_SIZE = 100_000
const val MAX_LINES = 1024
}