-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathTODO
66 lines (64 loc) · 3.38 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
- file output
- check whether getting rid of varint encoding speed up the writer
(we compress using Snappy anyway)
- add option to set $^P to
- 0x200 descriptive names for anonymous subroutines
- 0x100 descriptive names for eval ""
- 0x10 keep information about the definition line for a subroutine
- 0x400 save source code for all files (optionally dumping it as soon
as possible)
- command line options for analysis script
- generated code containing #line directives
- it might be useful to have both the original and generated code
in the report, with some way to toggle between the two
- metadata/segmenting
- supports writing overlapping sections
- metadata does not belong to a section (probably not an issue, but
it needs better handling in the aggregation phase)
- overlapping/nested sections are not handled during aggregation
- some serious benchmarking
- add a fast benchmark to be used during development and a slow more
realistic one for release
- decide what to do for multiple distinct evals mapping to the same
logical file (with overlapping and non-overlapping line ranges)
(t/382_evil_source_mapping.t cases in evil-source-mapping branch)
- subs with same optree and different name via Sub::Name are not aggregated;
this is a sensible default, but having some way of detect the situation
might be nice (CvROOT() might be a starting point)
- detect multiple evals with the same #line directive and different source code
- closure aggregation
- aggregate evals without source code, based on caller/callees
- handle overlapping/nested sections
- make aggregation code reusable both as a script and in a web application
- file reader: Better error reporting
- treat truncated files as a closed stream
- test case for 9d4110d016a72fabfb5cd45c4ae97468c9070f51
- test case for 8cca10b0053cf3a2e741fae7adc7f0ed3a1fea3c
- merge xs:<file> with real file entries, if there is a matching one
- split the Aggregator class in two (aggregation and loading of the final report)
- rewrite NameMap in C++ (leaving the loading/saving/merging in Perl for convenience)
- add test for NameMap eval mapping
- revisit the way the mutable genealogy hash is shared
(provide an API and/or rewrite in C++)
- add an API to read traces by section, and remove the horrible hack of returning
a fake empty trace when a section starts/ends
- add some kind of ->watch_sections("name1", "name2") to the reader,
with the option of returning data both inside and outside the section
- instead of returning a single trace, the reader now returns a section,
with included metadata; this means a sample can be potentially returned
multiple times in different sections
- the aggregator class needs to be tweaked but most of the logic should
remain the same
- rework metadata API
- per-aggregate one requires a save
- per-report one requires a merge
- test it
- submit flamegraph.pl changes upstream
- test for 372d862d8bd6e5e46b0e08c8ad59aab9837f48b3, and aggregation is still
generating way too many "Unable to find reverse file for '$file'" for evals
- test for discard_expired_process_data
- also garbage-collect eval source code
- merge and discard evals with the same name and no source mapping
if the process that generated them is older than some threshold
- sporadic t/032_xsubs.t failure:
"Invalid input file: Found stray sub-frame tag without sample-start tag"