Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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