VS Code Uses 13% CPU When Idle Due to Blinking Cursor Rendering
Проблема: если оставить на экране VS Code с редактором в фокусе c моргающей кареткой и ничего не делать то редактор съедает 13% CPU.
https://www.reddit.com/r/programming/comments/612v99/vs_code_uses_13_cpu_when_idle_due_to_blinking/
https://news.ycombinator.com/item?id=13940014
Assuming 1 million users of VS Code This blinking cursor will waste $3 million per year in electricity costs, and output 32,000 tons of c02 per year.
2150: "Grandpa, why did the ocean's dry up?"
"well sonny, long ago, Microsoft didn't optimize their code for a code editor's cursor and pushed earth's climate over the edge"
Суть:
Это все про Microsoft Visual Code который как известно есть Electron application — Chromium based.
Курсор они моргают этим вот CSS кодом:
@keyframes monaco-cursor-blink {
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.cursor-blink {
animation: monaco-cursor-blink 1s step-start 0s infinite;
}
Там две проблемы:
1. Типа bug в самом chromium / webkit: эта анимация исполняется с частотой animation frame rate — each 16ms — 60 FPS.
2. Т.к. Chromium (WebKit со Skia backend) это mostly CPU rasterization то это в общем-то простое действо (fill 1px rectangle) потребляет CPU ресурсы как не в себя. На каждый frame rate перерисовывается всё окно.
Ну и сами авторы VS Code тоже в общем-то виноваты, вместо тривиального односекудного setTimer(blink, 1000) запузырить туда animation.