| 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 |