Home | History | Annotate | Download | only in profiler
      1 # Copyright 2013 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import tempfile
      6 
      7 from telemetry.core.platform import profiler
      8 
      9 
     10 class NetLogProfiler(profiler.Profiler):
     11 
     12   _NET_LOG_ARG = '--log-net-log='
     13 
     14   @classmethod
     15   def name(cls):
     16     return 'netlog'
     17 
     18   @classmethod
     19   def is_supported(cls, browser_type):
     20     return not browser_type.startswith('cros')
     21 
     22   @classmethod
     23   def CustomizeBrowserOptions(cls, browser_type, options):
     24     if browser_type.startswith('android'):
     25       dump_file = '/sdcard/net-internals-profile.json'
     26     else:
     27       dump_file = tempfile.mkstemp()[1]
     28     options.AppendExtraBrowserArgs([cls._NET_LOG_ARG + dump_file])
     29 
     30   def CollectProfile(self):
     31     # Find output filename from browser argument.
     32     for i in self._browser_backend.browser_options.extra_browser_args:
     33       if i.startswith(self._NET_LOG_ARG):
     34         output_file = i[len(self._NET_LOG_ARG):]
     35     assert output_file
     36     # On Android pull the output file to the host.
     37     if self._platform_backend.GetOSName() == 'android':
     38       host_output_file = '%s.json' % self._output_path
     39       self._browser_backend.adb.device().old_interface.Adb().Pull(
     40           output_file, host_output_file)
     41       # Clean the device
     42       self._browser_backend.adb.device().RunShellCommand('rm %s' % output_file)
     43       output_file = host_output_file
     44     print 'Net-internals log saved as %s' % output_file
     45     print 'To view, open in chrome://net-internals'
     46     return [output_file]
     47