Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  perftest_http3_lucasquicfetch.js   Sprache: JAVA

 
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
/* eslint-env node */

/*
Ensure the `--firefox.preference=network.http.http3.enable:true` is
set for this test.
*/


async function getNumLoaded(commands) {
  return commands.js.run(`
    let sum = 0;
    document.querySelectorAll("#imgContainer img").forEach(e => {
      sum += e.complete & e.naturalHeight != 0;
    });
    return sum;
  `);
}

async function waitForImgLoadEnd(
  prevCount,
  maxStableCount,
  timeout,
  commands,
  context
) {
  let starttime = await commands.js.run(`return performance.now();`);
  let endtime = await commands.js.run(`return performance.now();`);
  let changing = true;
  let newCount = -1;
  let stableCount = 0;

  while (
    ((await commands.js.run(`return performance.now();`)) - starttime <
      timeout) &
    changing
  ) {
    // Wait a bit before making another round
    await commands.wait.byTime(100);
    newCount = await getNumLoaded(commands);
    context.log.debug(`${newCount}, ${prevCount}, ${stableCount}`);

    // Check if we are approaching stability
    if (newCount == prevCount) {
      // Gather the end time now
      if (stableCount == 0) {
        endtime = await commands.js.run(`return performance.now();`);
      }
      stableCount++;
    } else {
      prevCount = newCount;
      stableCount = 0;
    }

    if (stableCount >= maxStableCount) {
      // Stability achieved
      changing = false;
    }
  }

  return {
    start: starttime,
    end: endtime,
    numResources: newCount,
  };
}

async function test(context, commands) {
  let rootUrl = "https://lucaspardue.com/quictilesfetch.html";
  let cycles = 5;

  if (
    (typeof context.options.browsertime !== "undefined") &
    (typeof context.options.browsertime.cycles !== "undefined")
  ) {
    cycles = context.options.browsertime.cycles;
  }

  // Make firefox learn of HTTP/3 server
  // XXX: Need to build an HTTP/3-specific conditioned profile
  // to handle these pre-navigations.
  await commands.navigate(rootUrl);

  let combos = [
    [100, 1],
    [100, 100],
    [300, 300],
  ];
  for (let cycle = 0; cycle < cycles; cycle++) {
    for (let combo = 0; combo < combos.length; combo++) {
      await commands.measure.start("pageload");
      await commands.navigate(rootUrl);
      await commands.measure.stop();
      let last = commands.measure.result.length - 1;
      commands.measure.result[last].browserScripts.pageinfo.url =
        `LucasQUIC (r=${combos[combo][0]}, p=${combos[combo][1]})`;

      // Set the input fields
      await commands.js.runAndWait(`
        document.querySelector("#maxReq").setAttribute(
          "value",
          ${combos[combo][0]}
        )
      `);
      await commands.js.runAndWait(`
        document.querySelector("#reqGroup").setAttribute(
          "value",
          ${combos[combo][1]}
        )
      `);

      // Start the test and wait for the images to finish loading
      commands.click.byJs(`document.querySelector("button")`);
      let results = await waitForImgLoadEnd(0, 40, 120000, commands, context);

      commands.measure.result[last].browserScripts.pageinfo.resourceLoadTime =
        results.end - results.start;
      commands.measure.result[last].browserScripts.pageinfo.imagesLoaded =
        results.numResources;
      commands.measure.result[last].browserScripts.pageinfo.imagesMissed =
        combos[combo][0] - results.numResources;
    }
  }
}

module.exports = {
  test,
  owner: "Network Team",
  name: "lq-fetch",
  component: "netwerk",
  description: "Measures the amount of time it takes to load a set of images.",
};

Messung V0.5
C=88 H=91 G=89

¤ Dauer der Verarbeitung: 0.17 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge