Skip to content

Instantly share code, notes, and snippets.

@nicjansma
Last active May 30, 2020 21:23
Show Gist options
  • Select an option

  • Save nicjansma/6f3209a53079f483abb5226156a2054b to your computer and use it in GitHub Desktop.

Select an option

Save nicjansma/6f3209a53079f483abb5226156a2054b to your computer and use it in GitHub Desktop.

Revisions

  1. nicjansma revised this gist Sep 9, 2019. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion resourcetiming-parent.js
    Original file line number Diff line number Diff line change
    @@ -10,10 +10,11 @@ window.addEventListener("message", function(event) {
    // RT entries are JSON.stringify'd
    var entries = JSON.parse(event.data.entries);
    var myOrigin = window.performance.timeOrigin || window.performance.timing.navigationStart;
    var offsetTime = event.data.origin - myOrigin;

    // update each entry's startTime by the offset of the two frame's time origins
    for (var i = 0; i < entries.length; i++) {
    entries[i].startTime += (event.data.origin - myOrigin);
    entries[i].startTime += offsetTime;
    }

    Array.prototype.push.apply(iframeEntries, entries);
  2. nicjansma revised this gist Mar 26, 2018. 2 changed files with 5 additions and 1 deletion.
    4 changes: 4 additions & 0 deletions resourcetiming-iframe.js
    Original file line number Diff line number Diff line change
    @@ -2,6 +2,10 @@
    // Placed in any cross-origin IFRAMEs
    //
    if (window !== window.top) {
    if (typeof window.PerformanceObserver !== "function") {
    return;
    }

    // Listen for all ResourceTimings, repeating them to the parent window
    var observer = new PerformanceObserver(function(entries) {
    window.top.postMessage({
    2 changes: 1 addition & 1 deletion resourcetiming-parent.js
    Original file line number Diff line number Diff line change
    @@ -16,6 +16,6 @@ window.addEventListener("message", function(event) {
    entries[i].startTime += (event.data.origin - myOrigin);
    }

    iframeEntries = iframeEntries.concat(entries);
    Array.prototype.push.apply(iframeEntries, entries);
    }
    }, false);
  3. nicjansma created this gist Mar 21, 2018.
    22 changes: 22 additions & 0 deletions resourcetiming-iframe.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    //
    // Placed in any cross-origin IFRAMEs
    //
    if (window !== window.top) {
    // Listen for all ResourceTimings, repeating them to the parent window
    var observer = new PerformanceObserver(function(entries) {
    window.top.postMessage({
    type: "resourcetiming",
    entries: JSON.stringify(entries.getEntries()),
    origin: window.performance.timeOrigin || window.performance.timing.navigationStart
    }, "*");
    });

    observer.observe({entryTypes: ['resource']});

    // repeat any sub-frame's ResourceTiming data
    window.addEventListener("message", function(event) {
    if (event.data && event.data.type === "resourcetiming") {
    window.top.postMessage(event.data, "*");
    }
    }, false);
    }
    21 changes: 21 additions & 0 deletions resourcetiming-parent.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    //
    // Placed in the top-level window
    //

    // list of all ResourceTimings from cross-origin IFRAMEs
    var iframeEntries = [];

    window.addEventListener("message", function(event) {
    if (event.data && event.data.type === "resourcetiming") {
    // RT entries are JSON.stringify'd
    var entries = JSON.parse(event.data.entries);
    var myOrigin = window.performance.timeOrigin || window.performance.timing.navigationStart;

    // update each entry's startTime by the offset of the two frame's time origins
    for (var i = 0; i < entries.length; i++) {
    entries[i].startTime += (event.data.origin - myOrigin);
    }

    iframeEntries = iframeEntries.concat(entries);
    }
    }, false);