Add flags set to true when metadata/sections changed in the current frame
Add option to set the max file size at import time
Add a method to merge a report into another
Record parent-child information while parsing profile files
Add class to incrementally aggregate profiles into multiple reports

Still missing a way to collect all partial reports in a single file for load
speed, but the functionality is mostly there.
Add an explicit close tag to mark the end of a sequence of split files

Will be used by the incremental report aggregator to discard intermediate
state for a "done" subprocess.
Move genealogy data to a separate __state__ subdirectory
Load genealogy data in merged_report()
One-line fix to update the processed ordinal after adding a profile file to the report

...plus all the test jiggery required for aggregation tests to pass.
Use a per-process-id state file for the report aggregator

Allows processing profiles for different processes in parallel without worrying
about locking.
Collect and aggregate source code and genealogy data

During trace processing collects all eval STRING source code (and the process
id/ordinal in which it was evaled), and adds an API to find the source code for
a sample given a process id/ordinal/eval name triple.

Multiple eval()s using the same #line directive overwrite each other.
Add a function to check whether Devel::StatProfiler is running
Replace mkdir with mkpath
By default only allow a single process ID per report

Required in order to avoid confusion when multiple processes have evals with
the same name (which will be handled separately when merging reports).
Aggressively open an flush the header of profile files

uWSGI does a double-fork+_exit to daemonize, and without this change it breaks
the parent-child relationship between processes.

A better solution would be to accumulate parent-child relationships and only
flush them when writing some sample data, but this works for now and it's
simpler.
Map physical source code lines to logical source code lines

The mapping is an identity except for #line directives.

Overlapping ranges (which have no meaningful use...) will not be stored in any
meaningful way.
Implement eval uniquification

After aggregation, string evals are renamed using the source code (hash) as the
key, and their exclusive/inclusive timings call sites and callees are merged.
Add an explicit entry for the last line to line mappings

Having a sentinel value at the end of the list with the correct starting line
(one after the last file line) simplifies code that deals with line ranges.
Small refactorings
Render eval source code in the report