| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>window.performance User Timing mark() method is working properly</title>
- <link rel="author" title="Microsoft" href="http://www.microsoft.com/" />
- <link rel="help" href="http://w3c-test.org/webperf/specs/UserTiming/#dom-performance-mark"/>
- <script src="testharness.js"></script>
- <script src="testharnessreport.js"></script>
- <script src="webperftestharness.js"></script>
-
- <script src="../src/usertiming.js"></script>
- <script type="text/javascript">
- // test data
- var markTestDelay = 200;
- var testThreshold = 50;
- var marks;
-
- var TEST_MARKS =
- [
- {
- name: "mark1",
- expectedStartTime: undefined,
- entryMatch: undefined
- },
- {
- name: "mark1",
- expectedStartTime: undefined,
- entryMatch: undefined
- }
- ];
-
- setup({timeout:1000, explicit_done: true});
-
- test_namespace();
-
- function onload_test()
- {
- // test for existance of User Timing and Performance Timeline interface
- if (window.performance.mark == undefined ||
- window.performance.clearMarks == undefined ||
- window.performance.measure == undefined ||
- window.performance.clearMeasures == undefined ||
- window.performance.getEntriesByName == undefined ||
- window.performance.getEntriesByType == undefined ||
- window.performance.getEntries == undefined)
- {
- test_true(false,
- "The User Timing and Performance Timeline interfaces, which are required for this test, " +
- "are defined.");
-
- done();
- }
- else
- {
- // create first mark
- window.performance.mark(TEST_MARKS[0].name);
-
- // record the time that this mark is created; this should correspond to the mark's startTime
- TEST_MARKS[0].expectedStartTime = (new Date()) - window.performance.timing.navigationStart;
-
- // create the duplicate mark using the test delay; the duplicate mark's value should be equivalent to
- // the loadEventStart navigation timing attribute plus the test delay
- setTimeout(mark_test_cb, markTestDelay);
- }
- }
-
- function mark_test_cb()
- {
- var getByNameScenarios = new Array();
-
- // create second, duplicate mark
- window.performance.mark(TEST_MARKS[1].name);
-
- // record the time that this mark is created; this should correspond to the mark's startTime
- TEST_MARKS[1].expectedStartTime = (new Date()) - window.performance.timing.navigationStart;
-
- // test the test marks are returned by getEntriesByName
- entries = window.performance.getEntriesByName(TEST_MARKS[0].name);
- test_mark(entries[0],
- "window.performance.getEntriesByName(\"" + TEST_MARKS[0].name + "\")[0]",
- TEST_MARKS[0].name,
- TEST_MARKS[0].expectedStartTime);
- TEST_MARKS[0].entryMatch = entries[0];
-
- test_mark(entries[1],
- "window.performance.getEntriesByName(\"" + TEST_MARKS[1].name + "\")[1]",
- TEST_MARKS[1].name,
- TEST_MARKS[1].expectedStartTime);
- TEST_MARKS[1].entryMatch = entries[1];
-
- // test the test marks are returned by getEntriesByName with the entryType parameter provided
- entries = window.performance.getEntriesByName(TEST_MARKS[0].name, "mark");
- test_equals(entries[0].name, TEST_MARKS[0].name,
- "window.performance.getEntriesByName(\"" + TEST_MARKS[0].name + "\", \"mark\") returns an " +
- "object containing the \"" + TEST_MARKS[0].name + "\" mark in the correct order");
-
- test_equals(entries[1].name, TEST_MARKS[1].name,
- "window.performance.getEntriesByName(\"" + TEST_MARKS[1].name + "\", \"mark\") returns an " +
- "object containing the duplicate \"" + TEST_MARKS[1].name + "\" mark in the correct order");
-
- test_true(match_entries(entries[0], TEST_MARKS[0].entryMatch),
- "The \"" + TEST_MARKS[0].name + "\" mark returned by " +
- "window.performance.getEntriesByName(\"" + TEST_MARKS[0].name + "\", \"mark\") matches the " +
- "the \"" + TEST_MARKS[0].name + "\" mark returned by " +
- "window.performance.getEntriesByName(\"" + TEST_MARKS[0].name + "\")");
-
- test_true(match_entries(entries[1], TEST_MARKS[1].entryMatch),
- "The duplicate \"" + TEST_MARKS[1].name + "\" mark returned by " +
- "window.performance.getEntriesByName(\"" + TEST_MARKS[1].name + "\", \"mark\") matches the " +
- "the duplicate \"" + TEST_MARKS[1].name + "\" mark returned by " +
- "window.performance.getEntriesByName(\"" + TEST_MARKS[1].name + "\")");
-
- // test the test marks are returned by getEntries
- entries = get_test_entries(window.performance.getEntries(), "mark");
-
- test_equals(entries[0].name, TEST_MARKS[0].name,
- "window.performance.getEntries() returns an object containing the original \"" +
- TEST_MARKS[0].name + "\" mark in the correct order");
-
- test_equals(entries[1].name, TEST_MARKS[1].name,
- "window.performance.getEntries() returns an object containing the duplicate \"" +
- TEST_MARKS[1].name + "\" mark in the correct order");
-
- test_true(match_entries(entries[0], TEST_MARKS[0].entryMatch),
- "The \"" + TEST_MARKS[0].name + "\" mark returned by " +
- "window.performance.getEntries() matches the the \"" + TEST_MARKS[0].name + "\" mark returned " +
- "by window.performance.getEntriesByName(\"" + TEST_MARKS[0].name + "\")");
-
- test_true(match_entries(entries[1], TEST_MARKS[1].entryMatch),
- "The \"" + TEST_MARKS[1].name + "\" mark returned by " +
- "window.performance.getEntries() matches the the duplicate \"" + TEST_MARKS[1].name + "\" mark " +
- "returned by window.performance.getEntriesByName(\"" + TEST_MARKS[1].name + "\")");
-
- // test the test marks are returned by getEntriesByType
- entries = window.performance.getEntriesByType("mark");
-
- test_equals(entries[0].name, TEST_MARKS[0].name,
- "window.performance.getEntriesByType(\"mark\") returns an object containing the original \"" +
- TEST_MARKS[0].name + "\" mark in the correct order");
-
- test_equals(entries[1].name, TEST_MARKS[1].name,
- "window.performance.getEntriesByType(\"mark\") returns an object containing the duplicate \"" +
- TEST_MARKS[1].name + "\" mark in the correct order");
-
- test_true(match_entries(entries[0], TEST_MARKS[0].entryMatch),
- "The \"" + TEST_MARKS[0].name + "\" mark returned by " +
- "window.performance.getEntriesByType(\"mark\") matches the the \"" + TEST_MARKS[0].name +
- "\" mark returned by window.performance.getEntriesByName(\"" + TEST_MARKS[0].name + "\")");
-
- test_true(match_entries(entries[1], TEST_MARKS[1].entryMatch),
- "The \"" + TEST_MARKS[1].name + "\" mark returned by " +
- "window.performance.getEntriesByType(\"mark\") matches the the duplicate \"" +
- TEST_MARKS[1].name + "\" mark returned by window.performance.getEntriesByName(\"" +
- TEST_MARKS[1].name + "\")");
-
- done();
- }
-
- function match_entries(entry1, entry2)
- {
- var pass = true;
-
- // match name
- pass = pass && (entry1.name == entry2.name);
-
- // match startTime
- pass = pass && (entry1.startTime == entry2.startTime);
-
- // match entryType
- pass = pass && (entry1.entryType == entry2.entryType);
-
- // match duration
- pass = pass && (entry1.duration == entry2.duration);
-
- return pass;
- }
-
- function test_mark(markEntry, markEntryCommand, expectedName, expectedStartTime)
- {
- // test name
- test_equals(markEntry.name, expectedName, markEntryCommand + ".name == \"" + expectedName + "\"");
-
- // test startTime, allow for an acceptable threshold in the difference between the startTime and the
- // expected value for the startTime (loadEventStart + markTestDelay)
- test_true(Math.abs(markEntry.startTime - expectedStartTime) <= testThreshold,
- markEntryCommand + ".startTime ~== " + expectedStartTime + " (up to " + testThreshold +
- "ms difference allowed)");
-
- console.log("mes: " + markEntry.startTime);
- console.log("es: " + expectedStartTime);
- console.log("d: " + (markEntry.startTime - expectedStartTime));
-
- // verify entryType
- test_equals(markEntry.entryType, "mark", markEntryCommand + ".entryType == \"mark\"");
-
- // verify duration
- test_equals(markEntry.duration, 0, markEntryCommand + ".duration == 0");
- }
-
- function get_test_entries(entryList, entryType)
- {
- var testEntries = new Array();
-
- // filter entryList
- for (var i in entryList)
- {
- if (entryList[i].entryType == entryType)
- {
- testEntries.push(entryList[i]);
- }
- }
-
- return testEntries;
- }
- </script>
- </head>
- <body onload="onload_test();">
- <h1>Description</h1>
- <p>This test validates that the performance.mark() method is working properly. This test creates the
- following marks to test this method:
- <ul>
- <li>"mark1": created using a normal mark() call</li>
- <li>"mark1": duplicate of the first mark, used to confirm names can be re-used</li>
- </ul>
- After creating each mark, the existence of these marks is validated by calling
- performance.getEntriesByName() (both with and without the entryType parameter provided),
- performance.getEntriesByType(), and performance.getEntries()
- </p>
- <div id="log"></div>
- </body>
- </html>
|