flutter / flutter/devtools

Performance improvements to CPU profile code

Abierto
#7,917 9 comentarios 0 reacciones 0 asignados Ver en GitHub
dart2wasm devtools app performance P2 product-quality screen: cpu profiler
Lenguaje dominante
Dart
Estrellas
1.7k
Forks
404
Merge medio
6 d 17 h
PR fusionados (30 d)
18

Descripción

After having taken a look at the cpu profiling code in DevTools, we found:

* It unnecessarily encodes json maps and decodes them again: [devtools/pull/7916](https://github.com/flutter/devtools/pull/7916)
* It gets `Stream */>` from the websocket and then json decodes strings
=> It would be more efficient to avoid going from utf-8 to string and then to json and instead directly from utf8->json
=> This would probably require some refactoring in various packages, so maybe not easily doable?
* Way too many conversions
* Bytes->String in websocket layer
* String->JSON in `package:vm_service layer`
* JSON -> service objects in `package:vm_service` layer (e.g. `vm_service.CpuSamples`, `vm_service.CpuSample`)
* service objects -> `_CpuProfileTimelineTree` tree structure
=> Uses expandos (!!) to map service objects back to tree nodes
* `_CpuProfileTimelineTree` -> JSON "traceObject" (very expensive operation!)
* Going from JSON "traceObject" back to normal objects in `CpuProfileData.fromJson` which builds json maps with strings and `CpuStackFrame` as values

It seems there's too many conversions from one data structure to another and the representations used for encoding this profiling information doesn't seem very efficient either.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.