blob: a62344c9ef352eada60f664b6b3b87a6952d198c [file] [edit]
<!DOCTYPE html>
<!--
Copyright 2017 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.
-->
<link rel="import" href="/tracing/value/diagnostics/diagnostic.html">
<script>
'use strict';
tr.exportTo('tr.v.d', function() {
class CollectedRelatedEventSet extends tr.v.d.Diagnostic {
constructor() {
super();
this.eventSetsByCanonicalUrl_ = new Map();
}
asDictInto_(d) {
d.events = {};
for (const [canonicalUrl, eventSet] of this) {
d.events[canonicalUrl] = [];
for (const event of eventSet) {
d.events[canonicalUrl].push({
stableId: event.stableId,
title: event.title,
start: event.start,
duration: event.duration
});
}
}
}
static deserialize(events, deserializer) {
return CollectedRelatedEventSet.fromDict({events});
}
serialize(serializer) {
const d = {};
this.asDictInto(d);
return d.events;
}
static fromDict(d) {
const result = new CollectedRelatedEventSet();
for (const [canonicalUrl, events] of Object.entries(d.events)) {
result.eventSetsByCanonicalUrl_.set(canonicalUrl, events.map(
e => new tr.v.d.EventRef(e)));
}
return result;
}
get size() {
return this.eventSetsByCanonicalUrl_.size;
}
get(canonicalUrl) {
return this.eventSetsByCanonicalUrl_.get(canonicalUrl);
}
* [Symbol.iterator]() {
for (const [canonicalUrl, eventSet] of this.eventSetsByCanonicalUrl_) {
yield [canonicalUrl, eventSet];
}
}
canAddDiagnostic(otherDiagnostic) {
return otherDiagnostic instanceof tr.v.d.RelatedEventSet ||
otherDiagnostic instanceof tr.v.d.CollectedRelatedEventSet;
}
addEventSetForCanonicalUrl(canonicalUrl, events) {
let myEventSet = this.eventSetsByCanonicalUrl_.get(canonicalUrl);
if (myEventSet === undefined) {
myEventSet = new Set();
this.eventSetsByCanonicalUrl_.set(canonicalUrl, myEventSet);
}
for (const event of events) {
myEventSet.add(event);
}
}
addDiagnostic(otherDiagnostic) {
if (otherDiagnostic instanceof tr.v.d.CollectedRelatedEventSet) {
// Merge Maps of Sets.
for (const [canonicalUrl, otherEventSet] of otherDiagnostic) {
this.addEventSetForCanonicalUrl(canonicalUrl, otherEventSet);
}
return;
}
if (!otherDiagnostic.canonicalUrl) return;
this.addEventSetForCanonicalUrl(
otherDiagnostic.canonicalUrl, otherDiagnostic);
}
}
tr.v.d.Diagnostic.register(CollectedRelatedEventSet, {
elementName: 'tr-v-ui-collected-related-event-set-span'
});
return {
CollectedRelatedEventSet,
};
});
</script>