|  | #!/usr/bin/env vpython3 | 
|  | # | 
|  | # Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 
|  | # | 
|  | # Use of this source code is governed by a BSD-style license | 
|  | # that can be found in the LICENSE file in the root of the source | 
|  | # tree. An additional intellectual property rights grant can be found | 
|  | # in the file PATENTS.  All contributing project authors may | 
|  | # be found in the AUTHORS file in the root of the source tree. | 
|  |  | 
|  | import sys | 
|  |  | 
|  | import psutil | 
|  | import numpy | 
|  | from matplotlib import pyplot | 
|  |  | 
|  |  | 
|  | class CpuSnapshot: | 
|  | def __init__(self, label): | 
|  | self.label = label | 
|  | self.samples = [] | 
|  |  | 
|  | def Capture(self, sample_count): | 
|  | print(('Capturing %d CPU samples for %s...' % | 
|  | ((sample_count - len(self.samples)), self.label))) | 
|  | while len(self.samples) < sample_count: | 
|  | self.samples.append(psutil.cpu_percent(1.0, False)) | 
|  |  | 
|  | def Text(self): | 
|  | return ( | 
|  | '%s: avg=%s, median=%s, min=%s, max=%s' % | 
|  | (self.label, numpy.average(self.samples), numpy.median( | 
|  | self.samples), numpy.min(self.samples), numpy.max(self.samples))) | 
|  |  | 
|  | def Max(self): | 
|  | return numpy.max(self.samples) | 
|  |  | 
|  |  | 
|  | def GrabCpuSamples(sample_count): | 
|  | print('Label for snapshot (enter to quit): ') | 
|  | label = eval(input().strip()) | 
|  | if len(label) == 0: | 
|  | return None | 
|  |  | 
|  | snapshot = CpuSnapshot(label) | 
|  | snapshot.Capture(sample_count) | 
|  |  | 
|  | return snapshot | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | print('How many seconds to capture per snapshot (enter for 60)?') | 
|  | sample_count = eval(input().strip()) | 
|  | if len(sample_count) > 0 and int(sample_count) > 0: | 
|  | sample_count = int(sample_count) | 
|  | else: | 
|  | print('Defaulting to 60 samples.') | 
|  | sample_count = 60 | 
|  |  | 
|  | snapshots = [] | 
|  | while True: | 
|  | snapshot = GrabCpuSamples(sample_count) | 
|  | if snapshot is None: | 
|  | break | 
|  | snapshots.append(snapshot) | 
|  |  | 
|  | if len(snapshots) == 0: | 
|  | print('no samples captured') | 
|  | return -1 | 
|  |  | 
|  | pyplot.title('CPU usage') | 
|  |  | 
|  | for s in snapshots: | 
|  | pyplot.plot(s.samples, label=s.Text(), linewidth=2) | 
|  |  | 
|  | pyplot.legend() | 
|  |  | 
|  | pyplot.show() | 
|  | return 0 | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(main()) |