[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
commit-queue at webkit.org
commit-queue at webkit.org
Wed Dec 22 15:28:11 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit d63bb0a96fa388ff156830351b8d059812d956ea
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Nov 4 08:36:17 2010 +0000
2010-11-04 James Simonsen <simonjam at chromium.org>
Reviewed by Darin Fisher.
[Web Timing] Implement dom* timing marks
https://bugs.webkit.org/show_bug.cgi?id=46301
* fast/dom/Window/window-properties-performance-expected.txt:
* fast/dom/script-tests/webtiming-async.js: Added.
* fast/dom/script-tests/webtiming-defer.js: Added.
* fast/dom/script-tests/webtiming-document-open.js: Added.
(testTimingWithDocumentOpen):
* fast/dom/script-tests/webtiming-navigate-within-document.js:
(checkTimingNotChanged): Added dom timing.
* fast/dom/script-tests/webtiming.js:
(checkTimingBeforeLoad): Added dom timing.
(checkTimingWhileDeferred): Added.
(checkWebTimingWhileAsync): Added.
(checkWebTimingOnLoad): Added dom timing.
(checkWebTimingAfterLoad): Added dom timing.
* fast/dom/webtiming-document-open-expected.txt: Added.
* fast/dom/webtiming-document-open.html: Added.
* fast/dom/webtiming-expected.txt:
* fast/dom/webtiming-navigate-within-document-expected.txt:
* fast/dom/webtiming.html: Added async and defer tests.
* platform/mac/Skipped: Skip new webtiming test.
2010-11-04 James Simonsen <simonjam at chromium.org>
Reviewed by Darin Fisher.
[Web Timing] Implement dom* timing marks
https://bugs.webkit.org/show_bug.cgi?id=46301
Test: fast/dom/webtiming-document-open.html
* GNUmakefile.am: Added DocumentTiming.h
* WebCore.gypi: Ditto.
* WebCore.vcproj/WebCore.vcproj: Ditto.
* WebCore.xcodeproj/project.pbxproj: Ditto.
* dom/Document.cpp:
(WebCore::Document::setReadyState): Set DOM WebTiming marks.
(WebCore::Document::finishedParsing): Set DOM WebTiming marks.
* dom/Document.h:
(WebCore::Document::timing): Added.
* dom/DocumentTiming.h: Added.
(WebCore::DocumentTiming::DocumentTiming):
* page/Timing.cpp: Added DOM timing.
(WebCore::Timing::domLoading): Ditto.
(WebCore::Timing::domInteractive): Ditto.
(WebCore::Timing::domContentLoaded): Ditto.
(WebCore::Timing::domComplete): Ditto.
(WebCore::Timing::documentTiming): Ditto.
* page/Timing.h: Ditto.
* page/Timing.idl: Ditto.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71313 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 55f081a..8221811 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,30 @@
+2010-11-04 James Simonsen <simonjam at chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Web Timing] Implement dom* timing marks
+ https://bugs.webkit.org/show_bug.cgi?id=46301
+
+ * fast/dom/Window/window-properties-performance-expected.txt:
+ * fast/dom/script-tests/webtiming-async.js: Added.
+ * fast/dom/script-tests/webtiming-defer.js: Added.
+ * fast/dom/script-tests/webtiming-document-open.js: Added.
+ (testTimingWithDocumentOpen):
+ * fast/dom/script-tests/webtiming-navigate-within-document.js:
+ (checkTimingNotChanged): Added dom timing.
+ * fast/dom/script-tests/webtiming.js:
+ (checkTimingBeforeLoad): Added dom timing.
+ (checkTimingWhileDeferred): Added.
+ (checkWebTimingWhileAsync): Added.
+ (checkWebTimingOnLoad): Added dom timing.
+ (checkWebTimingAfterLoad): Added dom timing.
+ * fast/dom/webtiming-document-open-expected.txt: Added.
+ * fast/dom/webtiming-document-open.html: Added.
+ * fast/dom/webtiming-expected.txt:
+ * fast/dom/webtiming-navigate-within-document-expected.txt:
+ * fast/dom/webtiming.html: Added async and defer tests.
+ * platform/mac/Skipped: Skip new webtiming test.
+
2010-11-03 Roland Steiner <rolandsteiner at chromium.org>
Unreviewed: add new entry to Chromium test_expectations.txt
diff --git a/LayoutTests/fast/dom/Window/window-properties-performance-expected.txt b/LayoutTests/fast/dom/Window/window-properties-performance-expected.txt
index 146fd55..8bbabb0 100644
--- a/LayoutTests/fast/dom/Window/window-properties-performance-expected.txt
+++ b/LayoutTests/fast/dom/Window/window-properties-performance-expected.txt
@@ -13,6 +13,10 @@ window.webkitPerformance.navigation.type [number]
window.webkitPerformance.timing [object Timing]
window.webkitPerformance.timing.connectEnd [number]
window.webkitPerformance.timing.connectStart [number]
+window.webkitPerformance.timing.domComplete [number]
+window.webkitPerformance.timing.domContentLoaded [number]
+window.webkitPerformance.timing.domInteractive [number]
+window.webkitPerformance.timing.domLoading [number]
window.webkitPerformance.timing.domainLookupEnd [number]
window.webkitPerformance.timing.domainLookupStart [number]
window.webkitPerformance.timing.fetchStart [number]
diff --git a/LayoutTests/fast/dom/script-tests/webtiming-async.js b/LayoutTests/fast/dom/script-tests/webtiming-async.js
new file mode 100644
index 0000000..ac336db
--- /dev/null
+++ b/LayoutTests/fast/dom/script-tests/webtiming-async.js
@@ -0,0 +1 @@
+checkWebTimingWhileAsync();
diff --git a/LayoutTests/fast/dom/script-tests/webtiming-defer.js b/LayoutTests/fast/dom/script-tests/webtiming-defer.js
new file mode 100644
index 0000000..1f89c53
--- /dev/null
+++ b/LayoutTests/fast/dom/script-tests/webtiming-defer.js
@@ -0,0 +1 @@
+checkTimingWhileDeferred();
diff --git a/LayoutTests/fast/dom/script-tests/webtiming-document-open.js b/LayoutTests/fast/dom/script-tests/webtiming-document-open.js
new file mode 100644
index 0000000..d0679a2
--- /dev/null
+++ b/LayoutTests/fast/dom/script-tests/webtiming-document-open.js
@@ -0,0 +1,40 @@
+var performance = window.webkitPerformance || {};
+var navigation = performance.navigation || {};
+var timing = performance.timing || {};
+var originalTiming = {};
+
+window.addEventListener("load", testTimingWithDocumentOpen, false);
+
+function testTimingWithDocumentOpen()
+{
+ for (property in timing) {
+ originalTiming[property] = timing[property];
+ }
+
+ document.open();
+ document.write("<html>");
+ document.write("<head>");
+ document.write("<link rel=\"stylesheet\" href=\"../js/resources/js-test-style.css\">");
+ document.write("<script src=\"../js/resources/js-test-pre.js\"></script>");
+ document.write("</head>");
+ document.write("<body>");
+ document.write("<p id=\"description\"></p>");
+ document.write("<div id=\"console\"></div>");
+ document.write("<script src=\"../js/resources/js-test-post.js\"></script>");
+ document.write("</body>");
+ document.write("</html>");
+ document.close();
+
+ description("This test verifies that the NavigationTimings don't change after a document.open().");
+
+ keys = Object.keys(timing).sort();
+ for (var i = 0; i < keys.length; ++i) {
+ shouldBe("timing." + keys[i], "originalTiming." + keys[i]);
+ }
+
+ finishJSTest();
+}
+
+jsTestIsAsync = true;
+
+var successfullyParsed = true;
diff --git a/LayoutTests/fast/dom/script-tests/webtiming-navigate-within-document.js b/LayoutTests/fast/dom/script-tests/webtiming-navigate-within-document.js
index ab583bd..b635305 100644
--- a/LayoutTests/fast/dom/script-tests/webtiming-navigate-within-document.js
+++ b/LayoutTests/fast/dom/script-tests/webtiming-navigate-within-document.js
@@ -5,7 +5,9 @@ var timing = performance.timing || {};
function checkTimingNotChanged()
{
- for (var property in timing) {
+ properties = Object.keys(timing).sort();
+ for (var i = 0; i < properties.length; ++i) {
+ property = properties[i];
if (timing[property] === initialTiming[property])
testPassed(property + " is unchanged.");
else
diff --git a/LayoutTests/fast/dom/script-tests/webtiming.js b/LayoutTests/fast/dom/script-tests/webtiming.js
index bae2134..29b206f 100644
--- a/LayoutTests/fast/dom/script-tests/webtiming.js
+++ b/LayoutTests/fast/dom/script-tests/webtiming.js
@@ -38,6 +38,82 @@ function checkTimingBeforeLoad()
shouldBe("timing.responseStart", "timing.requestEnd");
+ shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart");
+ shouldBe("timing.domInteractive", "0");
+ shouldBe("timing.domContentLoaded", "0");
+ shouldBe("timing.domComplete", "0");
+
+ shouldBe("timing.loadEventStart", "0");
+ shouldBe("timing.loadEventEnd", "0");
+}
+
+function checkTimingWhileDeferred()
+{
+ shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC");
+
+ shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.navigationStart");
+
+ shouldBe("timing.redirectStart", "0");
+ shouldBe("timing.redirectEnd", "0");
+ shouldBe("navigation.redirectCount", "0");
+
+ shouldBeGreaterThanOrEqual("timing.fetchStart", "timing.navigationStart");
+
+ shouldBeGreaterThanOrEqual("timing.domainLookupStart", "timing.fetchStart");
+ shouldBeGreaterThanOrEqual("timing.domainLookupEnd", "timing.domainLookupStart");
+
+ shouldBeGreaterThanOrEqual("timing.connectStart", "timing.domainLookupEnd");
+ shouldBeGreaterThanOrEqual("timing.connectEnd", "timing.connectStart");
+
+ shouldBeGreaterThanOrEqual("timing.requestStart", "timing.connectEnd");
+ shouldBeGreaterThanOrEqual("timing.requestEnd", "timing.requestStart");
+
+ shouldBe("timing.responseStart", "timing.requestEnd");
+
+ shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart");
+ shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.domLoading");
+ shouldBe("timing.domContentLoaded", "0");
+ shouldBe("timing.domComplete", "0");
+
+ shouldBe("timing.loadEventStart", "0");
+ shouldBe("timing.loadEventEnd", "0");
+
+ var body = document.getElementsByTagName("body")[0];
+ var script = document.createElement("script");
+ script.async = true;
+ script.type = "text/javascript";
+ script.src = "script-tests/webtiming-async.js";
+ body.appendChild(script);
+}
+
+function checkWebTimingWhileAsync()
+{
+ shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC");
+
+ shouldBeGreaterThanOrEqual("timing.unloadEventEnd", "timing.navigationStart");
+
+ shouldBe("timing.redirectStart", "0");
+ shouldBe("timing.redirectEnd", "0");
+ shouldBe("navigation.redirectCount", "0");
+
+ shouldBeGreaterThanOrEqual("timing.fetchStart", "timing.navigationStart");
+
+ shouldBeGreaterThanOrEqual("timing.domainLookupStart", "timing.fetchStart");
+ shouldBeGreaterThanOrEqual("timing.domainLookupEnd", "timing.domainLookupStart");
+
+ shouldBeGreaterThanOrEqual("timing.connectStart", "timing.domainLookupEnd");
+ shouldBeGreaterThanOrEqual("timing.connectEnd", "timing.connectStart");
+
+ shouldBeGreaterThanOrEqual("timing.requestStart", "timing.connectEnd");
+ shouldBeGreaterThanOrEqual("timing.requestEnd", "timing.requestStart");
+
+ shouldBe("timing.responseStart", "timing.requestEnd");
+
+ shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart");
+ shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.responseEnd");
+ shouldBeGreaterThanOrEqual("timing.domContentLoaded", "timing.domInteractive");
+ shouldBe("timing.domComplete", "0");
+
shouldBe("timing.loadEventStart", "0");
shouldBe("timing.loadEventEnd", "0");
@@ -68,6 +144,11 @@ function checkWebTimingOnLoad()
shouldBe("timing.responseStart", "timing.requestEnd");
shouldBeGreaterThanOrEqual("timing.responseEnd", "timing.responseStart");
+ shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart");
+ shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.responseEnd");
+ shouldBeGreaterThanOrEqual("timing.domContentLoaded", "timing.domInteractive");
+ shouldBeGreaterThanOrEqual("timing.domComplete", "timing.domContentLoaded");
+
shouldBeGreaterThanOrEqual("timing.loadEventStart", "timing.responseEnd");
shouldBe("timing.loadEventEnd", "0");
@@ -98,6 +179,11 @@ function checkWebTimingAfterLoad()
shouldBe("timing.responseStart", "timing.requestEnd");
shouldBeGreaterThanOrEqual("timing.responseEnd", "timing.responseStart");
+ shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart");
+ shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.responseEnd");
+ shouldBeGreaterThanOrEqual("timing.domContentLoaded", "timing.domInteractive");
+ shouldBeGreaterThanOrEqual("timing.domComplete", "timing.domContentLoaded");
+
shouldBeGreaterThanOrEqual("timing.loadEventStart", "timing.responseEnd");
shouldBeGreaterThanOrEqual("timing.loadEventEnd", "timing.loadEventStart + 50");
diff --git a/LayoutTests/fast/dom/webtiming-document-open-expected.txt b/LayoutTests/fast/dom/webtiming-document-open-expected.txt
new file mode 100644
index 0000000..0fc8249
--- /dev/null
+++ b/LayoutTests/fast/dom/webtiming-document-open-expected.txt
@@ -0,0 +1,27 @@
+This test verifies that the NavigationTimings don't change after a document.open().
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS timing.connectEnd is originalTiming.connectEnd
+PASS timing.connectStart is originalTiming.connectStart
+PASS timing.domComplete is originalTiming.domComplete
+PASS timing.domContentLoaded is originalTiming.domContentLoaded
+PASS timing.domInteractive is originalTiming.domInteractive
+PASS timing.domLoading is originalTiming.domLoading
+PASS timing.domainLookupEnd is originalTiming.domainLookupEnd
+PASS timing.domainLookupStart is originalTiming.domainLookupStart
+PASS timing.fetchStart is originalTiming.fetchStart
+PASS timing.loadEventEnd is originalTiming.loadEventEnd
+PASS timing.loadEventStart is originalTiming.loadEventStart
+PASS timing.navigationStart is originalTiming.navigationStart
+PASS timing.redirectEnd is originalTiming.redirectEnd
+PASS timing.redirectStart is originalTiming.redirectStart
+PASS timing.requestEnd is originalTiming.requestEnd
+PASS timing.requestStart is originalTiming.requestStart
+PASS timing.responseEnd is originalTiming.responseEnd
+PASS timing.responseStart is originalTiming.responseStart
+PASS timing.unloadEventEnd is originalTiming.unloadEventEnd
+PASS successfullyParsed is true
+
+TEST COMPLETE
diff --git a/LayoutTests/fast/dom/webtiming-document-open.html b/LayoutTests/fast/dom/webtiming-document-open.html
new file mode 100644
index 0000000..be95de8
--- /dev/null
+++ b/LayoutTests/fast/dom/webtiming-document-open.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../js/resources/js-test-style.css">
+<script src="../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/webtiming-document-open.js"></script>
+<script src="../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/webtiming-expected.txt b/LayoutTests/fast/dom/webtiming-expected.txt
index 4e169f8..af7faea 100644
--- a/LayoutTests/fast/dom/webtiming-expected.txt
+++ b/LayoutTests/fast/dom/webtiming-expected.txt
@@ -16,6 +16,48 @@ PASS timing.connectEnd is >= timing.connectStart
PASS timing.requestStart is >= timing.connectEnd
PASS timing.requestEnd is >= timing.requestStart
PASS timing.responseStart is timing.requestEnd
+PASS timing.domLoading is >= timing.fetchStart
+PASS timing.domInteractive is 0
+PASS timing.domContentLoaded is 0
+PASS timing.domComplete is 0
+PASS timing.loadEventStart is 0
+PASS timing.loadEventEnd is 0
+PASS timing.navigationStart is >= oneHourAgoUTC
+PASS timing.unloadEventEnd is >= timing.navigationStart
+PASS timing.redirectStart is 0
+PASS timing.redirectEnd is 0
+PASS navigation.redirectCount is 0
+PASS timing.fetchStart is >= timing.navigationStart
+PASS timing.domainLookupStart is >= timing.fetchStart
+PASS timing.domainLookupEnd is >= timing.domainLookupStart
+PASS timing.connectStart is >= timing.domainLookupEnd
+PASS timing.connectEnd is >= timing.connectStart
+PASS timing.requestStart is >= timing.connectEnd
+PASS timing.requestEnd is >= timing.requestStart
+PASS timing.responseStart is timing.requestEnd
+PASS timing.domLoading is >= timing.fetchStart
+PASS timing.domInteractive is >= timing.domLoading
+PASS timing.domContentLoaded is 0
+PASS timing.domComplete is 0
+PASS timing.loadEventStart is 0
+PASS timing.loadEventEnd is 0
+PASS timing.navigationStart is >= oneHourAgoUTC
+PASS timing.unloadEventEnd is >= timing.navigationStart
+PASS timing.redirectStart is 0
+PASS timing.redirectEnd is 0
+PASS navigation.redirectCount is 0
+PASS timing.fetchStart is >= timing.navigationStart
+PASS timing.domainLookupStart is >= timing.fetchStart
+PASS timing.domainLookupEnd is >= timing.domainLookupStart
+PASS timing.connectStart is >= timing.domainLookupEnd
+PASS timing.connectEnd is >= timing.connectStart
+PASS timing.requestStart is >= timing.connectEnd
+PASS timing.requestEnd is >= timing.requestStart
+PASS timing.responseStart is timing.requestEnd
+PASS timing.domLoading is >= timing.fetchStart
+PASS timing.domInteractive is >= timing.responseEnd
+PASS timing.domContentLoaded is >= timing.domInteractive
+PASS timing.domComplete is 0
PASS timing.loadEventStart is 0
PASS timing.loadEventEnd is 0
PASS timing.navigationStart is >= oneHourAgoUTC
@@ -32,6 +74,10 @@ PASS timing.requestStart is >= timing.connectEnd
PASS timing.requestEnd is >= timing.requestStart
PASS timing.responseStart is timing.requestEnd
PASS timing.responseEnd is >= timing.responseStart
+PASS timing.domLoading is >= timing.fetchStart
+PASS timing.domInteractive is >= timing.responseEnd
+PASS timing.domContentLoaded is >= timing.domInteractive
+PASS timing.domComplete is >= timing.domContentLoaded
PASS timing.loadEventStart is >= timing.responseEnd
PASS timing.loadEventEnd is 0
PASS timing.navigationStart is >= oneHourAgoUTC
@@ -48,6 +94,10 @@ PASS timing.requestStart is >= timing.connectEnd
PASS timing.requestEnd is >= timing.requestStart
PASS timing.responseStart is timing.requestEnd
PASS timing.responseEnd is >= timing.responseStart
+PASS timing.domLoading is >= timing.fetchStart
+PASS timing.domInteractive is >= timing.responseEnd
+PASS timing.domContentLoaded is >= timing.domInteractive
+PASS timing.domComplete is >= timing.domContentLoaded
PASS timing.loadEventStart is >= timing.responseEnd
PASS timing.loadEventEnd is >= timing.loadEventStart + 50
PASS successfullyParsed is true
diff --git a/LayoutTests/fast/dom/webtiming-navigate-within-document-expected.txt b/LayoutTests/fast/dom/webtiming-navigate-within-document-expected.txt
index 22aefd2..cfcadaa 100644
--- a/LayoutTests/fast/dom/webtiming-navigate-within-document-expected.txt
+++ b/LayoutTests/fast/dom/webtiming-navigate-within-document-expected.txt
@@ -3,21 +3,25 @@ This test checks that navigating within the document does not reset Web Timing n
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS requestEnd is unchanged.
-PASS responseStart is unchanged.
-PASS connectStart is unchanged.
-PASS domainLookupStart is unchanged.
PASS connectEnd is unchanged.
-PASS responseEnd is unchanged.
-PASS requestStart is unchanged.
-PASS navigationStart is unchanged.
-PASS loadEventEnd is unchanged.
-PASS redirectStart is unchanged.
+PASS connectStart is unchanged.
+PASS domComplete is unchanged.
+PASS domContentLoaded is unchanged.
+PASS domInteractive is unchanged.
+PASS domLoading is unchanged.
PASS domainLookupEnd is unchanged.
-PASS unloadEventEnd is unchanged.
+PASS domainLookupStart is unchanged.
PASS fetchStart is unchanged.
+PASS loadEventEnd is unchanged.
PASS loadEventStart is unchanged.
+PASS navigationStart is unchanged.
PASS redirectEnd is unchanged.
+PASS redirectStart is unchanged.
+PASS requestEnd is unchanged.
+PASS requestStart is unchanged.
+PASS responseEnd is unchanged.
+PASS responseStart is unchanged.
+PASS unloadEventEnd is unchanged.
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/fast/dom/webtiming.html b/LayoutTests/fast/dom/webtiming.html
index 0db65c5..61f47c8 100644
--- a/LayoutTests/fast/dom/webtiming.html
+++ b/LayoutTests/fast/dom/webtiming.html
@@ -8,6 +8,7 @@
<p id="description"></p>
<div id="console"></div>
<script src="script-tests/webtiming.js"></script>
+<script src="script-tests/webtiming-defer.js" defer></script>
<script src="../js/resources/js-test-post.js"></script>
</body>
</html>
diff --git a/LayoutTests/platform/mac/Skipped b/LayoutTests/platform/mac/Skipped
index e000ba8..b063896 100644
--- a/LayoutTests/platform/mac/Skipped
+++ b/LayoutTests/platform/mac/Skipped
@@ -211,6 +211,7 @@ fast/dom/navigation-type-back-forward.html
fast/dom/navigation-type-navigate.html
fast/dom/navigation-type-reload.html
fast/dom/webtiming.html
+fast/dom/webtiming-document-open.html
fast/dom/webtiming-navigate-within-document.html
http/tests/misc/webtiming-one-redirect.php
http/tests/misc/webtiming-two-redirects.php
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index cd22e23..2e9288a 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,32 @@
+2010-11-04 James Simonsen <simonjam at chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Web Timing] Implement dom* timing marks
+ https://bugs.webkit.org/show_bug.cgi?id=46301
+
+ Test: fast/dom/webtiming-document-open.html
+
+ * GNUmakefile.am: Added DocumentTiming.h
+ * WebCore.gypi: Ditto.
+ * WebCore.vcproj/WebCore.vcproj: Ditto.
+ * WebCore.xcodeproj/project.pbxproj: Ditto.
+ * dom/Document.cpp:
+ (WebCore::Document::setReadyState): Set DOM WebTiming marks.
+ (WebCore::Document::finishedParsing): Set DOM WebTiming marks.
+ * dom/Document.h:
+ (WebCore::Document::timing): Added.
+ * dom/DocumentTiming.h: Added.
+ (WebCore::DocumentTiming::DocumentTiming):
+ * page/Timing.cpp: Added DOM timing.
+ (WebCore::Timing::domLoading): Ditto.
+ (WebCore::Timing::domInteractive): Ditto.
+ (WebCore::Timing::domContentLoaded): Ditto.
+ (WebCore::Timing::domComplete): Ditto.
+ (WebCore::Timing::documentTiming): Ditto.
+ * page/Timing.h: Ditto.
+ * page/Timing.idl: Ditto.
+
2010-11-04 Carlos Garcia Campos <cgarcia at igalia.com>
Reviewed by Martin Robinson.
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index 95e0d1d..1134d89 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -1109,6 +1109,7 @@ webcore_sources += \
WebCore/dom/DocumentMarker.h \
WebCore/dom/DocumentParser.cpp \
WebCore/dom/DocumentParser.h \
+ WebCore/dom/DocumentTiming.h \
WebCore/dom/DocumentType.cpp \
WebCore/dom/DocumentType.h \
WebCore/dom/DOMCoreException.h \
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index 837dc3a..90c363d 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -1188,6 +1188,7 @@
'dom/DocumentMarkerController.h',
'dom/DocumentParser.cpp',
'dom/DocumentParser.h',
+ 'dom/DocumentTiming.h',
'dom/DocumentType.cpp',
'dom/DocumentType.h',
'dom/DynamicNodeList.cpp',
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index 19a3674..e1277f1 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -41628,6 +41628,10 @@
>
</File>
<File
+ RelativePath="..\dom\DocumentTiming.h"
+ >
+ </File>
+ <File
RelativePath="..\dom\DocumentType.cpp"
>
<FileConfiguration
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index 49bdb30..70a59c8 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -2510,6 +2510,7 @@
85FF315A0AAFBFCB00374F38 /* DOMKeyboardEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 85FF31580AAFBFCB00374F38 /* DOMKeyboardEvent.h */; };
85FF315B0AAFBFCB00374F38 /* DOMKeyboardEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 85FF31590AAFBFCB00374F38 /* DOMKeyboardEvent.mm */; };
86243D0111BC31F700CC006A /* JSArrayBufferViewHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 86243D0011BC31F700CC006A /* JSArrayBufferViewHelper.h */; };
+ 86D982F7125C154000AD9E3D /* DocumentTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D982F6125C154000AD9E3D /* DocumentTiming.h */; settings = {ATTRIBUTES = (Private, ); }; };
890AE0E11256A07900F5968C /* DirectoryReaderBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 890AE0E01256A07900F5968C /* DirectoryReaderBase.h */; };
893C47A71238908B002B3D86 /* FileCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 893C47A51238908B002B3D86 /* FileCallback.h */; };
893C47A81238908B002B3D86 /* FileWriterCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 893C47A61238908B002B3D86 /* FileWriterCallback.h */; };
@@ -8610,6 +8611,7 @@
85FF31580AAFBFCB00374F38 /* DOMKeyboardEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMKeyboardEvent.h; sourceTree = "<group>"; };
85FF31590AAFBFCB00374F38 /* DOMKeyboardEvent.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMKeyboardEvent.mm; sourceTree = "<group>"; };
86243D0011BC31F700CC006A /* JSArrayBufferViewHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSArrayBufferViewHelper.h; sourceTree = "<group>"; };
+ 86D982F6125C154000AD9E3D /* DocumentTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentTiming.h; sourceTree = "<group>"; };
890AE0E01256A07900F5968C /* DirectoryReaderBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryReaderBase.h; path = fileapi/DirectoryReaderBase.h; sourceTree = "<group>"; };
893C47A51238908B002B3D86 /* FileCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileCallback.h; path = fileapi/FileCallback.h; sourceTree = "<group>"; };
893C47A61238908B002B3D86 /* FileWriterCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileWriterCallback.h; path = fileapi/FileWriterCallback.h; sourceTree = "<group>"; };
@@ -18159,6 +18161,7 @@
CE057FA41220731100A476D5 /* DocumentMarkerController.h */,
A8C2280D11D4A59700D5A7D3 /* DocumentParser.cpp */,
BCCFBAE70B5152ED0001F1D7 /* DocumentParser.h */,
+ 86D982F6125C154000AD9E3D /* DocumentTiming.h */,
A8185F3209765765005826D9 /* DocumentType.cpp */,
A8185F3109765765005826D9 /* DocumentType.h */,
93EEC1E809C2877700C515D1 /* DocumentType.idl */,
@@ -18723,6 +18726,7 @@
CE057FA61220731100A476D5 /* DocumentMarkerController.h in Headers */,
BCCFBAE80B5152ED0001F1D7 /* DocumentParser.h in Headers */,
0B90561A0F2578BF0095FF6A /* DocumentThreadableLoader.h in Headers */,
+ 86D982F7125C154000AD9E3D /* DocumentTiming.h in Headers */,
A8185F3909765766005826D9 /* DocumentType.h in Headers */,
973889A1116EA9DC00ADF313 /* DocumentWriter.h in Headers */,
BC1A37AD097C715F0019F3D8 /* DOM.h in Headers */,
diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
index 36b080a..1e71a95 100644
--- a/WebCore/dom/Document.cpp
+++ b/WebCore/dom/Document.cpp
@@ -989,6 +989,22 @@ void Document::setReadyState(ReadyState readyState)
{
if (readyState == m_readyState)
return;
+
+ switch (readyState) {
+ case Loading:
+ if (!m_documentTiming.domLoading)
+ m_documentTiming.domLoading = currentTime();
+ break;
+ case Interactive:
+ if (!m_documentTiming.domInteractive)
+ m_documentTiming.domInteractive = currentTime();
+ break;
+ case Complete:
+ if (!m_documentTiming.domComplete)
+ m_documentTiming.domComplete = currentTime();
+ break;
+ }
+
m_readyState = readyState;
dispatchEvent(Event::create(eventNames().readystatechangeEvent, false, false));
}
@@ -4139,6 +4155,8 @@ void Document::finishedParsing()
ASSERT(!scriptableDocumentParser() || !m_parser->isParsing());
ASSERT(!scriptableDocumentParser() || m_readyState != Loading);
setParsing(false);
+ if (!m_documentTiming.domContentLoaded)
+ m_documentTiming.domContentLoaded = currentTime();
dispatchEvent(Event::create(eventNames().DOMContentLoadedEvent, true, false));
if (Frame* f = frame()) {
diff --git a/WebCore/dom/Document.h b/WebCore/dom/Document.h
index 1334aa3..c9e3b47 100644
--- a/WebCore/dom/Document.h
+++ b/WebCore/dom/Document.h
@@ -33,6 +33,7 @@
#include "Color.h"
#include "ContainerNode.h"
#include "DocumentMarkerController.h"
+#include "DocumentTiming.h"
#include "QualifiedName.h"
#include "ScriptExecutionContext.h"
#include "Timer.h"
@@ -1045,6 +1046,8 @@ public:
PassRefPtr<TouchList> createTouchList(ExceptionCode&) const;
#endif
+ const DocumentTiming* timing() const { return &m_documentTiming; }
+
protected:
Document(Frame*, const KURL& url, bool isXHTML, bool isHTML, const KURL& baseURL = KURL());
@@ -1338,9 +1341,11 @@ private:
Timer<Document> m_loadEventDelayTimer;
ViewportArguments m_viewportArguments;
-
+
bool m_directionSetOnDocumentElement;
bool m_writingModeSetOnDocumentElement;
+
+ DocumentTiming m_documentTiming;
};
inline bool Document::hasElementWithId(AtomicStringImpl* id) const
diff --git a/WebCore/dom/DocumentTiming.h b/WebCore/dom/DocumentTiming.h
new file mode 100644
index 0000000..a0bbb8c
--- /dev/null
+++ b/WebCore/dom/DocumentTiming.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2010 Google, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DocumentTiming_h
+#define DocumentTiming_h
+
+namespace WebCore {
+
+struct DocumentTiming {
+ DocumentTiming()
+ : domLoading(0.0)
+ , domInteractive(0.0)
+ , domContentLoaded(0.0)
+ , domComplete(0.0)
+ {
+ }
+
+ double domLoading;
+ double domInteractive;
+ double domContentLoaded;
+ double domComplete;
+};
+
+}
+
+#endif
diff --git a/WebCore/page/Timing.cpp b/WebCore/page/Timing.cpp
index 8a0de2a..3d98dc2 100644
--- a/WebCore/page/Timing.cpp
+++ b/WebCore/page/Timing.cpp
@@ -35,6 +35,7 @@
#include "DocumentLoadTiming.h"
#include "DocumentLoader.h"
+#include "DocumentTiming.h"
#include "Frame.h"
#include "ResourceLoadTiming.h"
#include "ResourceResponse.h"
@@ -246,6 +247,42 @@ unsigned long long Timing::responseEnd() const
return toIntegerMilliseconds(timing->responseEnd);
}
+unsigned long long Timing::domLoading() const
+{
+ const DocumentTiming* timing = documentTiming();
+ if (!timing)
+ return 0;
+
+ return toIntegerMilliseconds(timing->domLoading);
+}
+
+unsigned long long Timing::domInteractive() const
+{
+ const DocumentTiming* timing = documentTiming();
+ if (!timing)
+ return 0;
+
+ return toIntegerMilliseconds(timing->domInteractive);
+}
+
+unsigned long long Timing::domContentLoaded() const
+{
+ const DocumentTiming* timing = documentTiming();
+ if (!timing)
+ return 0;
+
+ return toIntegerMilliseconds(timing->domContentLoaded);
+}
+
+unsigned long long Timing::domComplete() const
+{
+ const DocumentTiming* timing = documentTiming();
+ if (!timing)
+ return 0;
+
+ return toIntegerMilliseconds(timing->domComplete);
+}
+
unsigned long long Timing::loadEventStart() const
{
DocumentLoadTiming* timing = documentLoadTiming();
@@ -272,6 +309,18 @@ DocumentLoader* Timing::documentLoader() const
return m_frame->loader()->documentLoader();
}
+const DocumentTiming* Timing::documentTiming() const
+{
+ if (!m_frame)
+ return 0;
+
+ Document* document = m_frame->document();
+ if (!document)
+ return 0;
+
+ return document->timing();
+}
+
DocumentLoadTiming* Timing::documentLoadTiming() const
{
DocumentLoader* loader = documentLoader();
diff --git a/WebCore/page/Timing.h b/WebCore/page/Timing.h
index f48f525..3e3485f 100644
--- a/WebCore/page/Timing.h
+++ b/WebCore/page/Timing.h
@@ -40,6 +40,7 @@ namespace WebCore {
struct DocumentLoadTiming;
class DocumentLoader;
+struct DocumentTiming;
class Frame;
class ResourceLoadTiming;
@@ -63,12 +64,17 @@ public:
unsigned long long requestEnd() const;
unsigned long long responseStart() const;
unsigned long long responseEnd() const;
+ unsigned long long domLoading() const;
+ unsigned long long domInteractive() const;
+ unsigned long long domContentLoaded() const;
+ unsigned long long domComplete() const;
unsigned long long loadEventStart() const;
unsigned long long loadEventEnd() const;
private:
Timing(Frame*);
+ const DocumentTiming* documentTiming() const;
DocumentLoader* documentLoader() const;
DocumentLoadTiming* documentLoadTiming() const;
ResourceLoadTiming* resourceLoadTiming() const;
diff --git a/WebCore/page/Timing.idl b/WebCore/page/Timing.idl
index e7e46cc..00d3e24 100644
--- a/WebCore/page/Timing.idl
+++ b/WebCore/page/Timing.idl
@@ -45,6 +45,10 @@ module window {
readonly attribute unsigned long long requestEnd;
readonly attribute unsigned long long responseStart;
readonly attribute unsigned long long responseEnd;
+ readonly attribute unsigned long long domLoading;
+ readonly attribute unsigned long long domInteractive;
+ readonly attribute unsigned long long domContentLoaded;
+ readonly attribute unsigned long long domComplete;
readonly attribute unsigned long long loadEventStart;
readonly attribute unsigned long long loadEventEnd;
};
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list