In order to support different types of perf scripts, this change tried to refactor PerfReader by adding the base class PerfReaderBase and current HybridPerfReader is derived from it for CS profile generation. Common functions like, passMM2PEvents, extract_lbrs, extract_callstack, etc. can be reused.
Next step is to add LBR only reader(for non-CS profile) and aggregated perf scripts reader(do a pre-aggregation of scripts).
Nit: On the second thought, maybe just inlined the function here? PerfReaderBase doesn't seem a good resort for this function either since conceptually we want to by pass the perfreader and exit early.