Commit 5ded5277 authored by miletus@chromium.org's avatar miletus@chromium.org

Make timeline model able to return browser process

When parsing tracing data into timeline model, also find the browser
process and save it into timeline model. This is to support querying
async slices starting in browser process.

BUG=246034
TEST=Run telemetry smoothness test and make sure input latency trace
     can be retrieved from querying async slices on browser process.

Review URL: https://codereview.chromium.org/144423003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@247911 0039d316-1c4b-4281-b951-d872f2087c98
parent b13771f5
......@@ -21,6 +21,9 @@ class ChromeTraceResult(object):
"""Parses the trace result into a timeline model for in-memory
manipulation."""
timeline = self._CreateTimelineModel()
for thread in timeline.GetAllThreads():
if thread.name == 'CrBrowserMain':
timeline.browser_process = thread.parent
for key, value in self._tab_to_marker_mapping.iteritems():
timeline_markers = timeline.FindTimelineMarkers(value)
assert(len(timeline_markers) == 1)
......
......@@ -133,3 +133,14 @@ class ChromeTraceResultTest(unittest.TestCase):
assert 'traceEvents' in j
self.assertEquals(j['traceEvents'],
['foo', 'bar', 'baz'])
def testBrowserProcess(self):
ri = self._chromeTraceResultClass([
'{"name": "process_name",'
'"args": {"name": "Browser"},'
'"pid": 5, "ph": "M"}',
'{"name": "thread_name",'
'"args": {"name": "CrBrowserMain"},'
'"pid": 5, "tid": 32578, "ph": "M"}'])
model = ri.AsTimelineModel()
self.assertEquals(model.browser_process.pid, 5)
......@@ -42,6 +42,7 @@ class TimelineModel(object):
self._bounds = bounds.Bounds()
self._thread_time_bounds = {}
self._processes = {}
self._browser_process = None
self._frozen = False
self.import_errors = []
self.metadata = []
......@@ -65,6 +66,14 @@ class TimelineModel(object):
def processes(self):
return self._processes
@property
def browser_process(self):
return self._browser_process
@browser_process.setter
def browser_process(self, browser_process):
self._browser_process = browser_process
def ImportTraces(self, traces, shift_world_to_zero=True):
if self._frozen:
raise Exception("Cannot add events once recording is done")
......
......@@ -34,6 +34,11 @@ class Process(event_container.TimelineEventContainer):
for s in thread.IterAllSlicesOfName(name):
yield s
def IterAllAsyncSlicesOfName(self, name):
for thread in self._threads.itervalues():
for s in thread.IterAllAsyncSlicesOfName(name):
yield s
def IterEventsInThisContainer(self):
return
yield # pylint: disable=W0101
......
......@@ -64,6 +64,11 @@ class Thread(event_container.TimelineEventContainer):
for sub_slice in async_slice.IterEventsInThisContainerRecrusively():
yield sub_slice
def IterAllAsyncSlicesOfName(self, name):
for s in self.IterAllAsyncSlices():
if s.name == name:
yield s
def IterEventsInThisContainer(self):
return itertools.chain(
iter(self._newly_added_slices),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment