Commit e27663ec authored by eustas@chromium.org's avatar eustas@chromium.org

DevTools: use timing information for "disk cached" resources.

"Disk Cached" resources bring valid timing info, so it should be shown to users.

Drive-by: get rid of "cache" property getters/setters.

BUG=410413

Review URL: https://codereview.chromium.org/637523002

git-svn-id: svn://svn.chromium.org/blink/trunk@183681 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent fc504b80
CONSOLE MESSAGE: line 1: Done.
CONSOLE MESSAGE: line 1: Done.
Tests requests loaded from disk cache have correct timing
URL:http://127.0.0.1:8000/inspector/network/resources/cached-script.php
from memory cache: false
from disk cache: false
has timing: true
URL:http://127.0.0.1:8000/inspector/network/resources/cached-script.php
from memory cache: false
from disk cache: true
has timing: true
Second request starts later than first: true
<html>
<head>
<script src="../inspector-test.js"></script>
<script src="../network-test.js"></script>
<script src="../debugger-test.js"></script>
<script>
var scriptElement;
function loadScript()
{
scriptElement = document.createElement("script");
scriptElement.src = "resources/cached-script.php";
document.head.appendChild(scriptElement);
}
function unloadScript()
{
scriptElement.parentElement.removeChild(scriptElement);
}
function gc()
{
if (window.internals)
window.internals.garbageCollectDocumentResources(document);
// In Oilpan, Resource objects are not destructed until GC.
if (window.GCController)
GCController.collectAll();
}
function test()
{
var timeZero = 0;
InspectorTest.recordNetwork();
NetworkAgent.setCacheDisabled(true, step1);
function step1()
{
InspectorTest.addConsoleSniffer(step2);
InspectorTest.evaluateInPage("loadScript()");
}
function step2(event)
{
InspectorTest.evaluateInPage("unloadScript()", step3);
}
function step3()
{
InspectorTest.evaluateInPage("gc()", step4);
}
function step4()
{
NetworkAgent.setCacheDisabled(true, step5);
}
function step5()
{
var request = InspectorTest.networkRequests().pop();
InspectorTest.addResult("URL:" + request.url);
InspectorTest.addResult("from memory cache: " + !!request._fromMemoryCache);
InspectorTest.addResult("from disk cache: " + !!request._fromDiskCache);
InspectorTest.addResult("has timing: " + !!request._timing);
InspectorTest.addResult("");
timeZero = request._timing.requestTime;
NetworkAgent.setCacheDisabled(false, step6);
}
function step6()
{
InspectorTest.addConsoleSniffer(step7);
InspectorTest.evaluateInPage("loadScript()");
}
function step7()
{
var request = InspectorTest.networkRequests().pop();
InspectorTest.addResult("URL:" + request.url);
InspectorTest.addResult("from memory cache: " + !!request._fromMemoryCache);
InspectorTest.addResult("from disk cache: " + !!request._fromDiskCache);
InspectorTest.addResult("has timing: " + !!request._timing);
InspectorTest.addResult("");
var time = request._timing.requestTime;
InspectorTest.addResult("Second request starts later than first: " + (time > timeZero));
InspectorTest.completeTest();
}
}
</script>
</head>
<body onload="runTest()">
<p> Tests requests loaded from disk cache have correct timing</p>
</body>
</html>
......@@ -21,7 +21,7 @@ function test()
var requests = InspectorTest.networkRequests();
for (var i = 0; i < requests.length; ++i) {
var request = requests[i];
if (url.test(request.url) && (status === request.statusCode) && (cached === request.cached))
if (url.test(request.url) && (status === request.statusCode) && (cached === request.cached()))
return request;
}
return null;
......
......@@ -24,7 +24,7 @@ function test()
var request = InspectorTest.networkRequests().pop();
InspectorTest.addResult("URL: " + request.url);
InspectorTest.addResult("Finished: " + request.finished);
InspectorTest.addResult("Cached: " + request.cached);
InspectorTest.addResult("Cached: " + request.cached());
InspectorTest.addResult("Method: " + request.requestMethod);
InspectorTest.addResult("Status: " + request.statusCode + " " + request.statusText);
InspectorTest.addResult("Has raw request headers: " + (typeof request.requestHeadersText() === "string"));
......
<?php
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
header("HTTP/1.0 304 Not Modified");
exit;
}
header("Cache-control: max-age=3600");
header("Expires: " . gmdate(DATE_RFC1123, time() + 600));
header("Last-Modified: " . gmdate(DATE_RFC1123, time() - 600));
header("Content-Type:text/javascript; charset=UTF-8");
?>
console.log("Done.");
......@@ -94,7 +94,7 @@ WebInspector.AuditRules.GzipRule.prototype = {
var summary = result.addChild("", true);
for (var i = 0, length = requests.length; i < length; ++i) {
var request = requests[i];
if (request.cached || request.statusCode === 304)
if (request.cached() || request.statusCode === 304)
continue; // Do not test cached resources.
if (this._shouldCompress(request)) {
var size = request.resourceSize;
......
......@@ -237,7 +237,7 @@ WebInspector.HAREntry.prototype = {
*/
get responseBodySize()
{
if (this._request.cached || this._request.statusCode === 304)
if (this._request.cached() || this._request.statusCode === 304)
return 0;
if (!this._request.responseHeadersText)
return -1;
......@@ -249,7 +249,7 @@ WebInspector.HAREntry.prototype = {
*/
get responseCompression()
{
if (this._request.cached || this._request.statusCode === 304 || this._request.statusCode === 206)
if (this._request.cached() || this._request.statusCode === 304 || this._request.statusCode === 206)
return;
if (!this._request.responseHeadersText)
return;
......
......@@ -2420,7 +2420,7 @@ WebInspector.NetworkTimeCalculator.prototype = {
if (request.fetchedViaServiceWorker)
tooltip = WebInspector.NetworkTimeCalculator._fromServiceWorkerFormat.format(tooltip);
else if (request.cached)
else if (request.cached())
tooltip = WebInspector.NetworkTimeCalculator._fromCacheFormat.format(tooltip);
return {left: leftLabel, right: rightLabel, tooltip: tooltip};
},
......@@ -2716,7 +2716,7 @@ WebInspector.NetworkDataGridNode.prototype = {
this._barAreaElement.request = this._request;
var type = this._request.type.name();
var cached = this._request.cached;
var cached = this._request.cached();
this._barLeftElement = this._barAreaElement.createChild("div", "network-graph-bar");
this._barLeftElement.classList.add(type, "waiting");
......@@ -2782,7 +2782,7 @@ WebInspector.NetworkDataGridNode.prototype = {
*/
_renderStatusCell: function(cell)
{
cell.classList.toggle("network-dim-cell", !this._isFailed() && (this._request.cached || !this._request.statusCode));
cell.classList.toggle("network-dim-cell", !this._isFailed() && (this._request.cached() || !this._request.statusCode));
if (this._request.failed && !this._request.canceled) {
var failText = WebInspector.UIString("(failed)");
......@@ -2857,7 +2857,7 @@ WebInspector.NetworkDataGridNode.prototype = {
if (this._request.fetchedViaServiceWorker) {
cell.setTextAndTitle(WebInspector.UIString("(from ServiceWorker)"));
cell.classList.add("network-dim-cell");
} else if (this._request.cached) {
} else if (this._request.cached()) {
cell.setTextAndTitle(WebInspector.UIString("(from cache)"));
cell.classList.add("network-dim-cell");
} else {
......@@ -3045,9 +3045,9 @@ WebInspector.NetworkDataGridNode.RemoteAddressComparator = function(a, b)
*/
WebInspector.NetworkDataGridNode.SizeComparator = function(a, b)
{
if (b._request.cached && !a._request.cached)
if (b._request.cached() && !a._request.cached())
return 1;
if (a._request.cached && !b._request.cached)
if (a._request.cached() && !b._request.cached())
return -1;
return (a._request.transferSize - b._request.transferSize) || a._request.indentityCompare(b._request);
}
......
......@@ -402,7 +402,7 @@ WebInspector.RequestHeadersView.prototype = {
if (this._request.fetchedViaServiceWorker) {
statusText += " " + WebInspector.UIString("(from ServiceWorker)");
statusTextElement.classList.add("status-from-cache");
} else if (this._request.cached) {
} else if (this._request.cached()) {
statusText += " " + WebInspector.UIString("(from cache)");
statusTextElement.classList.add("status-from-cache");
}
......
......@@ -207,9 +207,8 @@ WebInspector.NetworkDispatcher.prototype = {
networkRequest.fetchedViaServiceWorker = true;
if (response.fromDiskCache)
networkRequest.cached = true;
else
networkRequest.timing = response.timing;
networkRequest.setFromDiskCache();
networkRequest.timing = response.timing;
if (!this._mimeTypeIsConsistentWithType(networkRequest)) {
var consoleModel = this._manager._target.consoleModel;
......@@ -292,7 +291,7 @@ WebInspector.NetworkDispatcher.prototype = {
if (!networkRequest)
return;
networkRequest.cached = true;
networkRequest.setFromMemoryCache();
},
/**
......
......@@ -354,16 +354,20 @@ WebInspector.NetworkRequest.prototype = {
/**
* @return {boolean}
*/
get cached()
cached: function()
{
return !!this._cached && !this._transferSize;
return (!!this._fromMemoryCache || !!this._fromDiskCache) && !this._transferSize;
},
set cached(x)
setFromMemoryCache: function()
{
this._cached = x;
if (x)
delete this._timing;
this._fromMemoryCache = true;
delete this._timing;
},
setFromDiskCache: function()
{
this._fromDiskCache = true;
},
/**
......@@ -389,7 +393,7 @@ WebInspector.NetworkRequest.prototype = {
set timing(x)
{
if (x && !this._cached) {
if (x && !this._fromMemoryCache) {
// Take startTime and responseReceivedTime from timing data for better accuracy.
// Timing's requestTime is a baseline in seconds, rest of the numbers there are ticks in millis.
this._startTime = x.requestTime;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment