blob: abd4037020579639c4a3d3691e4ce462401d4723 [file] [edit]
# Copyright 2019 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.
import unittest
from tracing.value import histogram
from tracing.value import histogram_serializer
from tracing.value.diagnostics import breakdown
from tracing.value.diagnostics import generic_set
from tracing.value.diagnostics import related_event_set
from tracing.value.diagnostics import related_name_map
class HistogramSerializerUnittest(unittest.TestCase):
def testObjects(self):
serializer = histogram_serializer.HistogramSerializer()
self.assertEqual(0, serializer.GetOrAllocateId('a'))
self.assertEqual(1, serializer.GetOrAllocateId(['b']))
self.assertEqual(0, serializer.GetOrAllocateId('a'))
self.assertEqual(1, serializer.GetOrAllocateId(['b']))
def testDiagnostics(self):
serializer = histogram_serializer.HistogramSerializer()
self.assertEqual(0, serializer.GetOrAllocateDiagnosticId(
'a', generic_set.GenericSet(['b'])))
self.assertEqual(1, serializer.GetOrAllocateDiagnosticId(
'a', generic_set.GenericSet(['c'])))
self.assertEqual(0, serializer.GetOrAllocateDiagnosticId(
'a', generic_set.GenericSet(['b'])))
self.assertEqual(1, serializer.GetOrAllocateDiagnosticId(
'a', generic_set.GenericSet(['c'])))
def testSerialize(self):
hist = histogram.Histogram('aaa', 'count_biggerIsBetter')
hist.description = 'lorem ipsum'
hist.diagnostics['bbb'] = related_name_map.RelatedNameMap({
'ccc': 'a:c',
'ddd': 'a:d',
})
hist.diagnostics['hhh'] = generic_set.GenericSet(['ggg'])
hist.AddSample(0, {
'bbb': breakdown.Breakdown.FromEntries({
'ccc': 100,
'ddd': 200,
}),
'eee': related_event_set.RelatedEventSet([{
'stableId': 'fff',
'title': 'ggg',
'start': 500,
'duration': 600,
}]),
})
data = histogram_serializer.Serialize([hist])
serializer_objects = data[0]
diagnostics = data[1]
self.assertIn('Breakdown', diagnostics)
self.assertIn('bbb', diagnostics['Breakdown'])
_, breakdown_indexes = list(
diagnostics['Breakdown']['bbb'].items())[0]
name_indexes = serializer_objects[breakdown_indexes[1]]
self.assertEqual(
[
serializer_objects[breakdown_indexes[0]],
[serializer_objects[i] for i in name_indexes],
breakdown_indexes[2],
breakdown_indexes[3]
],
['', ['ccc', 'ddd'], 100, 200]
)
self.assertIn('GenericSet', diagnostics)
self.assertIn('hhh', diagnostics['GenericSet'])
_, added_diagnostic = list(
diagnostics['GenericSet']['hhh'].items())[0]
self.assertEqual(serializer_objects[added_diagnostic], 'ggg')
self.assertIn('statisticsNames', diagnostics['GenericSet'])
_, stat_indexes = list(
diagnostics['GenericSet']['statisticsNames'].items())[0]
self.assertEqual(
['avg', 'count', 'max', 'min', 'std', 'sum'],
[serializer_objects[i] for i in stat_indexes]
)
self.assertIn('description', diagnostics['GenericSet'])
_, description_index = list(
diagnostics['GenericSet']['description'].items())[0]
self.assertEqual(serializer_objects[description_index], 'lorem ipsum')
self.assertIn('RelatedEventSet', diagnostics)
self.assertIn('eee', diagnostics['RelatedEventSet'])
_, event_set_values = list(
diagnostics['RelatedEventSet']['eee'].items())[0]
self.assertEqual(
[
event_set_values[0][0],
serializer_objects[event_set_values[0][1]],
event_set_values[0][2],
event_set_values[0][3]
],
['fff', 'ggg', 500, 600]
)
self.assertIn('RelatedNameMap', diagnostics)
self.assertIn('bbb', diagnostics['RelatedNameMap'])
_, relative_name_values = list(
diagnostics['RelatedNameMap']['bbb'].items())[0]
name_indexes = relative_name_values[0]
self.assertEqual(
[
[serializer_objects[i] for i in serializer_objects[name_indexes]],
serializer_objects[relative_name_values[1]],
serializer_objects[relative_name_values[2]]
],
[['ccc', 'ddd'], 'a:c', 'a:d']
)
histograms = data[2:]
self.assertEqual(
histograms[0],
[
0,
'count+',
1,
[0, 1, 2, 3],
[1, 0, None, 0, 0, 0, 0],
{0: [1, [None, 4, 5]]},
0,
]
)