def testMerge(self): events = histogram.RelatedEventSet() events.Add({ 'stableId': '0.0', 'title': 'foo', 'start': 0, 'duration': 1, }) generic = histogram.Generic('generic diagnostic') generic2 = histogram.Generic('generic diagnostic 2') related_set = histogram.RelatedHistogramSet([ 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, hist, hist2) self.assertIs(generic, hist.diagnostics['a']) # Separate keys are not merged. hist3 = histogram.Histogram('', 'count') hist3.diagnostics['b'] = generic2 hist.diagnostics.Merge(hist3.diagnostics, hist, hist3) 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_set hist.diagnostics.Merge(hist4.diagnostics, hist, hist4) self.assertIsInstance(hist.diagnostics['a'], histogram.UnmergeableDiagnosticSet) diagnostics = list(hist.diagnostics['a']) self.assertIs(generic, diagnostics[0]) self.assertIs(related_set, diagnostics[1]) # UnmergeableDiagnosticSets are mergeable. hist5 = histogram.Histogram('', 'count') hist5.diagnostics['a'] = histogram.UnmergeableDiagnosticSet( [events, generic2]) hist.diagnostics.Merge(hist5.diagnostics, hist, hist5) self.assertIsInstance(hist.diagnostics['a'], histogram.UnmergeableDiagnosticSet) diagnostics = list(hist.diagnostics['a']) self.assertIs(generic, diagnostics[0]) self.assertIs(related_set, diagnostics[1]) self.assertIs(events, diagnostics[2]) self.assertIs(generic2, diagnostics[3])
def testRelatedHistogramSet(self): a = histogram.Histogram('a', 'unitless') b = histogram.Histogram('b', 'unitless') c = histogram.Histogram('c', 'unitless') a.diagnostics['rhs'] = histogram.RelatedHistogramSet([b, c]) # Don't serialize c yet. hists = histogram.HistogramSet([a, b]) hists2 = histogram.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) rhs2 = a2.diagnostics['rhs'] self.assertIsInstance(rhs2, histogram.RelatedHistogramSet) self.assertEqual(len(rhs2), 2) # Assert that b and c are in a2's RelatedHistogramSet, rhs2. rhs2hs = list(rhs2) rhs2guids = [h.guid for h in rhs2hs] b2i = rhs2guids.index(b.guid) self.assertIs(rhs2hs[b2i], b2) c2i = rhs2guids.index(c.guid) self.assertIsInstance(rhs2hs[c2i], 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) rhs2hs = list(rhs2) rhs2guids = [h.guid for h in rhs2hs] b2i = rhs2guids.index(b.guid) c2i = rhs2guids.index(c.guid) self.assertIs(b2, rhs2hs[b2i]) self.assertIs(c2, rhs2hs[c2i])