Example #1
0
 def Merge(self, other):
   for name, other_diagnostic in other.items():
     if name not in self:
       self[name] = other_diagnostic
       continue
     my_diagnostic = self[name]
     if my_diagnostic.CanAddDiagnostic(other_diagnostic):
       my_diagnostic.AddDiagnostic(other_diagnostic)
       continue
     self[name] = unmergeable_diagnostic_set.UnmergeableDiagnosticSet([
         my_diagnostic, other_diagnostic])
    def testMerge(self):
        events = related_event_set.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'],
                              ums.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'] = ums.UnmergeableDiagnosticSet(
            [events, generic2])
        hist.diagnostics.Merge(hist5.diagnostics)
        self.assertIsInstance(hist.diagnostics['a'],
                              ums.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])