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)]
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
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)]
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