Andrey Epifancev 8e9f53a478 perf: скрипты разбора и сводные данные прогонов 20261026
- perf/analysis: разбор trace (timeline_breakdown), CPU-профилей с source maps
  (cpuprofile_top), heap snapshots (heapdiff), циклов памяти, сравнения масштабов,
  ручной EXPLAIN вложенных запросов (explain_manual), API против X-DB-Time-Ms
  (api_split), сводка горячих точек; тесты ядра в perf/tests/test_analysis.py
- perf/e2e/scenarios/hotspots.spec.ts: CPU-профиль, рендеры React, мутации DOM
  после фильтра, рост CSS-правил по циклам (вне run-all)
- prod-сборка с source maps: PERF_SOURCEMAP=1, perf/stand.sh web-sourcemap (:8082)
- perf/report-data/20261026-s1, 20261026-s2 (summary, sql, analysis, explain-manual),
  t5-types (иллюстрация CPU 6x)
- design.md: решения T10b без обсуждения

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:43:46 +04:00

17 KiB
Raw Blame History

Heap snapshots: разница и retainers (heapdiff.py)

A = results/20261026-s1/artifacts/memory-cycle10.heapsnapshot, B = results/20261026-s1/artifacts/memory-cycle20.heapsnapshot, база = results/20261026-s1/artifacts/memory-cycle00.heapsnapshot

Self size всех узлов: a_self_bytes 23066796, b_self_bytes 27208391, a_nodes 364458, b_nodes 463302, base_self_bytes 12931501, base_nodes 210912

Новых выживших объектов в B (id нет в A): 173067, 6271836 байт self size.

Классы с наибольшим ростом self size (B - A)

класс Δ число Δ байт число A число B байт A байт B
(native) blink::MediaQueryFeatureExpNode 23161 1852880 23215 46376 1857200 3710080
(native) blink::MediaQuery 23161 741152 23237 46398 743584 1484736
(native) blink::MediaQuerySet 23161 555864 23238 46399 557712 1113576
(native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const 23161 555864 23295 46456 559000 1114864
(code) 806 238664 69314 70120 6750428 6989092
(native) DOMRectReadOnly 456 25536 800 1256 44800 70336
Object 1121 24616 19311 20432 502232 526848
(native) blink::NetworkResourcesData::ResourceData 70 20160 89 159 25632 45792
(native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const 0 16448 20 20 19664 36112
(native) system 405 14107 21520 21925 4430548 4444655
(number) 1048 12588 18925 19973 15816 28404
(native) blink::XHRReplayData 70 12320 73 143 12848 25168
(native) PerformanceResourceTiming 70 9520 88 158 11968 21488
(native) LayoutShiftAttribution 228 9120 400 628 16000 25120
(string) 1372 9112 47563 48935 1521288 1530400
(native) blink::HashTrieNodeblink::CSSVariableData 31 8432 155 186 42160 50592
(native) LayoutShift 54 8208 96 150 14592 22800
(native) LargestContentfulPaint 40 5440 44 84 5984 11424
(array) (object elements) 180 4440 3494 3674 154064 158504
(native) InteractionContentfulPaint 40 4160 40 80 4160 8320

Новые выжившие объекты B по классам

класс число байт
(native) blink::MediaQueryFeatureExpNode 23153 1852240
(native) blink::MediaQuery 23159 741088
(native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const 23192 556512
(native) blink::MediaQuerySet 23155 555720
(code) 3077 530660
Object 10841 295704
(string) 24332 195224
oW 1272 127200
(closure) (anonymous) 3892 110868
(object shape) system 1335 76068
(native) blink::HeapHashTableBacking<blink::HashTable<blink::ShapeCacheKey, 3 74904
(native) system 1822 74008
system 2282 72660
(array) (object properties) 44 40672
(native) blink::ComputedStyleBase::StyleSurroundData 124 38688
(array) (object elements) 1586 34484
(native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const 6 33312
Array 1927 30832
(native) blink::ComputedStyleBase::StyleMiscInherited1Data 128 26624
(native) DOMRectReadOnly 456 25536

Пути удержания новых объектов (кратчайший путь от корня, 6 ближайших шагов; объектов / байт)

  • (native) blink::MediaQueryFeatureExpNode
    • 1 / 80 B: (native) blink::ConditionalExpNodeNested.[1] <- (native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) MediaQueryList.[4] <- (native) blink::HeapVectorBacking<std::pair<cppgc::internal::BasicMember<const.[3]
    • 1 / 80 B: (native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[23756] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24]
    • 1 / 80 B: (native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[28422] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24]
    • 1 / 80 B: (native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[17109] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24]
    • 1 / 80 B: (native) blink::MediaQuery.[1] <- (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[43171] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24]
  • (native) blink::MediaQuery
    • 1 / 32 B: (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[23756] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document
    • 1 / 32 B: (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[28422] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document
    • 1 / 32 B: (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[17109] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document
    • 1 / 32 B: (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[43171] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document
    • 1 / 32 B: (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const.[1] <- (native) blink::MediaQuerySet.[1] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[14406] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document
  • (native) blink::HeapVectorBacking<cppgc::internal::BasicMember<const
    • 3 / 72 B: (native) blink::CSSAnimationData.[3] <- (native) blink::ComputedStyleBase::StyleMisc7Data.[1] <- (native) blink::ComputedStyleBase::StyleMiscData.[10] <- (native) blink::ComputedStyle.[2] <- (native) <div.[6] <- (native) <input.[19]
    • 3 / 72 B: (native) blink::CSSAnimationData.[5] <- (native) blink::ComputedStyleBase::StyleMisc7Data.[1] <- (native) blink::ComputedStyleBase::StyleMiscData.[10] <- (native) blink::ComputedStyle.[2] <- (native) <div.[6] <- (native) <input.[19]
    • 2 / 48 B: (native) blink::MeasureCache.[1] <- (native) blink::LayoutTableCell.[3] <- (native) blink::LayoutFlexibleBox.[7] <- (native) blink::LayoutFlexibleBox.[8] <- (native) blink::PaintLayer.[1] <- (native) blink::PaintLayerScrollableArea.[5]
    • 2 / 48 B: (native) blink::CSSAnimationData.[3] <- (native) blink::ComputedStyleBase::StyleMisc7Data.[1] <- (native) blink::ComputedStyleBase::StyleMiscData.[10] <- (native) blink::ComputedStyle.[2] <- (native) blink::LayoutText.[2] <- (native) Text.[4]
    • 2 / 48 B: (native) blink::CSSAnimationData.[5] <- (native) blink::ComputedStyleBase::StyleMisc7Data.[1] <- (native) blink::ComputedStyleBase::StyleMiscData.[10] <- (native) blink::ComputedStyle.[2] <- (native) blink::LayoutText.[2] <- (native) Text.[4]
  • (native) blink::MediaQuerySet
    • 1 / 24 B: (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[31856] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10]
    • 1 / 24 B: (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[27581] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10]
    • 1 / 24 B: (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[7177] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10]
    • 1 / 24 B: (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[12211] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10]
    • 1 / 24 B: (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[22806] <- (native) StyleEngine.[12] <- (native) HTMLDocument.[24] <- InjectedScript.document <- (synthetic).2262 / DevTools console <- (synthetic).[10]
  • (code)
    • 2 / 39136 B: (code).instruction_stream <- (closure) (anonymous).code <- Object.render <- oW.elementType <- oW.return <- oW.return
    • 1 / 34272 B: (code).instruction_stream <- (closure) (anonymous).code <- Object.type <- system.nY <- (closure) (anonymous).context <- oW.elementType
    • 3 / 12392 B: (code).[0] <- (code).deoptimization_data <- (closure) (anonymous).code <- Object.render <- oW.elementType <- oW.return
    • 1 / 11232 B: (code).instruction_stream <- (closure) (anonymous).code <- system.e <- (closure) (anonymous).context <- Object.render <- oW.elementType
    • 1 / 9396 B: (code).[0] <- (code).deoptimization_data <- (closure) (anonymous).code <- Object.type <- system.nY <- (closure) (anonymous).context
  • Object
    • 1857 / 58272 B: Object.next <- Object.next <- Object.next <- Object.next <- Object.next <- Object.next
    • 206 / 3296 B: Object.memoizedState <- Object.next <- Object.next <- Object.next <- Object.next <- Object.next
    • 76 / 2432 B: Object.next <- Object.next <- Object.next <- Object.next <- Object.next <- oW.memoizedState
    • 32 / 1024 B: Object.lastEffect <- oW.updateQueue <- oW.alternate <- oW.child <- oW.return <- (native) <div.__reactFiber$wimqul213a
    • 31 / 992 B: Object.next <- Object.next <- Object.next <- Object.next <- Object.lastEffect <- oW.updateQueue
  • (string)
    • 116 / 74876 B: (string).first <- Object.styles <- Object.serialized <- oW.pendingProps <- oW.child <- oW.return
    • 81 / 36680 B: (string).first <- Object.styles <- Object.serialized <- oW.pendingProps <- oW.alternate <- oW.child
    • 29 / 4624 B: (string).first <- Object.styles <- Object.serialized <- oW.pendingProps <- oW.child <- oW.child
    • 27 / 2028 B: (string).first <- Object.className <- oW.pendingProps <- oW.alternate <- oW.return <- (native) <div.__reactFiber$wimqul213a
    • 18 / 1568 B: (string).first <- Object.className <- oW.pendingProps <- oW.return <- oW.return <- oW.return
  • oW
    • 5 / 500 B: oW.return <- oW.return <- (native) <td.__reactFiber$wimqul213a <- (native) blink::LayoutTableCell.[8] <- (native) blink::PaintLayer.[1] <- (native) blink::PaintLayerScrollableArea.[5]
    • 5 / 500 B: oW.child <- oW.return <- (native) <td.__reactFiber$wimqul213a <- (native) blink::LayoutTableCell.[8] <- (native) blink::PaintLayer.[1] <- (native) blink::PaintLayerScrollableArea.[5]
    • 5 / 500 B: oW.child <- oW.return <- oW.return <- oW.return <- (native) <button.__reactFiber$wimqul213a <- (native) SVGSVGElement.[17]
    • 5 / 500 B: oW.alternate <- oW.return <- (native) <div.__reactFiber$wimqul213a <- (native) blink::LayoutFlexibleBox.[7] <- (native) blink::PaintLayer.[1] <- (native) blink::PaintLayerScrollableArea.[5]
    • 5 / 500 B: oW.alternate <- oW.return <- (native) <div.__reactFiber$wimqul213a <- (native) <div.[11] <- (native) blink::LayoutFlexibleBox.[7] <- (native) blink::PaintLayer.[1]
  • (closure) (anonymous)
    • 202 / 5656 B: Object.create <- Object.next <- Object.next <- Object.next <- Object.next <- Object.next
    • 81 / 2308 B: Array.[0] <- Object.memoizedState <- Object.next <- Object.next <- Object.next <- Object.next
    • 59 / 1888 B: Object.create <- Object.lastEffect <- oW.updateQueue <- oW.alternate <- oW.child <- oW.return
    • 48 / 1536 B: Object.create <- Object.lastEffect <- oW.updateQueue <- oW.child <- oW.return <- (native) <div.__reactFiber$wimqul213a
    • 38 / 1064 B: system.e <- (closure) (anonymous).context <- Object.create <- Object.next <- Object.next <- Object.next
  • (object shape) system
    • 153 / 6120 B: (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer
    • 52 / 3232 B: (object shape) system.transitions <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer
    • 1 / 2436 B: (object shape) system.transitions <- (closure) Object.initial_map <- (native) system.object_function <- (synthetic).2236 / V8PerContextData::context_ <- (synthetic).[10] <- (synthetic).[1]
    • 48 / 1920 B: (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- Object.map
    • 1 / 1732 B: (object shape) system.transitions <- (object shape) system.back_pointer <- Object.map <- Object.data <- (synthetic).102 / DevTools console <- (synthetic).[10]
  • (native) blink::HeapHashTableBacking<blink::HashTable<blink::ShapeCacheKey,
    • 1 / 36872 B: (native) blink::NGShapeCache.[1] <- (native) blink::SimpleFontData.[2] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[7] <- (native) blink::FontGlobalContext.[4] <- (synthetic).T *blink::ThreadSpecific<cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>>::operator cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy> *() [T = cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>]@../../third_party/blink/renderer/platform/wtf/thread_specific.h:137 <- (synthetic).[29]
    • 1 / 36872 B: (native) blink::NGShapeCache.[1] <- (native) blink::SimpleFontData.[2] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[8] <- (native) blink::FontGlobalContext.[4] <- (synthetic).T *blink::ThreadSpecific<cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>>::operator cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy> *() [T = cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>]@../../third_party/blink/renderer/platform/wtf/thread_specific.h:137 <- (synthetic).[29]
    • 1 / 1160 B: (native) blink::NGShapeCache.[1] <- (native) blink::SimpleFontData.[2] <- (native) blink::HeapHashTableBacking<blink::HashTable<cppgc::internal::BasicMember<const.[2] <- (native) blink::FontGlobalContext.[4] <- (synthetic).T *blink::ThreadSpecific<cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>>::operator cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy> *() [T = cppgc::internal::BasicPersistent<blink::FontGlobalContext, cppgc::internal::StrongPersistentPolicy>]@../../third_party/blink/renderer/platform/wtf/thread_specific.h:137 <- (synthetic).[29]
  • (native) system
    • 1 / 2916 B: (object shape) system.dependent_code <- Object.map <- system.E <- (closure) (anonymous).context <- system.to <- system.previous
    • 1 / 2916 B: (object shape) system.dependent_code <- Object.map <- oW.dependencies <- oW.return <- (native) <div.__reactFiber$wimqul213a <- (native) HTMLDocument.[11]
    • 62 / 2376 B: (object shape) system.dependent_code <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer <- (object shape) system.back_pointer
    • 3 / 1356 B: Object.properties <- system.e <- (closure) debug.context <- Object.debug <- system.r <- (closure) (anonymous).context
    • 1 / 864 B: (object shape) system.dependent_code <- (native) system.js_array_packed_smi_elements_map <- (synthetic).2236 / V8PerContextData::context_ <- (synthetic).[10] <- (synthetic).[1]

Detached-узлы в B

  • (native) <textarea: 1
  • (native) <div: 1
  • (native) : 1
  • (native) : 1