| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 3 # Use of this source code is governed by a BSD-style license that can be | |
| 4 # found in the LICENSE file. | |
| 5 | |
| 6 """Thread Module to take measurement (CPU, memory) at certain intervals. | |
| 7 | |
| 8 This class has a while loop with sleep. On every iteration it takes | |
| 9 measurements. The while loop exits when a member variable (stop_measurement) | |
| 10 is flicked. The parent thread has to set stop_measurement to True, and do | |
| 11 thread.join() to wait for this thread to terminate. | |
| 12 """ | |
| 13 from threading import Thread | |
| 14 import time | |
| 15 | |
| 16 from ui_perf_test_utils import UIPerfTestUtils | |
| 17 | |
| 18 | |
| 19 class UIPerfTestMeasureThread(Thread): | |
| 20 """A class to take measurements (CPU, memory) at certain intervals.""" | |
| 21 # Instance variables that are used across methods. | |
| 22 chrome_renderer_process_info = [] | |
| 23 stop_measurement = False | |
| 24 start_time = 0 | |
| 25 | |
| 26 def __init__(self, time_interval=1.0): | |
| 27 """Init for UIPerfTestMeasureThread. | |
| 28 | |
| 29 Args: | |
| 30 time_interval: measurement intervals (in second). Please note that | |
| 31 it is not possible to get accurate interval because of timing issue | |
| 32 using thread. | |
| 33 """ | |
| 34 Thread.__init__(self) | |
| 35 self.time_interval = time_interval | |
| 36 self.chrome_renderer_process_info = [] | |
| 37 | |
| 38 def run(self): | |
| 39 """Run method that contains loops for measurement.""" | |
| 40 self.start_time = time.time() | |
| 41 while 1: | |
| 42 if self.stop_measurement: | |
| 43 break | |
| 44 measure_start_time = time.time() | |
| 45 self._TakeMeasurement() | |
| 46 measure_elapsed_time = time.time() - measure_start_time | |
| 47 time_interval = self.time_interval - (measure_elapsed_time / 1000) | |
| 48 if time_interval > 0: | |
| 49 time.sleep(time_interval) | |
| 50 | |
| 51 def _TakeMeasurement(self): | |
| 52 """Take CPU and memory measurement for Chrome renderer process. | |
| 53 | |
| 54 After the measurement, append them to chrome_renderer_process_info | |
| 55 for presentation later. | |
| 56 """ | |
| 57 info = UIPerfTestUtils.GetChromeRendererProcessInfo(self.start_time) | |
| 58 if info is not None: | |
| 59 self.chrome_renderer_process_info.append(info) | |
| 60 | |
| 61 | |
| 62 def Main(): | |
| 63 """Test this thread using sample data and Chrome process information. | |
| 64 | |
| 65 You have to start Chrome before you run this. | |
| 66 """ | |
| 67 chrome_renderer_process_infos = [] | |
| 68 for i in range(1): | |
| 69 # Pre-processing. | |
| 70 measure_thread = UIPerfTestMeasureThread() | |
| 71 measure_thread.start() | |
| 72 # Emulate process to be measured by sleeping. | |
| 73 time.sleep(5) | |
| 74 # Post-processing. | |
| 75 measure_thread.stop_measurement = True | |
| 76 measure_thread.join(5) | |
| 77 chrome_renderer_process_infos.append( | |
| 78 measure_thread.chrome_renderer_process_info) | |
| 79 chrome_process_info_names = ['time', 'procutil', 'procuser', | |
| 80 'procsystem', 'memrss', 'memvms', | |
| 81 'memutil'] | |
| 82 chrome_process_info_units = ['sec', 'percent', 'load', | |
| 83 'load', 'MB', 'MB', 'percent'] | |
| 84 chrome_process_trace_names = ['t', 'p', 'l', 'l', 'm', 'm', 'p'] | |
| 85 | |
| 86 print UIPerfTestUtils.PrintMeasuredData( | |
| 87 measured_data_list=chrome_renderer_process_infos, | |
| 88 measured_data_name_list=chrome_process_info_names, | |
| 89 measured_data_unit_list=chrome_process_info_units, | |
| 90 parameter_string='', trace_list=chrome_process_trace_names, | |
| 91 remove_first_result=False) | |
| 92 | |
| 93 if __name__ == "__main__": | |
| 94 Main() | |
| OLD | NEW |