Changeset 205211 in webkit


Ignore:
Timestamp:
Aug 30, 2016 5:27:27 PM (8 years ago)
Author:
commit-queue@webkit.org
Message:

Web Inspector: Add resource timing model with timing information
https://bugs.webkit.org/show_bug.cgi?id=161314

Patch by Johan K. Jensen <johan_jensen@apple.com> on 2016-08-30
Reviewed by Joseph Pecoraro.

Source/WebInspectorUI:

Add a resource timing data model and populate it with info from the
response from the backend.

  • UserInterface/Controllers/FrameResourceManager.js:

(WebInspector.FrameResourceManager.prototype.resourceRequestWasServedFromMemoryCache):
(WebInspector.FrameResourceManager.prototype.resourceRequestDidReceiveResponse):
Forward timing data from response to Resource.js.

  • UserInterface/Main.html: Add new ResourceTimingData.js.
  • UserInterface/Test.html: Add new ResourceTimingData.js.
  • UserInterface/Models/Resource.js:

(WebInspector.Resource): Instantiate ResourceTimingData object.

(WebInspector.Resource.prototype.get timing):
(WebInspector.Resource.prototype.get firstTimestamp):
(WebInspector.Resource.prototype.get lastTimestamp):
(WebInspector.Resource.prototype.get duration):
(WebInspector.Resource.prototype.get latency):
(WebInspector.Resource.prototype.get receiveDuration):
Update getters to use new timing model.

(WebInspector.Resource.prototype.updateForResponse):
Update timing object with info from response.

(WebInspector.Resource.prototype.markAsFinished):
Log response end time.

  • UserInterface/Models/ResourceTimelineRecord.js:

(WebInspector.ResourceTimelineRecord.prototype.get startTime):
(WebInspector.ResourceTimelineRecord.prototype.get activeStartTime):
(WebInspector.ResourceTimelineRecord.prototype.get endTime):
Update getters to use new timing model.

  • UserInterface/Models/ResourceTimingData.js: Added.

(WebInspector.ResourceTimingData):
(WebInspector.ResourceTimingData.fromPayload):
(WebInspector.ResourceTimingData.prototype.get startTime):
(WebInspector.ResourceTimingData.prototype.get domainLookupStart):
(WebInspector.ResourceTimingData.prototype.get domainLookupEnd):
(WebInspector.ResourceTimingData.prototype.get connectStart):
(WebInspector.ResourceTimingData.prototype.get connectEnd):
(WebInspector.ResourceTimingData.prototype.get secureConnectionStart):
(WebInspector.ResourceTimingData.prototype.get requestStart):
(WebInspector.ResourceTimingData.prototype.get responseStart):
(WebInspector.ResourceTimingData.prototype.get responseEnd):
(WebInspector.ResourceTimingData.prototype.markResponseEndTime):
Add new ResourceTimingData model and fall back on old timestamps
for when data is unavailable.

LayoutTests:

Add tests for the Resource Timing Data model.

  • http/tests/inspector/network/resource-timing-expected.txt: Added.
  • http/tests/inspector/network/resource-timing.html: Added.
Location:
trunk
Files:
3 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r205205 r205211  
     12016-08-30  Johan K. Jensen  <johan_jensen@apple.com>
     2
     3        Web Inspector: Add resource timing model with timing information
     4        https://bugs.webkit.org/show_bug.cgi?id=161314
     5
     6        Reviewed by Joseph Pecoraro.
     7
     8        Add tests for the Resource Timing Data model.
     9
     10        * http/tests/inspector/network/resource-timing-expected.txt: Added.
     11        * http/tests/inspector/network/resource-timing.html: Added.
     12
    1132016-08-30  Chris Dumez  <cdumez@apple.com>
    214
  • trunk/Source/WebInspectorUI/ChangeLog

    r205192 r205211  
     12016-08-30  Johan K. Jensen  <johan_jensen@apple.com>
     2
     3        Web Inspector: Add resource timing model with timing information
     4        https://bugs.webkit.org/show_bug.cgi?id=161314
     5
     6        Reviewed by Joseph Pecoraro.
     7
     8        Add a resource timing data model and populate it with info from the
     9        response from the backend.
     10
     11        * UserInterface/Controllers/FrameResourceManager.js:
     12        (WebInspector.FrameResourceManager.prototype.resourceRequestWasServedFromMemoryCache):
     13        (WebInspector.FrameResourceManager.prototype.resourceRequestDidReceiveResponse):
     14        Forward timing data from response to Resource.js.
     15
     16        * UserInterface/Main.html: Add new ResourceTimingData.js.
     17        * UserInterface/Test.html: Add new ResourceTimingData.js.
     18
     19        * UserInterface/Models/Resource.js:
     20        (WebInspector.Resource): Instantiate ResourceTimingData object.
     21
     22        (WebInspector.Resource.prototype.get timing):
     23        (WebInspector.Resource.prototype.get firstTimestamp):
     24        (WebInspector.Resource.prototype.get lastTimestamp):
     25        (WebInspector.Resource.prototype.get duration):
     26        (WebInspector.Resource.prototype.get latency):
     27        (WebInspector.Resource.prototype.get receiveDuration):
     28        Update getters to use new timing model.
     29
     30        (WebInspector.Resource.prototype.updateForResponse):
     31        Update timing object with info from response.
     32
     33        (WebInspector.Resource.prototype.markAsFinished):
     34        Log response end time.
     35
     36        * UserInterface/Models/ResourceTimelineRecord.js:
     37        (WebInspector.ResourceTimelineRecord.prototype.get startTime):
     38        (WebInspector.ResourceTimelineRecord.prototype.get activeStartTime):
     39        (WebInspector.ResourceTimelineRecord.prototype.get endTime):
     40        Update getters to use new timing model.
     41
     42        * UserInterface/Models/ResourceTimingData.js: Added.
     43        (WebInspector.ResourceTimingData):
     44        (WebInspector.ResourceTimingData.fromPayload):
     45        (WebInspector.ResourceTimingData.prototype.get startTime):
     46        (WebInspector.ResourceTimingData.prototype.get domainLookupStart):
     47        (WebInspector.ResourceTimingData.prototype.get domainLookupEnd):
     48        (WebInspector.ResourceTimingData.prototype.get connectStart):
     49        (WebInspector.ResourceTimingData.prototype.get connectEnd):
     50        (WebInspector.ResourceTimingData.prototype.get secureConnectionStart):
     51        (WebInspector.ResourceTimingData.prototype.get requestStart):
     52        (WebInspector.ResourceTimingData.prototype.get responseStart):
     53        (WebInspector.ResourceTimingData.prototype.get responseEnd):
     54        (WebInspector.ResourceTimingData.prototype.markResponseEndTime):
     55        Add new ResourceTimingData model and fall back on old timestamps
     56        for when data is unavailable.
     57
    1582016-08-30  Alex Christensen  <achristensen@webkit.org>
    259
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/FrameResourceManager.js

    r186303 r205211  
    237237        var resource = this._addNewResourceToFrame(requestIdentifier, frameIdentifier, loaderIdentifier, cachedResourcePayload.url, cachedResourcePayload.type, "GET", null, null, elapsedTime, null, null, initiatorSourceCodeLocation);
    238238        resource.markAsCached();
    239         resource.updateForResponse(cachedResourcePayload.url, response.mimeType, cachedResourcePayload.type, response.headers, response.status, response.statusText, elapsedTime);
     239        resource.updateForResponse(cachedResourcePayload.url, response.mimeType, cachedResourcePayload.type, response.headers, response.status, response.statusText, elapsedTime, response.timing);
    240240        resource.increaseSize(cachedResourcePayload.bodySize, elapsedTime);
    241241        resource.increaseTransferSize(cachedResourcePayload.bodySize);
     
    289289            resource.markAsCached();
    290290
    291         resource.updateForResponse(response.url, response.mimeType, type, response.headers, response.status, response.statusText, elapsedTime);
     291        resource.updateForResponse(response.url, response.mimeType, type, response.headers, response.status, response.statusText, elapsedTime, response.timing);
    292292    }
    293293
  • trunk/Source/WebInspectorUI/UserInterface/Main.html

    r205151 r205211  
    358358    <script src="Models/ResourceQueryResult.js"></script>
    359359    <script src="Models/ResourceTimelineRecord.js"></script>
     360    <script src="Models/ResourceTimingData.js"></script>
    360361    <script src="Models/Revision.js"></script>
    361362    <script src="Models/ScopeChainNode.js"></script>
  • trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js

    r203132 r205211  
    6060        this._transferSize = NaN;
    6161        this._cached = false;
     62        this._timingData = new WebInspector.ResourceTimingData(this);
    6263
    6364        if (this._initiatorSourceCodeLocation && this._initiatorSourceCodeLocation.sourceCode instanceof WebInspector.Resource)
     
    127128    // Public
    128129
     130    get timingData() { return this._timingData; }
     131
    129132    get url()
    130133    {
     
    318321    get firstTimestamp()
    319322    {
    320         return this.requestSentTimestamp || this.lastRedirectReceivedTimestamp || this.responseReceivedTimestamp || this.lastDataReceivedTimestamp || this.finishedOrFailedTimestamp;
     323        return this.timingData.startTime || this.lastRedirectReceivedTimestamp || this.responseReceivedTimestamp || this.lastDataReceivedTimestamp || this.finishedOrFailedTimestamp;
    321324    }
    322325
    323326    get lastTimestamp()
    324327    {
    325         return this.finishedOrFailedTimestamp || this.lastDataReceivedTimestamp || this.responseReceivedTimestamp || this.lastRedirectReceivedTimestamp || this.requestSentTimestamp;
     328        return this.timingData.responseEnd || this.lastDataReceivedTimestamp || this.responseReceivedTimestamp || this.lastRedirectReceivedTimestamp || this.requestSentTimestamp;
    326329    }
    327330
    328331    get duration()
    329332    {
    330         return this._finishedOrFailedTimestamp - this._requestSentTimestamp;
     333        return this.timingData.responseEnd - this.timingData.requestStart;
    331334    }
    332335
    333336    get latency()
    334337    {
    335         return this._responseReceivedTimestamp - this._requestSentTimestamp;
     338        return this.timingData.responseStart - this.timingData.requestStart;
    336339    }
    337340
    338341    get receiveDuration()
    339342    {
    340         return this._finishedOrFailedTimestamp - this._responseReceivedTimestamp;
     343        return this.timingData.responseEnd - this.timingData.responseStart;
    341344    }
    342345
     
    448451    }
    449452
    450     updateForResponse(url, mimeType, type, responseHeaders, statusCode, statusText, elapsedTime)
     453    updateForResponse(url, mimeType, type, responseHeaders, statusCode, statusText, elapsedTime, timingData)
    451454    {
    452455        console.assert(!this._finished);
     
    468471        this._responseHeaders = responseHeaders || {};
    469472        this._responseReceivedTimestamp = elapsedTime || NaN;
     473        this._timingData = WebInspector.ResourceTimingData.fromPayload(timingData, this);
    470474
    471475        this._responseHeadersSize = String(this._statusCode).length + this._statusText.length + 12; // Extra length is for "HTTP/1.1 ", " ", and "\r\n".
     
    573577        this._finished = true;
    574578        this._finishedOrFailedTimestamp = elapsedTime || NaN;
     579        this._timingData.markResponseEndTime(elapsedTime || NaN);
    575580
    576581        if (this._finishThenRequestContentPromise)
  • trunk/Source/WebInspectorUI/UserInterface/Models/ResourceTimelineRecord.js

    r181769 r205211  
    5353    get startTime()
    5454    {
    55         return this._resource.requestSentTimestamp;
     55        return this._resource.timingData.startTime;
    5656    }
    5757
    5858    get activeStartTime()
    5959    {
    60         return this._resource.responseReceivedTimestamp;
     60        return this._resource.timingData.responseStart;
    6161    }
    6262
    6363    get endTime()
    6464    {
    65         return this._resource.finishedOrFailedTimestamp;
     65        return this._resource.timingData.responseEnd;
    6666    }
    6767
  • trunk/Source/WebInspectorUI/UserInterface/Test.html

    r203254 r205211  
    148148    <script src="Models/ResourceQueryResult.js"></script>
    149149    <script src="Models/ResourceTimelineRecord.js"></script>
     150    <script src="Models/ResourceTimingData.js"></script>
    150151    <script src="Models/Revision.js"></script>
    151152    <script src="Models/ScopeChainNode.js"></script>
Note: See TracChangeset for help on using the changeset viewer.