Пример #1
0
    def testMerge(self):
        events = histogram.RelatedEventSet()
        events.Add({
            'stableId': '0.0',
            'title': 'foo',
            'start': 0,
            'duration': 1,
        })
        generic = generic_set.GenericSet(['generic diagnostic'])
        generic2 = generic_set.GenericSet(['generic diagnostic 2'])
        related_map = histogram.RelatedHistogramMap()
        related_map.Set('a', histogram.Histogram('histogram', 'count'))

        hist = histogram.Histogram('', 'count')

        # When Histograms are merged, first an empty clone is created with an empty
        # DiagnosticMap.
        hist2 = histogram.Histogram('', 'count')
        hist2.diagnostics['a'] = generic
        hist.diagnostics.Merge(hist2.diagnostics)
        self.assertIs(generic, hist.diagnostics['a'])

        # Separate keys are not merged.
        hist3 = histogram.Histogram('', 'count')
        hist3.diagnostics['b'] = generic2
        hist.diagnostics.Merge(hist3.diagnostics)
        self.assertIs(generic, hist.diagnostics['a'])
        self.assertIs(generic2, hist.diagnostics['b'])

        # Merging unmergeable diagnostics should produce an
        # UnmergeableDiagnosticSet.
        hist4 = histogram.Histogram('', 'count')
        hist4.diagnostics['a'] = related_map
        hist.diagnostics.Merge(hist4.diagnostics)
        self.assertIsInstance(hist.diagnostics['a'],
                              histogram.UnmergeableDiagnosticSet)
        diagnostics = list(hist.diagnostics['a'])
        self.assertIs(generic, diagnostics[0])
        self.assertIs(related_map, diagnostics[1])

        # UnmergeableDiagnosticSets are mergeable.
        hist5 = histogram.Histogram('', 'count')
        hist5.diagnostics['a'] = histogram.UnmergeableDiagnosticSet(
            [events, generic2])
        hist.diagnostics.Merge(hist5.diagnostics)
        self.assertIsInstance(hist.diagnostics['a'],
                              histogram.UnmergeableDiagnosticSet)
        diagnostics = list(hist.diagnostics['a'])
        self.assertIs(generic, diagnostics[0])
        self.assertIs(related_map, diagnostics[1])
        self.assertIs(events, diagnostics[2])
        self.assertIs(generic2, diagnostics[3])
Пример #2
0
    def testRelatedHistogramMap(self):
        a = histogram.Histogram('a', 'unitless')
        b = histogram.Histogram('b', 'unitless')
        c = histogram.Histogram('c', 'unitless')
        rhm = histogram.RelatedHistogramMap()
        rhm.Set('y', b)
        rhm.Set('z', c)
        a.diagnostics['rhm'] = rhm

        # Don't serialize c yet.
        hists = histogram_set.HistogramSet([a, b])
        hists2 = histogram_set.HistogramSet()
        hists2.ImportDicts(hists.AsDicts())
        hists2.ResolveRelatedHistograms()
        a2 = hists2.GetHistogramsNamed('a')
        self.assertEqual(len(a2), 1)
        a2 = a2[0]
        self.assertEqual(a2.guid, a.guid)
        self.assertIsInstance(a2, histogram.Histogram)
        self.assertIsNot(a2, a)
        b2 = hists2.GetHistogramsNamed('b')
        self.assertEqual(len(b2), 1)
        b2 = b2[0]
        self.assertEqual(b2.guid, b.guid)
        self.assertIsInstance(b2, histogram.Histogram)
        self.assertIsNot(b2, b)
        rhm2 = a2.diagnostics['rhm']
        self.assertIsInstance(rhm2, histogram.RelatedHistogramMap)
        self.assertEqual(len(rhm2), 2)

        # Assert that b and c are in a2's RelatedHistogramMap, rhm2.
        self.assertIs(b2, rhm2.Get('y'))
        self.assertIsInstance(rhm2.Get('z'), histogram.HistogramRef)

        # Now serialize c and add it to hists2.
        hists2.ImportDicts([c.AsDict()])
        hists2.ResolveRelatedHistograms()

        c2 = hists2.GetHistogramsNamed('c')
        self.assertEqual(len(c2), 1)
        c2 = c2[0]
        self.assertEqual(c2.guid, c.guid)
        self.assertIsNot(c2, c)

        self.assertIs(b2, rhm2.Get('y'))
        self.assertIs(c2, rhm2.Get('z'))