def createEventFrequencyPlot(self, title, events, id = 0): # Count the number of each event eventFrequency = Collections.DefaultDict(lambda: 0) for event in events: eventFrequency[event.name] += 1 items = eventFrequency.items() items.sort(key = lambda f: -f[1]) funcNames = [f[0] for f in items] funcFreq = [f[1] for f in items] # Create a bar charts and add a text describing the event to each bar pylab.figure() pylab.yticks([]) pylab.ylim(len(funcNames), 0) rects = pylab.barh(range(len(funcNames)), funcFreq, color = self.primaryColor) for name, rect in zip(funcNames, rects): pylab.text(rect.get_x() + rect.get_width(), rect.get_y() + rect.get_height(), " " + name, fontsize = 8) fn = os.path.join(self.path, title.lower().replace(" ", "_") + "%03d.png" % id) pylab.savefig(fn) pylab.close() section = Report.Section(title) section.create(Report.Image, fn) return section
def createEventFrequencyPlot(self, title, events, id=0): # Count the number of each event eventFrequency = Collections.DefaultDict(lambda: 0) for event in events: eventFrequency[event.name] += 1 items = eventFrequency.items() items.sort(key=lambda f: -f[1]) funcNames = [f[0] for f in items] funcFreq = [f[1] for f in items] # Create a bar charts and add a text describing the event to each bar pylab.figure() pylab.yticks([]) pylab.ylim(len(funcNames), 0) rects = pylab.barh(range(len(funcNames)), funcFreq, color=self.primaryColor) for name, rect in zip(funcNames, rects): pylab.text(rect.get_x() + rect.get_width(), rect.get_y() + rect.get_height(), " " + name, fontsize=8) fn = os.path.join(self.path, title.lower().replace(" ", "_") + "%03d.png" % id) pylab.savefig(fn) pylab.close() section = Report.Section(title) section.create(Report.Image, fn) return section
def createEventPlot(self, title, events, sliceStart = 0.0, sliceLength = 10.0, id = 0): # See if there's anything to plot if not len(events) >= 2: return segmentDuration = (events[-1].time - events[0].time) / 1e6 if segmentDuration < sliceLength: sliceLength = events[0].time / 1e6 + segmentDuration segmentStart = sliceStart slices = int(segmentDuration / sliceLength) + 2 pylab.figure(figsize = (8, slices * 1)) pylab.subplot(slices, 1, 1) pylab.xlim(sliceStart, sliceStart + sliceLength) pylab.yticks([]) legends = {} for event in events: time = event.time / 1e6 duration = event.duration / 1e6 if time + duration > sliceStart + sliceLength: pylab.subplot(slices, 1, int((time - segmentStart) / sliceLength) + 1) pylab.xticks(size = 7) pylab.yticks([]) sliceStart += sliceLength pylab.xlim(sliceStart, sliceStart + sliceLength) func = self.library.functions[event.name] if func.isFrameMarker: color = self.highlightColor label = "frameswap" elif func.isRenderCall: color = self.primaryColor label = "render" else: continue legends[label] = pylab.axvspan(time, time + max(sliceLength / 100.0, duration), facecolor = color, linewidth = .1, label = label) # Describe the chart elements l1 = [] l2 = [] if "render" in legends: l1.append(legends["render"]) l2.append("Render call") if "frameswap" in legends: l1.append(legends["frameswap"]) l2.append("Frame swap") pylab.legend(l1, l2) fn = os.path.join(self.path, title.lower().replace(" ", "_") + "%03d.png" % id) pylab.savefig(fn) pylab.close() section = Report.Section(title) section.create(Report.Image, fn) return section
def createEventPlot(self, title, events, sliceStart=0.0, sliceLength=10.0, id=0): # See if there's anything to plot if not len(events) >= 2: return segmentDuration = (events[-1].time - events[0].time) / 1e6 if segmentDuration < sliceLength: sliceLength = events[0].time / 1e6 + segmentDuration segmentStart = sliceStart slices = int(segmentDuration / sliceLength) + 2 pylab.figure(figsize=(8, slices * 1)) pylab.subplot(slices, 1, 1) pylab.xlim(sliceStart, sliceStart + sliceLength) pylab.yticks([]) legends = {} for event in events: time = event.time / 1e6 duration = event.duration / 1e6 if time + duration > sliceStart + sliceLength: pylab.subplot(slices, 1, int((time - segmentStart) / sliceLength) + 1) pylab.xticks(size=7) pylab.yticks([]) sliceStart += sliceLength pylab.xlim(sliceStart, sliceStart + sliceLength) func = self.library.functions[event.name] if func.isFrameMarker: color = self.highlightColor label = "frameswap" elif func.isRenderCall: color = self.primaryColor label = "render" else: continue legends[label] = pylab.axvspan(time, time + max(sliceLength / 100.0, duration), facecolor=color, linewidth=.1, label=label) # Describe the chart elements l1 = [] l2 = [] if "render" in legends: l1.append(legends["render"]) l2.append("Render call") if "frameswap" in legends: l1.append(legends["frameswap"]) l2.append("Frame swap") pylab.legend(l1, l2) fn = os.path.join(self.path, title.lower().replace(" ", "_") + "%03d.png" % id) pylab.savefig(fn) pylab.close() section = Report.Section(title) section.create(Report.Image, fn) return section