Index: tools/profile_chrome/chrome_controller.py |
diff --git a/tools/profile_chrome/chrome_controller.py b/tools/profile_chrome/chrome_controller.py |
index 9f522631b1e6e6591c49d595a8985f5657e78180..1176518c83f5e616333e8f305ee3f1adba319fbb 100644 |
--- a/tools/profile_chrome/chrome_controller.py |
+++ b/tools/profile_chrome/chrome_controller.py |
@@ -9,6 +9,8 @@ import time |
from profile_chrome import controllers |
+from pylib import android_commands |
+from pylib import flag_changer |
from pylib import pexpect |
from pylib.device import intent |
@@ -17,7 +19,8 @@ _HEAP_PROFILE_MMAP_PROPERTY = 'heapprof.mmap' |
class ChromeTracingController(controllers.BaseController): |
def __init__(self, device, package_info, |
- categories, ring_buffer, trace_memory=False): |
+ categories, ring_buffer, trace_memory=False, |
+ startup=None): |
controllers.BaseController.__init__(self) |
self._device = device |
self._package_info = package_info |
@@ -26,10 +29,15 @@ class ChromeTracingController(controllers.BaseController): |
self._trace_file = None |
self._trace_interval = None |
self._trace_memory = trace_memory |
+ self._startup = startup |
self._is_tracing = False |
self._trace_start_re = \ |
re.compile(r'Logging performance trace to file') |
- self._trace_finish_re = \ |
+ if self._startup: |
+ self._trace_finish_re = re.compile( |
+ r' Completed startup tracing to (.*)') |
+ else: |
+ self._trace_finish_re = \ |
re.compile(r'Profiler finished[.] Results are in (.*)[.]') |
self._device.old_interface.StartMonitoringLogcat(clear=False) |
@@ -59,7 +67,24 @@ class ChromeTracingController(controllers.BaseController): |
return list(record_categories), list(disabled_by_default_categories) |
+ def _SetupStartupTracing(self): |
+ changer = flag_changer.FlagChanger( |
+ self._device, self._package_info.cmdline_file) |
+ changer.AddFlags(['--trace-startup']) |
+ self._device.old_interface.CloseApplication(self._package_info.package) |
+ if self._startup == 'cold': |
+ self._device.old_interface.EnableAdbRoot() |
+ adb = android_commands.AndroidCommands() |
+ adb.RunShellCommand('echo 1 > /proc/vm/drop_caches') |
pasko-google - do not use
2015/01/27 15:20:52
There is cache_control.DropRamCaches, which also d
Benoit L
2015/01/27 16:31:33
Done.
|
+ self._device.old_interface.StartActivity( |
+ package=self._package_info.package, |
+ activity=self._package_info.activity, |
+ data='http://www.google.com/', |
+ extras={'create_new_tab' : True}) |
+ |
def StartTracing(self, interval): |
+ if self._startup: |
+ self._SetupStartupTracing() |
self._trace_interval = interval |
self._device.old_interface.SyncLogCat() |
start_extras = {'categories': ','.join(self._categories)} |
@@ -80,13 +105,14 @@ class ChromeTracingController(controllers.BaseController): |
# |
# The first one is printed when tracing starts and the second one indicates |
# that the trace file is ready to be pulled. |
- try: |
- self._device.old_interface.WaitForLogMatch( |
- self._trace_start_re, None, timeout=5) |
- self._is_tracing = True |
- except pexpect.TIMEOUT: |
- raise RuntimeError('Trace start marker not found. Is the correct version ' |
- 'of the browser running?') |
+ if not self._startup: |
+ try: |
+ self._device.old_interface.WaitForLogMatch( |
+ self._trace_start_re, None, timeout=5) |
+ except pexpect.TIMEOUT: |
+ raise RuntimeError('Trace start marker not found. Is the correct ' |
+ 'version of the browser running?') |
+ self._is_tracing = True |
def StopTracing(self): |
if self._is_tracing: |
@@ -101,7 +127,6 @@ class ChromeTracingController(controllers.BaseController): |
def PullTrace(self): |
# Wait a bit for the browser to finish writing the trace file. |
time.sleep(self._trace_interval / 4 + 1) |
- |
trace_file = self._trace_file.replace('/storage/emulated/0/', '/sdcard/') |
host_file = os.path.join(os.path.curdir, os.path.basename(trace_file)) |
self._device.PullFile(trace_file, host_file) |