chromium/third_party/blink/web_tests/http/tests/misc/performance-entry-serializer.html

<!DOCTYPE html>
<script src="/w3c/resources/testharness.js"></script>
<script src="/w3c/resources/testharnessreport.js"></script>
<script>

test(function() {
    window.performance.mark('mark1');
    window.performance.mark('mark2');
    window.performance.measure('measure1', 'mark1', 'mark2');

    var entries = window.performance.getEntries();
    for (var i = 0; i < entries.length; i++) {
        var entry = entries[i];
        var serialized = JSON.parse(JSON.stringify(entry));
        for (var attr in entry) {
            if (typeof entry[attr] != 'function' &&
              // - PerformanceEntry.source is a Window object which is not
              //   serializable.
              // - Performance{Mark|Measure}.detail may be a live object
              !(entry[attr] instanceof Window) && attr !== 'detail') {
                var assertMethod = assert_equals
                if (Array.isArray(serialized[attr]) && Array.isArray(entry[attr])) {
                  assertMethod = assert_array_equals
                }
                assertMethod(serialized[attr], entry[attr], entry.constructor.name + '.' + attr);
            }
        }
    }
}, 'PerformanceEntry subclasses should serialize all attributes');

</script>