OLD | NEW |
1 # Copyright 2017 The Chromium Authors. All rights reserved. | 1 # Copyright 2017 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import datetime | 5 import datetime |
6 import json | 6 import json |
7 import math | 7 import math |
8 import random | 8 import random |
9 import uuid | 9 import uuid |
10 | 10 |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 class HistogramRef(object): | 489 class HistogramRef(object): |
490 | 490 |
491 def __init__(self, guid): | 491 def __init__(self, guid): |
492 self._guid = guid | 492 self._guid = guid |
493 | 493 |
494 @property | 494 @property |
495 def guid(self): | 495 def guid(self): |
496 return self._guid | 496 return self._guid |
497 | 497 |
498 | 498 |
499 class RelatedHistogramSet(diagnostic.Diagnostic): | |
500 | |
501 def __init__(self, histograms=()): | |
502 super(RelatedHistogramSet, self).__init__() | |
503 self._histograms_by_guid = {} | |
504 for hist in histograms: | |
505 self.Add(hist) | |
506 | |
507 def Add(self, hist): | |
508 assert isinstance(hist, (Histogram, HistogramRef)) | |
509 assert not self.Has(hist) | |
510 self._histograms_by_guid[hist.guid] = hist | |
511 | |
512 def Has(self, hist): | |
513 return hist.guid in self._histograms_by_guid | |
514 | |
515 def __len__(self): | |
516 return len(self._histograms_by_guid) | |
517 | |
518 def __iter__(self): | |
519 for hist in self._histograms_by_guid.itervalues(): | |
520 yield hist | |
521 | |
522 def Resolve(self, histograms, required=False): | |
523 for hist in self: | |
524 if isinstance(hist, Histogram): | |
525 continue | |
526 guid = hist.guid | |
527 hist = histograms.LookupHistogram(guid) | |
528 if isinstance(hist, Histogram): | |
529 self._histograms_by_guid[guid] = hist | |
530 else: | |
531 assert not required, guid | |
532 | |
533 def _AsDictInto(self, d): | |
534 d['guids'] = [] | |
535 for hist in self: | |
536 d['guids'].append(hist.guid) | |
537 | |
538 @staticmethod | |
539 def FromDict(d): | |
540 return RelatedHistogramSet(HistogramRef(guid) for guid in d['guids']) | |
541 | |
542 | |
543 class RelatedHistogramMap(diagnostic.Diagnostic): | 499 class RelatedHistogramMap(diagnostic.Diagnostic): |
544 | 500 |
545 def __init__(self): | 501 def __init__(self): |
546 super(RelatedHistogramMap, self).__init__() | 502 super(RelatedHistogramMap, self).__init__() |
547 self._histograms_by_name = {} | 503 self._histograms_by_name = {} |
548 | 504 |
549 def Get(self, name): | 505 def Get(self, name): |
550 return self._histograms_by_name.get(name) | 506 return self._histograms_by_name.get(name) |
551 | 507 |
552 def Set(self, name, hist): | 508 def Set(self, name, hist): |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
947 | 903 |
948 def AsDict(self): | 904 def AsDict(self): |
949 dct = {} | 905 dct = {} |
950 for name, diag in self.iteritems(): | 906 for name, diag in self.iteritems(): |
951 dct[name] = diag.AsDictOrReference() | 907 dct[name] = diag.AsDictOrReference() |
952 return dct | 908 return dct |
953 | 909 |
954 def Merge(self, other, parent_hist, other_parent_hist): | 910 def Merge(self, other, parent_hist, other_parent_hist): |
955 merged_from = self.get(reserved_infos.MERGED_FROM.name) | 911 merged_from = self.get(reserved_infos.MERGED_FROM.name) |
956 if merged_from is None: | 912 if merged_from is None: |
957 merged_from = RelatedHistogramSet() | 913 merged_from = RelatedHistogramMap() |
958 self[reserved_infos.MERGED_FROM.name] = merged_from | 914 self[reserved_infos.MERGED_FROM.name] = merged_from |
959 merged_from.Add(other_parent_hist) | 915 merged_from.Set(len(merged_from), other_parent_hist) |
960 | 916 |
961 for name, other_diagnostic in other.iteritems(): | 917 for name, other_diagnostic in other.iteritems(): |
962 if name not in self: | 918 if name not in self: |
963 self[name] = other_diagnostic | 919 self[name] = other_diagnostic |
964 continue | 920 continue |
965 my_diagnostic = self[name] | 921 my_diagnostic = self[name] |
966 if my_diagnostic.CanAddDiagnostic( | 922 if my_diagnostic.CanAddDiagnostic( |
967 other_diagnostic, name, parent_hist, other_parent_hist): | 923 other_diagnostic, name, parent_hist, other_parent_hist): |
968 my_diagnostic.AddDiagnostic( | 924 my_diagnostic.AddDiagnostic( |
969 other_diagnostic, name, parent_hist, other_parent_hist) | 925 other_diagnostic, name, parent_hist, other_parent_hist) |
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1577 'W': HistogramBinBoundaries.CreateExponential(1e-3, 1, 50), | 1533 'W': HistogramBinBoundaries.CreateExponential(1e-3, 1, 50), |
1578 'unitless': HistogramBinBoundaries.CreateExponential(1e-3, 1e3, 50), | 1534 'unitless': HistogramBinBoundaries.CreateExponential(1e-3, 1e3, 50), |
1579 'count': HistogramBinBoundaries.CreateExponential(1, 1e3, 20), | 1535 'count': HistogramBinBoundaries.CreateExponential(1, 1e3, 20), |
1580 'sigma': HistogramBinBoundaries.CreateLinear(-5, 5, 50), | 1536 'sigma': HistogramBinBoundaries.CreateLinear(-5, 5, 50), |
1581 } | 1537 } |
1582 | 1538 |
1583 | 1539 |
1584 all_diagnostics.DIAGNOSTICS_BY_NAME.update({ | 1540 all_diagnostics.DIAGNOSTICS_BY_NAME.update({ |
1585 'Breakdown': Breakdown, | 1541 'Breakdown': Breakdown, |
1586 'GenericSet': GenericSet, | 1542 'GenericSet': GenericSet, |
1587 'RelatedHistogramSet': RelatedHistogramSet, | |
1588 'UnmergeableDiagnosticSet': UnmergeableDiagnosticSet, | 1543 'UnmergeableDiagnosticSet': UnmergeableDiagnosticSet, |
1589 'RelatedEventSet': RelatedEventSet, | 1544 'RelatedEventSet': RelatedEventSet, |
1590 'BuildbotInfo': BuildbotInfo, | 1545 'BuildbotInfo': BuildbotInfo, |
1591 'DateRange': DateRange, | 1546 'DateRange': DateRange, |
1592 'TagMap': TagMap, | 1547 'TagMap': TagMap, |
1593 'RelatedHistogramBreakdown': RelatedHistogramBreakdown, | 1548 'RelatedHistogramBreakdown': RelatedHistogramBreakdown, |
1594 'TelemetryInfo': TelemetryInfo, | 1549 'TelemetryInfo': TelemetryInfo, |
1595 'RelatedHistogramMap': RelatedHistogramMap, | 1550 'RelatedHistogramMap': RelatedHistogramMap, |
1596 }) | 1551 }) |
OLD | NEW |