flutter / flutter/devtools

Performance improvements to CPU profile code

Aperta
#7,917 9 commenti 0 reazioni 0 assegnatari Vedi su GitHub
dart2wasm devtools app performance P2 product-quality screen: cpu profiler
Lingua principale
Dart
Stelle
1.7k
Fork
404
Merge medio
6g 17h
PR unite (30g)
18

Descrizione

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.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.