Home | History | Annotate | Download | only in tools

Lines Matching full:self

85   def __init__(self, name, start_address, end_address, origin, origin_offset):
86 self.id = Code._id
88 self.name = name
89 self.other_names = None
90 self.start_address = start_address
91 self.end_address = end_address
92 self.origin = origin
93 self.origin_offset = origin_offset
94 self.self_ticks = 0
95 self.self_ticks_map = None
96 self.callee_ticks = None
98 def AddName(self, name):
99 assert self.name != name
100 if self.other_names is None:
101 self.other_names = [name]
103 if not name in self.other_names:
104 self.other_names.append(name)
106 def FullName(self):
107 if self.other_names is None:
108 return self.name
109 self.other_names.sort()
110 return "%s (aka %s)" % (self.name, ", ".join(self.other_names))
112 def IsUsed(self):
113 return self.self_ticks > 0 or self.callee_ticks is not None
115 def Tick(self, pc):
116 self.self_ticks += 1
117 if self.self_ticks_map is None:
118 self.self_ticks_map = collections.defaultdict(lambda: 0)
119 offset = pc - self.start_address
120 self.self_ticks_map[offset] += 1
122 def CalleeTick(self, callee):
123 if self.callee_ticks is None:
124 self.callee_ticks = collections.defaultdict(lambda: 0)
125 self.callee_ticks[callee] += 1
127 def PrintAnnotated(self, code_info, options):
128 if self.self_ticks_map is None:
131 ticks_map = self.self_ticks_map.items()
138 lines = self._GetDisasmLines(code_info, options)
147 end_offset = self.end_address - self.start_address
160 count = 100.0 * count / self.self_ticks
166 assert total_count == self.self_ticks, \
167 "Lost ticks (%d != %d) in %s" % (total_count, self.self_ticks, self)
169 def __str__(self):
171 self.name,
172 self.start_address,
173 self.end_address,
174 self.end_address - self.start_address,
175 self.origin)
177 def _GetDisasmLines(self, code_info, options):
178 if self.origin == JS_ORIGIN or self.origin == JS_SNAPSHOT_ORIGIN:
183 filename = self.origin
185 self.origin_offset,
186 self.end_address - self.start_address,
210 def __init__(self, address):
211 self.address = address
212 self.code_objects = []
214 def Add(self, code):
215 self.code_objects.append(code)
217 def Remove(self, code):
218 self.code_objects.remove(code)
220 def Find(self, pc):
221 code_objects = self.code_objects
228 def __iter__(self):
229 return self.code_objects.__iter__()
235 def __init__(self):
236 self.pages = {}
237 self.min_address = 1 << 64
238 self.max_address = -1
240 def Add(self, code, max_pages=-1):
250 if page_id in self.pages:
251 page = self.pages[page_id]
254 self.pages[page_id] = page
258 self.min_address = min(self.min_address, code.start_address)
259 self.max_address = max(self.max_address, code.end_address)
261 def Remove(self, code):
266 if page_id not in self.pages:
269 page = self.pages[page_id]
275 def AllCode(self):
276 for page in self.pages.itervalues():
281 def UsedCode(self):
282 for code in self.AllCode():
286 def Print(self):
287 for code in self.AllCode():
290 def Find(self, pc):
291 if pc < self.min_address or pc >= self.max_address:
294 if page_id not in self.pages:
296 return self.pages[page_id].Find(pc)
302 def __init__(self, arch, header_size):
303 self.arch = arch
304 self.header_size = header_size
327 def __init__(self, log_name, code_map, is_snapshot, snapshot_pos_to_name):
328 self.log = open(log_name, "r")
329 self.code_map = code_map
330 self.is_snapshot = is_snapshot
331 self.snapshot_pos_to_name = snapshot_pos_to_name
332 self.address_to_snapshot_name = {}
334 def ReadCodeInfo(self):
335 line = self.log.readline() or ""
340 def ReadUpToGC(self, code_info):
344 line = self.log.readline()
350 self.address_to_snapshot_name.clear()
357 if start_address in self.address_to_snapshot_name:
358 name = self.address_to_snapshot_name[start_address]
369 if self.is_snapshot:
374 conficting_code = self.code_map.Find(start_address)
382 self.code_map.Add(code)
392 code = self.code_map.Find(old_start_address)
398 self.code_map.Remove(code)
402 self.code_map.Add(code)
408 code = self.code_map.Find(old_start_address)
414 self.code_map.Remove(code)
421 if self.is_snapshot:
422 code = self.code_map.Find(start_address)
426 self.snapshot_pos_to_name[snapshot_pos] = code.name
428 if snapshot_pos in self.snapshot_pos_to_name:
429 self.address_to_snapshot_name[start_address] = \
430 self.snapshot_pos_to_name[snapshot_pos]
432 def Dispose(self):
433 self.log.close()
465 def __init__(self, fields):
469 def __str__(self):
470 return ", ".join("%s: %s" % (field, self.__getattribute__(field))
473 self.ctype = TraceItem
475 def Read(self, trace, offset):
476 return self.ctype.from_buffer(trace, offset)
576 def __init__(self, trace_name):
577 self.trace_file = open(trace_name, "r")
578 self.trace = mmap.mmap(self.trace_file.fileno(), 0, mmap.MAP_PRIVATE)
579 self.trace_header = TRACE_HEADER_DESC.Read(self.trace, 0)
580 if self.trace_header.magic != TraceReader._TRACE_HEADER_MAGIC:
582 self.offset = self.trace_header.data_offset
583 self.limit = self.trace_header.data_offset + self.trace_header.data_size
584 assert self.limit <= self.trace.size(), \
586 self.header_size = ctypes.sizeof(PERF_EVENT_HEADER_DESC.ctype)
587 assert self.trace_header.attrs_size != 0, \
589 perf_event_attr = PERF_EVENT_ATTR_DESC.Read(self.trace,
590 self.trace_header.attrs_offset)
591 self.sample_event_body_desc = self._SampleEventBodyDesc(
593 self.callchain_supported = \
595 if self.callchain_supported:
596 self.ip_struct = Descriptor.CTYPE_MAP[PERF_SAMPLE_EVENT_IP_FORMAT]
597 self.ip_size = ctypes.sizeof(self.ip_struct)
599 def ReadEventHeader(self):
600 if self.offset >= self.limit:
602 offset = self.offset
603 header = PERF_EVENT_HEADER_DESC.Read(self.trace, self.offset)
604 self.offset += header.size
607 def ReadMmap(self, header, offset):
608 mmap_info = PERF_MMAP_EVENT_BODY_DESC.Read(self.trace,
609 offset + self.header_size)
611 filename = self.trace[offset + self.header_size + ctypes.sizeof(mmap_info):
616 def ReadSample(self, header, offset):
617 sample = self.sample_event_body_desc.Read(self.trace,
618 offset + self.header_size)
619 if not self.callchain_supported:
622 offset += self.header_size + ctypes.sizeof(sample)
625 self.ip_struct.from_buffer(self.trace, offset).value)
626 offset += self.ip_size
629 def Dispose(self):
630 self.trace.close()
631 self.trace_file.close()
633 def _SampleEventBodyDesc(self, sample_type):
656 def __init__(self):
657 self.infos = []
658 self.names = set()
659 self.ticks = {}
661 def Load(self, mmap_info, code_map, options):
667 return self._LoadKernelSymbols(code_map)
668 self.infos.append(mmap_info)
670 mmap_info.unique_name = self._UniqueMmapName(mmap_info)
723 def Tick(self, pc):
724 for i, mmap_info in enumerate(self.infos):
727 self.infos[0], self.infos[i] = mmap_info, self.infos[0]
731 def _UniqueMmapName(self, mmap_info):
734 while name in self.names:
737 self.names.add(name)
740 def _LoadKernelSymbols(self, code_map):