def process_events(event, print_only): overflow = None # ignore anything with new style args (cpu/a,b/) so far # because we get confused by the inner commas # need a proper parser if event.find("/") >= 0: return event el = event.split(",") nl = [] for i in el: start = "" end = "" if i.startswith('{'): start = "{" i = i[1:] if i.endswith('}'): end = "}" i = i[:-1] e = emap.getevent(i) if e: i = e.output() if e.msr: msr.checked_writemsr(e.msr, e.msrval, print_only) if emap.latego and (e.val & 0xffff) in latego.latego_events: latego.setup_event(e.val & 0xffff, 1) overflow = e.overflow nl.append(start + i + end) return str.join(',', nl), overflow
def process_events(event, print_only, period, noexplode): if emap is None: return event, False overflow = None # replace inner commas so we can split events event = re.sub(r"([a-z][a-z0-9]+/)([^/]+)/", lambda m: m.group(1) + m.group(2).replace(",", "#") + "/", event) el = event.split(",") nl = [] group_index = 0 for i in el: group_start = "" group_end = "" start = "" end = "" if i.startswith('{'): group_start = "{" i = i[1:] group_index = len(nl) m = re.match(r'(.*)(\}(:.*)?)', i) if m: group_end = m.group(2) i = m.group(1) i = i.strip() m = re.match(r'(cpu|uncore_.*?)/([^#]+)(#?.*?)/(.*)', i) if m: start = m.group(1) + "/" ev = emap.getevent(m.group(2)) end = m.group(3) + "/" if ev: qual = "".join( sorted( merge_extra(extra_set(ev.extra), extra_set(m.group(4))))) end += qual i = ev.output_newstyle(period=period, noexplode=noexplode) else: start = "" end = "" else: ev = emap.getevent(i) if ev: i = ev.output(period=period, noexplode=noexplode) if ev: if ev.msr: msr.checked_writemsr(ev.msr, ev.msrval, print_only) if emap.latego and (ev.val & 0xffff) in latego.latego_events: latego.setup_event(ev.val & 0xffff, 1) overflow = ev.overflow event = (group_start + start + i + end + group_end).replace("#", ",") nl.append(event) if ev: emap.update_event(event, ev) if "S" in group_end: for j in range(group_index + 1, len(nl)): nl[j] = re.sub(r',period=\d+', '', nl[j]) return str.join(',', nl), overflow
def process_events(event, print_only, period): overflow = None # replace inner commas so we can split events event = re.sub(r"([a-z][a-z0-9]+/)([^/]+)/", lambda m: m.group(1) + m.group(2).replace(",", "#") + "/", event) el = event.split(",") nl = [] for i in el: start = "" end = "" if i.startswith('{'): start = "{" i = i[1:] if i.endswith('}'): end = "}" i = i[:-1] i = i.strip() m = re.match(r"(cpu/)([a-zA-Z0-9._]+)(.*?/)([^,]*)", i) if not m: m = re.match(r"(uncore_.+?/)([a-zA-Z0-9_.]+)(.*?/)([^,]*)", i) if m: start += m.group(1) ev = emap.getevent(m.group(2)) end += m.group(3) if ev: end += "".join( merge_extra(extra_set(ev.extra), extra_set(m.group(4)))) i = ev.output_newstyle(period=period) else: start = "" end = "" else: extra = "" m = re.match("([^:]*):(.*)", i) if m: extra = m.group(2) i = m.group(1) ev = emap.getevent(i) if ev: i = ev.output(flags=extra, period=period) else: if extra: i += ":" + extra if ev: if ev.msr: msr.checked_writemsr(ev.msr, ev.msrval, print_only) if emap.latego and (ev.val & 0xffff) in latego.latego_events: latego.setup_event(ev.val & 0xffff, 1) overflow = ev.overflow event = (start + i + end).replace("#", ",") nl.append(event) if ev: emap.update_event(event, ev) return str.join(',', nl), overflow
def process_events(event, print_only, period): overflow = None # replace inner commas so we can split events event = re.sub(r"([a-z][a-z0-9]+/)([^/]+)/", lambda m: m.group(1) + m.group(2).replace(",", "#") + "/", event) el = event.split(",") nl = [] for i in el: start = "" end = "" if i.startswith('{'): start = "{" i = i[1:] if i.endswith('}'): end = "}" i = i[:-1] i = i.strip() m = re.match(r"(cpu/)([a-zA-Z0-9._]+)(.*?/)([^,]*)", i) if not m: m = re.match(r"(uncore_.+?/)([a-zA-Z0-9_.]+)(.*?/)([^,]*)", i) if m: start += m.group(1) ev = emap.getevent(m.group(2)) end += m.group(3) if ev: end += "".join(merge_extra(extra_set(ev.extra), extra_set(m.group(4)))) i = ev.output_newstyle(period=period) else: start = "" end = "" else: extra = "" m = re.match("([^:]*):(.*)", i) if m: extra = m.group(2) i = m.group(1) ev = emap.getevent(i) if ev: i = ev.output(flags=extra, period=period) else: if extra: i += ":" + extra if ev: if ev.msr: msr.checked_writemsr(ev.msr, ev.msrval, print_only) if emap.latego and (ev.val & 0xffff) in latego.latego_events: latego.setup_event(ev.val & 0xffff, 1) overflow = ev.overflow event = (start + i + end).replace("#", ",") nl.append(event) if ev: emap.update_event(event, ev) return str.join(',', nl), overflow