| Index: tools/telemetry/telemetry/core/timeline/process.py | 
| diff --git a/tools/telemetry/telemetry/core/timeline/tracing/process.py b/tools/telemetry/telemetry/core/timeline/process.py | 
| similarity index 51% | 
| rename from tools/telemetry/telemetry/core/timeline/tracing/process.py | 
| rename to tools/telemetry/telemetry/core/timeline/process.py | 
| index d25c3af6692ee10affd796a2e4e009b6099cfad9..5a26619c0d4e4733971cfa2169fb115b5bd71e2f 100644 | 
| --- a/tools/telemetry/telemetry/core/timeline/tracing/process.py | 
| +++ b/tools/telemetry/telemetry/core/timeline/process.py | 
| @@ -2,17 +2,17 @@ | 
| # Use of this source code is governed by a BSD-style license that can be | 
| # found in the LICENSE file. | 
|  | 
| -import telemetry.core.timeline.event as timeline_event | 
| -import telemetry.core.timeline.tracing.counter as tracing_counter | 
| -import telemetry.core.timeline.tracing.thread as tracing_thread | 
| +import telemetry.core.timeline.event_container as event_container | 
| +import telemetry.core.timeline.counter as tracing_counter | 
| +import telemetry.core.timeline.thread as tracing_thread | 
|  | 
| -class Process(timeline_event.TimelineEvent): | 
| +class Process(event_container.TimelineEventContainer): | 
| ''' The Process represents a single userland process in the trace. | 
| ''' | 
| -  def __init__(self, pid): | 
| -    super(Process, self).__init__('process %s' % pid, 0, 0) | 
| +  def __init__(self, parent, pid): | 
| +    super(Process, self).__init__('process %s' % pid, parent) | 
| self.pid = pid | 
| -    self._threads = [] | 
| +    self._threads = {} | 
| self._counters = {} | 
|  | 
| @property | 
| @@ -23,21 +23,23 @@ class Process(timeline_event.TimelineEvent): | 
| def counters(self): | 
| return self._counters | 
|  | 
| -  def GetThreadWithId(self, tid): | 
| -    for t in self.threads: | 
| -      if t.tid == tid: | 
| -        return t | 
| -    raise ValueError( | 
| -        'Thread with id %s not found in process with id %s.' % (tid, self.pid)) | 
| +  def IterChildContainers(self): | 
| +    for thread in self._threads.itervalues(): | 
| +      yield thread | 
| +    for counter in self._counters.itervalues(): | 
| +      yield counter | 
| + | 
| +  def IterEventsInThisContainer(self): | 
| +    return | 
| +    yield # pylint: disable=W0101 | 
|  | 
| def GetOrCreateThread(self, tid): | 
| -    try: | 
| -      return self.GetThreadWithId(tid) | 
| -    except ValueError: | 
| -      thread = tracing_thread.Thread(self, tid) | 
| -      self.children.append(thread) | 
| -      self._threads.append(thread) | 
| +    thread = self.threads.get(tid, None) | 
| +    if thread: | 
| return thread | 
| +    thread = tracing_thread.Thread(self, tid) | 
| +    self._threads[tid] = thread | 
| +    return thread | 
|  | 
| def GetCounter(self, category, name): | 
| counter_id = category + '.' + name | 
| @@ -54,11 +56,12 @@ class Process(timeline_event.TimelineEvent): | 
| self._counters[ctr.full_name] = ctr | 
| return ctr | 
|  | 
| -  def UpdateBounds(self): | 
| -    super(Process, self).UpdateBounds() | 
| -    for ctr in self.counters.itervalues(): | 
| -      ctr.UpdateBounds() | 
| +  def AutoCloseOpenSlices(self, max_timestamp): | 
| +    for thread in self._threads.itervalues(): | 
| +      thread.AutoCloseOpenSlices(max_timestamp) | 
|  | 
| def FinalizeImport(self): | 
| -    for thread in self._threads: | 
| +    for thread in self._threads.itervalues(): | 
| thread.FinalizeImport() | 
| +    for counter in self._counters.itervalues(): | 
| +      counter.FinalizeImport() | 
|  |