OLD | NEW |
1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import os, re, shutil, sys, time | 5 import os, re, shutil, sys, time |
6 | 6 |
7 from autotest_lib.client.bin import test, utils | 7 from autotest_lib.client.bin import test, utils |
8 from autotest_lib.client.common_lib import error, site_ui | 8 from autotest_lib.client.common_lib import error, site_ui |
9 | 9 |
10 WARMUP_TIME = 60 | 10 WARMUP_TIME = 60 |
11 SLEEP_DURATION = 260 | 11 SLEEP_DURATION = 260 |
12 | 12 |
13 class realtimecomm_GTalkPlayground(test.test): | 13 class realtimecomm_GTalkPlayground(test.test): |
14 version = 1 | 14 version = 1 |
15 playground = '/home/chronos/playground' | 15 playground = '/home/chronos/playground' |
16 dep = 'realtimecomm_playground' | 16 dep = 'realtimecomm_playground' |
17 | 17 |
18 def setup(self): | 18 def setup(self): |
19 self.job.setup_dep(['realtimecomm_playground']) | 19 self.job.setup_dep([self.dep]) |
20 | |
21 def run_cleanup(self, testdone=False): | |
22 utils.run('pkill chrome', ignore_status=True) | |
23 time.sleep(10) | |
24 utils.run('pkill GoogleTalkPlugin', ignore_status=True) | |
25 time.sleep(10) | |
26 utils.run('rm -f /tmp/tmp.log', ignore_status=True) | |
27 if testdone: | |
28 utils.run('rm -rf %s' % self.playground) | |
29 # Delete previous browser state if any | |
30 shutil.rmtree('/home/chronos/.config/chromium', ignore_errors=True) | |
31 shutil.rmtree('/home/chronos/.config/google-chrome', ignore_errors=True) | |
32 | |
33 | |
34 def run_setup(self): | |
35 if os.path.exists(self.playground): | |
36 shutil.rmtree(self.playground) | |
37 shutil.copytree(os.path.join(self.dep_dir, 'src'), self.playground) | |
38 utils.run('chown chronos %s -R' % self.playground) | |
39 src_opt = os.path.join(self.bindir, 'options') | |
40 des_path= '/home/chronos/.Google/' | |
41 opt_path= os.path.join(des_path, 'Google Talk Plugin') | |
42 des_opt = os.path.join(opt_path, 'options') | |
43 utils.run('mkdir -p \'%s\'' % opt_path) | |
44 utils.run('cp -f %s \'%s\'' % (src_opt, des_opt)) | |
45 utils.run('chown chronos \'%s\' -R' % des_path) | |
46 utils.run('chmod o+r+w \'%s\'' % des_opt) | |
47 | 20 |
48 | 21 |
49 def run_verification(self): | 22 def run_verification(self): |
50 # TODO(zhurun): Add more checking and perf data collection. | 23 # TODO(zhurun): Add more checking and perf data collection. |
51 if not os.path.exists('/tmp/tmp.log'): | 24 if not os.path.exists('/tmp/tmp.log'): |
52 raise error.TestFail('GTalk log file not exist!') | 25 raise error.TestFail('GTalk log file not exist!') |
53 try: | 26 content = utils.read_file('/tmp/tmp.log') |
54 log = open(r'/tmp/tmp.log') | 27 if not "Found V4L2 capture" in content: |
55 try: | 28 raise error.TestFail('V4L2 not found!') |
56 content = log.read() | 29 if not "video state, recv=1 send=1" in content: |
57 if not "Found V4L2 capture" in content: | 30 raise error.TestFail('Error in Video send/recv!') |
58 raise error.TestFail('V4L2 not found!') | 31 if not "voice state, recv=1 send=1" in content: |
59 if not "video state, recv=1 send=1" in content: | 32 raise error.TestFail('Error in Audio send/recv!') |
60 raise error.TestFail('Error in Video send/recv!') | 33 if not "Decoded framerate" in content: |
61 if not "voice state, recv=1 send=1" in content: | 34 raise error.TestFail('Error in Video upstream!') |
62 raise error.TestFail('Error in Audio send/recv!') | 35 if not "Rendered framerate" in content: |
63 if not "Decoded framerate" in content: | 36 raise error.TestFail('Error in Video downstream!') |
64 raise error.TestFail('Error in Video upstream!') | 37 # Get framerate |
65 if not "Rendered framerate" in content: | 38 self.get_framerate(content) |
66 raise error.TestFail('Error in Video downstream!') | |
67 # Get framerate | |
68 self.get_framerate(content) | |
69 finally: | |
70 log.close() | |
71 except IOError: | |
72 raise error.TestFail('Error in reading GTalk log file!') | |
73 | 39 |
74 | 40 |
75 def get_framerate(self, log): | 41 def get_framerate(self, log): |
76 d = {} | 42 d = {} |
77 # We get a framerate report every 10 seconds for both streams. | 43 # We get a framerate report every 10 seconds for both streams. |
78 # We run for 5 mins, and should get around (5 * 60/10) * 2 = 60 | 44 # We run for 5 mins, and should get around (5 * 60/10) * 2 = 60 |
79 # framerate reports for 2 streams. | 45 # framerate reports for 2 streams. |
80 # Ignore the first and last framerate since they are not accurate. | 46 # Ignore the first and last framerate since they are not accurate. |
81 l = re.findall(r"Rendered framerate \((.*)\): (\d+\.?\d*) fps", log) | 47 l = re.findall(r"Rendered framerate \((.*)\): (\d+\.?\d*) fps", log) |
82 if len(l) < 57: | 48 if len(l) < 57: |
(...skipping 15 matching lines...) Expand all Loading... |
98 if (min(fps[0], fps[1]) < 5.0): | 64 if (min(fps[0], fps[1]) < 5.0): |
99 raise error.TestFail('Error in Video framerate.') | 65 raise error.TestFail('Error in Video framerate.') |
100 | 66 |
101 | 67 |
102 def run_once(self): | 68 def run_once(self): |
103 self.dep_dir = os.path.join(self.autodir, 'deps', self.dep) | 69 self.dep_dir = os.path.join(self.autodir, 'deps', self.dep) |
104 sys.path.append(self.dep_dir) | 70 sys.path.append(self.dep_dir) |
105 import pgutil | 71 import pgutil |
106 | 72 |
107 self.performance_results = {} | 73 self.performance_results = {} |
108 self.run_cleanup() | 74 pgutil.cleanup_playground(self.playground) |
109 self.run_setup() | 75 pgutil.setup_playground(os.path.join(self.dep_dir, 'src'), |
| 76 self.playground, os.path.join(self.bindir, 'options')) |
110 | 77 |
111 # Launch Playground | 78 # Launch Playground |
112 path = os.path.join(self.playground, | 79 path = os.path.join(self.playground, |
113 'buzz/javascript/media/examples') | 80 'buzz/javascript/media/examples') |
114 page = 'videoplayground.html' | 81 page = 'videoplayground.html' |
115 para = 'callType=v' | 82 para = 'callType=v' |
116 playground_url = "%s/%s?%s" % (path, page, para) | 83 playground_url = "%s/%s?%s" % (path, page, para) |
117 # Here we somehow have to use utils.run | 84 # Here we somehow have to use utils.run |
118 # Other approaches like utils.system and site_ui.ChromeSession | 85 # Other approaches like utils.system and site_ui.ChromeSession |
119 # cause problem in video. | 86 # cause problem in video. |
120 # http://code.google.com/p/chromium-os/issues/detail?id=1764 | 87 # http://code.google.com/p/chromium-os/issues/detail?id=1764 |
121 utils.run('su chronos -c \'DISPLAY=:0 \ | 88 utils.run('su chronos -c \'DISPLAY=:0 \ |
122 XAUTHORITY=/home/chronos/.Xauthority \ | 89 XAUTHORITY=/home/chronos/.Xauthority \ |
123 /opt/google/chrome/chrome \ | 90 /opt/google/chrome/chrome \ |
124 --no-first-run %s\' &' % playground_url) | 91 --no-first-run %s\' &' % playground_url) |
125 | 92 |
126 # Collect ctime,stime for GoogleTalkPlugin | 93 # Collect ctime,stime for GoogleTalkPlugin |
127 time.sleep(WARMUP_TIME) | 94 time.sleep(WARMUP_TIME) |
128 gtalk_s = pgutil.get_utime_stime(pgutil.get_pids('GoogleTalkPlugin')) | 95 gtalk_s = pgutil.get_utime_stime(pgutil.get_pids('GoogleTalkPlugin')) |
129 chrome_s = pgutil.get_utime_stime(pgutil.get_pids('chrome/chrome')) | 96 chrome_s = pgutil.get_utime_stime(pgutil.get_pids('chrome/chrome')) |
| 97 pulse_s = pgutil.get_utime_stime(pgutil.get_pids('pulseaudio')) |
130 time.sleep(SLEEP_DURATION) | 98 time.sleep(SLEEP_DURATION) |
131 gtalk_e = pgutil.get_utime_stime(pgutil.get_pids('GoogleTalkPlugin')) | 99 gtalk_e = pgutil.get_utime_stime(pgutil.get_pids('GoogleTalkPlugin')) |
132 chrome_e = pgutil.get_utime_stime(pgutil.get_pids('chrome/chrome')) | 100 chrome_e = pgutil.get_utime_stime(pgutil.get_pids('chrome/chrome')) |
| 101 pulse_e = pgutil.get_utime_stime(pgutil.get_pids('pulseaudio')) |
133 | 102 |
134 self.performance_results['ctime_gtalk'] = \ | 103 self.performance_results['ctime_gtalk'] = \ |
135 pgutil.get_cpu_usage(SLEEP_DURATION, gtalk_e[0] - gtalk_s[0]) | 104 pgutil.get_cpu_usage(SLEEP_DURATION, gtalk_e[0] - gtalk_s[0]) |
136 self.performance_results['stime_gtalk'] = \ | 105 self.performance_results['stime_gtalk'] = \ |
137 pgutil.get_cpu_usage(SLEEP_DURATION, gtalk_e[1] - gtalk_s[1]) | 106 pgutil.get_cpu_usage(SLEEP_DURATION, gtalk_e[1] - gtalk_s[1]) |
138 self.performance_results['ctime_chrome'] = \ | 107 self.performance_results['ctime_chrome'] = \ |
139 pgutil.get_cpu_usage(SLEEP_DURATION, chrome_e[0] - chrome_s[0]) | 108 pgutil.get_cpu_usage(SLEEP_DURATION, chrome_e[0] - chrome_s[0]) |
140 self.performance_results['stime_chrome'] = \ | 109 self.performance_results['stime_chrome'] = \ |
141 pgutil.get_cpu_usage(SLEEP_DURATION, chrome_e[1] - chrome_s[1]) | 110 pgutil.get_cpu_usage(SLEEP_DURATION, chrome_e[1] - chrome_s[1]) |
| 111 self.performance_results['ctime_pulse'] = \ |
| 112 pgutil.get_cpu_usage(SLEEP_DURATION, pulse_e[0] - pulse_s[0]) |
| 113 self.performance_results['stime_pulse'] = \ |
| 114 pgutil.get_cpu_usage(SLEEP_DURATION, pulse_e[1] - pulse_s[1]) |
142 | 115 |
143 # Verify log | 116 # Verify log |
144 try: | 117 try: |
145 self.run_verification() | 118 self.run_verification() |
146 finally: | 119 finally: |
147 self.run_cleanup(True) | 120 pgutil.cleanup_playground(self.playground, True) |
148 | 121 |
149 # Report perf | 122 # Report perf |
150 self.write_perf_keyval(self.performance_results) | 123 self.write_perf_keyval(self.performance_results) |
151 | 124 |
OLD | NEW |