blob: 590ea5c22cc3eb4a2b936e70ce7a85039031d5ac [file] [edit]
# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from six.moves import zip # pylint: disable=redefined-builtin
from tracing.value.diagnostics import diagnostic
class RelatedEventSet(diagnostic.Diagnostic):
__slots__ = ('_events_by_stable_id',)
def __init__(self, events=()):
super(RelatedEventSet, self).__init__()
self._events_by_stable_id = {}
for e in events:
self.Add(e)
def __eq__(self, other):
if len(self) != len(other):
return False
for event in self:
if event['stableId'] not in other._events_by_stable_id:
return False
return True
def Add(self, event):
self._events_by_stable_id[event['stableId']] = event
def __len__(self):
return len(self._events_by_stable_id)
def __iter__(self):
for event in self._events_by_stable_id.values():
yield event
@staticmethod
def Deserialize(data, deserializer):
events = RelatedEventSet()
for event in data:
event[1] = deserializer.GetObject(event[1])
events.Add(
dict(list(zip(['stableId', 'title', 'start', 'duration'], event))))
return events
@staticmethod
def FromDict(dct):
result = RelatedEventSet()
for event in dct['events']:
result.Add(event)
return result
@staticmethod
def FromProto(d):
raise NotImplementedError()
def Serialize(self, serializer):
return [
[
e['stableId'],
serializer.GetOrAllocateId(e['title']),
e['start'],
e['duration'],
]
for e in self]
def _AsDictInto(self, d):
d['events'] = list(self)
def _AsProto(self):
raise NotImplementedError()