def test_filter_jit(self):
     l = LibraryData("lib", 100, 200, True)
     l.symbols = [(112, "py:one"), (113, "py:two")]
     addr_space = AddressSpace([l])
     r = addr_space.filter_addr([
         ([213, 0x1, 111, 112, 0x2], 1, 1)
         ], interp_name='pypy')
     assert r[0] == [([JitAddr(214), JittedVirtual(113), JittedVirtual(112)], 1, 1)]
     r = addr_space.filter_addr([
         ([111, 213, 0x1, 111, 112, 0x2], 1, 1)
         ], interp_name='pypy')
     assert r[0] == [([JitAddr(214), JittedVirtual(113), JittedVirtual(112)], 1, 1)]
Example #2
0
def read_profile(prof_filename, lib_cache={}, extra_libs=None,
                 virtual_only=True, include_extra_info=True):
    prof = open(str(prof_filename), 'rb')

    period, profiles, virtual_symbols, libs, interp_name = read_prof(prof)

    if not virtual_only or include_extra_info:
        for i, lib in enumerate(libs):
            if lib.name in lib_cache:
                libs[i].get_symbols_from(lib_cache[lib.name])
            else:
                lib.read_object_data(lib.start)
                lib_cache[lib.name] = lib
    libs.append(
        LibraryData(
            '<virtual>',
            0x7000000000000000,
            0x7fffffffffffffff,
            True,
            symbols=virtual_symbols)
    )
    if extra_libs:
        libs += extra_libs
    addrspace = AddressSpace(libs)
    filtered_profiles, addr_set, jit_frames = addrspace.filter_addr(profiles,
        virtual_only, include_extra_info, interp_name)
    d = {}
    for addr in addr_set:
        name, _, _, _ = addrspace.lookup(addr)
        d[addr] = name
    if include_extra_info:
        d.update(addrspace.meta_data)
    s = Stats(filtered_profiles, d, jit_frames, interp_name)
    s.addrspace = addrspace
    return s
Example #3
0
def read_profile(prof_filename,
                 lib_cache={},
                 extra_libs=None,
                 virtual_only=True):
    prof = open(prof_filename, 'rb')

    period, profiles, virtual_symbols, libs = read_prof(prof)

    if not virtual_only:
        for i, lib in enumerate(libs):
            if lib.name in lib_cache:
                libs[i] = lib_cache[lib.name]
            else:
                lib.read_object_data(lib.start)
                lib_cache[lib.name] = lib
    libs.append(
        LibraryData('<virtual>',
                    0x7000000000000000,
                    0x7fffffffffffffff,
                    True,
                    symbols=virtual_symbols))
    if extra_libs:
        libs += extra_libs
    addrspace = AddressSpace(libs)
    filtered_profiles, addr_set = addrspace.filter_addr(profiles, virtual_only)
    d = {}
    for addr in addr_set:
        name, _, _ = addrspace.lookup(addr)
        d[addr] = name
    return Stats(filtered_profiles, d)
 def test_filter_gc_frames(self):
     l = LibraryData('foo', 100, 200, True)
     l.symbols = [(101, 'py:one'), (105, 'py:two'), (107, 'py:three')]
     l2 = LibraryData("binary", 1000, 2000, False)
     l2.symbols = [(1500, "pypy_g_resume_in_blackhole")]
     addr_space = AddressSpace([l, l2])
     r = addr_space.filter_addr([
         ([1, 1, 1, 1500, 101, 105], 1, 1)])
     assert r[0][0][0] == [VirtualFrame(105), VirtualFrame(101), BlackholeWarmupFrame(1500)]
 def test_filter_jit_2(self):
     l = LibraryData("python", 100, 200, True)
     l.symbols = [(101, 'py:one'), (105, 'py:two'), (107, 'py:three')]
     addr_space = AddressSpace([l])
     r = addr_space.filter_addr([
         ([0x2222, 0x1111, 0x1, 100, 104, 0x2, 0x3333,
         0x1, 104, 106, 0x2], 1, 1)
         ], interp_name='pypy')
     assert r[0][0][0] == [JitAddr(0x3334), JittedVirtual(107),
                           JitAddr(0x1112),
                           JittedVirtual(105), JittedVirtual(101)]
Example #6
0
def read_profile(prof_filename,
                 lib_cache={},
                 extra_libs=None,
                 virtual_only=True,
                 include_extra_info=True):
    prof = open(str(prof_filename), 'rb')

    period, profiles, virtual_symbols, libs, interp_name = read_prof(prof)

    if not virtual_only or include_extra_info:
        exe_name = libs[0].name
        for lib in libs:
            executable = lib.name == exe_name
            if lib.name in lib_cache:
                lib.get_symbols_from(lib_cache[lib.name], executable)
            else:
                lib.read_object_data(executable)
                lib_cache[lib.name] = lib
    libs.append(
        LibraryData('<virtual>',
                    0x7000000000000000,
                    0x7fffffffffffffff,
                    True,
                    symbols=virtual_symbols))
    if extra_libs:
        libs += extra_libs
    addrspace = AddressSpace(libs)
    filtered_profiles, addr_set, jit_frames = addrspace.filter_addr(
        profiles, virtual_only, include_extra_info, interp_name)
    d = {}
    for addr in addr_set:
        name, _, _, lib = addrspace.lookup(addr)
        if lib is None:
            name = 'jit:' + name
        d[addr] = name
    if include_extra_info:
        d.update(addrspace.meta_data)
    s = Stats(filtered_profiles, d, jit_frames, interp_name)
    s.addrspace = addrspace
    return s