Changeset 135458 in webkit


Ignore:
Timestamp:
Nov 21, 2012 4:50:26 PM (11 years ago)
Author:
simonjam@chromium.org
Message:

[Resource Timing] Populate PerformanceResourceTiming structs with timing data
https://bugs.webkit.org/show_bug.cgi?id=102862

Reviewed by Tony Gentilcore.

This allows CachedResourceLoader to pass in all of the necessary values and populates
them in the PerformanceResourceTiming struct. A follow up patch will actually call
addResourceTiming() as necessary.

Tests: http/tests/w3c/webperf/submission/resource-timing

  • page/Performance.cpp:

(WebCore::Performance::addResourceTiming): Accept all necessary timing data.

  • page/Performance.h:

(WebCore):
(Performance):

  • page/PerformanceEntry.cpp:

(WebCore::PerformanceEntry::PerformanceEntry):

  • page/PerformanceEntry.h:

(PerformanceEntry):

  • page/PerformanceResourceTiming.cpp:

(WebCore::monotonicTimeToDocumentMilliseconds):
(WebCore):
(WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
(WebCore::PerformanceResourceTiming::initiatorType): Return the spec'd values.
(WebCore::PerformanceResourceTiming::fetchStart):
(WebCore::PerformanceResourceTiming::domainLookupStart):
(WebCore::PerformanceResourceTiming::domainLookupEnd):
(WebCore::PerformanceResourceTiming::connectStart):
(WebCore::PerformanceResourceTiming::connectEnd):
(WebCore::PerformanceResourceTiming::secureConnectionStart):
(WebCore::PerformanceResourceTiming::requestStart):
(WebCore::PerformanceResourceTiming::responseStart):
(WebCore::PerformanceResourceTiming::responseEnd):
(WebCore::PerformanceResourceTiming::resourceTimeToDocumentMilliseconds):

  • page/PerformanceResourceTiming.h:

(WebCore::PerformanceResourceTiming::create):
(PerformanceResourceTiming):

Location:
trunk/Source/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r135456 r135458  
     12012-11-20  James Simonsen  <simonjam@chromium.org>
     2
     3        [Resource Timing] Populate PerformanceResourceTiming structs with timing data
     4        https://bugs.webkit.org/show_bug.cgi?id=102862
     5
     6        Reviewed by Tony Gentilcore.
     7
     8        This allows CachedResourceLoader to pass in all of the necessary values and populates
     9        them in the PerformanceResourceTiming struct. A follow up patch will actually call
     10        addResourceTiming() as necessary.
     11
     12        Tests: http/tests/w3c/webperf/submission/resource-timing
     13
     14        * page/Performance.cpp:
     15        (WebCore::Performance::addResourceTiming): Accept all necessary timing data.
     16        * page/Performance.h:
     17        (WebCore):
     18        (Performance):
     19        * page/PerformanceEntry.cpp:
     20        (WebCore::PerformanceEntry::PerformanceEntry):
     21        * page/PerformanceEntry.h:
     22        (PerformanceEntry):
     23        * page/PerformanceResourceTiming.cpp:
     24        (WebCore::monotonicTimeToDocumentMilliseconds):
     25        (WebCore):
     26        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
     27        (WebCore::PerformanceResourceTiming::initiatorType): Return the spec'd values.
     28        (WebCore::PerformanceResourceTiming::fetchStart):
     29        (WebCore::PerformanceResourceTiming::domainLookupStart):
     30        (WebCore::PerformanceResourceTiming::domainLookupEnd):
     31        (WebCore::PerformanceResourceTiming::connectStart):
     32        (WebCore::PerformanceResourceTiming::connectEnd):
     33        (WebCore::PerformanceResourceTiming::secureConnectionStart):
     34        (WebCore::PerformanceResourceTiming::requestStart):
     35        (WebCore::PerformanceResourceTiming::responseStart):
     36        (WebCore::PerformanceResourceTiming::responseEnd):
     37        (WebCore::PerformanceResourceTiming::resourceTimeToDocumentMilliseconds):
     38        * page/PerformanceResourceTiming.h:
     39        (WebCore::PerformanceResourceTiming::create):
     40        (PerformanceResourceTiming):
     41
    1422012-11-21  Hajime Morrita  <morrita@google.com>
    243
  • trunk/Source/WebCore/page/Performance.cpp

    r132147 r135458  
    186186}
    187187
    188 void Performance::addResourceTiming(const ResourceRequest& request, const ResourceResponse& response, double finishTime, Document* requestingDocument)
    189 {
    190     if (!response.resourceLoadTiming() || isResourceTimingBufferFull())
     188void Performance::addResourceTiming(const String& initiatorName, Document* initiatorDocument, const ResourceRequest& request, const ResourceResponse& response, double initiationTime, double finishTime)
     189{
     190    if (isResourceTimingBufferFull())
    191191        return;
    192192
    193     RefPtr<PerformanceEntry> entry = PerformanceResourceTiming::create(request, response, finishTime, requestingDocument);
     193    RefPtr<PerformanceEntry> entry = PerformanceResourceTiming::create(initiatorName, request, response, initiationTime, finishTime, initiatorDocument);
    194194
    195195    m_resourceTimingBuffer.append(entry);
  • trunk/Source/WebCore/page/Performance.h

    r134188 r135458  
    5050
    5151class Document;
    52 class PerformanceEntry;
    53 class PerformanceEntryList;
    5452class ResourceRequest;
    5553class ResourceResponse;
     
    8179    DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitresourcetimingbufferfull);
    8280
    83     void addResourceTiming(const ResourceRequest&, const ResourceResponse&, double finishTime, Document*);
     81    void addResourceTiming(const String& initiatorName, Document*, const ResourceRequest&, const ResourceResponse&, double initiationTime, double finishTime);
    8482#endif
    8583
  • trunk/Source/WebCore/page/PerformanceEntry.cpp

    r120962 r135458  
    3636namespace WebCore {
    3737
    38 PerformanceEntry::PerformanceEntry(const String& name, const String& entryType, double startTime, double duration)
     38PerformanceEntry::PerformanceEntry(const String& name, const String& entryType, double startTime, double finishTime)
    3939    : m_name(name)
    4040    , m_entryType(entryType)
    4141    , m_startTime(startTime)
    42     , m_duration(duration)
     42    , m_duration(finishTime - startTime)
    4343{
    4444}
  • trunk/Source/WebCore/page/PerformanceEntry.h

    r132147 r135458  
    5959
    6060protected:
    61     PerformanceEntry(const String& name, const String& entryType, double startTime, double duration);
     61    PerformanceEntry(const String& name, const String& entryType, double startTime, double finishTime);
    6262
    6363private:
  • trunk/Source/WebCore/page/PerformanceResourceTiming.cpp

    r120962 r135458  
    4545namespace WebCore {
    4646
    47 PerformanceResourceTiming::PerformanceResourceTiming(const ResourceRequest& request, const ResourceResponse& response, double finishTime, Document* requestingDocument)
    48     : PerformanceEntry(request.url().string(), "resource", response.resourceLoadTiming()->requestTime, finishTime)
     47double monotonicTimeToDocumentMilliseconds(Document* document, double seconds)
     48{
     49    ASSERT(seconds >= 0.0);
     50    return document->loader()->timing()->monotonicTimeToZeroBasedDocumentTime(seconds) * 1000.0;
     51}
     52
     53PerformanceResourceTiming::PerformanceResourceTiming(const AtomicString& initiatorType, const ResourceRequest& request, const ResourceResponse& response, double initiationTime, double finishTime, Document* requestingDocument)
     54    : PerformanceEntry(request.url().string(), "resource", monotonicTimeToDocumentMilliseconds(requestingDocument, initiationTime), monotonicTimeToDocumentMilliseconds(requestingDocument, finishTime))
     55    , m_initiatorType(initiatorType)
    4956    , m_timing(response.resourceLoadTiming())
    5057    , m_finishTime(finishTime)
     
    5764}
    5865
    59 String PerformanceResourceTiming::initiatorType() const
     66AtomicString PerformanceResourceTiming::initiatorType() const
    6067{
    61     // FIXME: This should be decided by the resource type.
    62     return "other";
     68    return m_initiatorType;
    6369}
    6470
     
    7884double PerformanceResourceTiming::fetchStart() const
    7985{
    80     return monotonicTimeToDocumentMilliseconds(m_timing->requestTime);
     86    // FIXME: This should be different depending on redirects.
     87    return (startTime());
    8188}
    8289
    8390double PerformanceResourceTiming::domainLookupStart() const
    8491{
    85     if (m_timing->dnsStart < 0)
     92    if (!m_timing || m_timing->dnsStart < 0)
    8693        return fetchStart();
    8794
     
    9198double PerformanceResourceTiming::domainLookupEnd() const
    9299{
    93     if (m_timing->dnsEnd < 0)
     100    if (!m_timing || m_timing->dnsEnd < 0)
    94101        return domainLookupStart();
    95102
     
    99106double PerformanceResourceTiming::connectStart() const
    100107{
    101     if (m_timing->connectStart < 0) // Connection was reused.
     108    if (!m_timing || m_timing->connectStart < 0) // Connection was reused.
    102109        return domainLookupEnd();
    103110
     
    112119double PerformanceResourceTiming::connectEnd() const
    113120{
    114     if (m_timing->connectEnd < 0) // Connection was reused.
     121    if (!m_timing || m_timing->connectEnd < 0) // Connection was reused.
    115122        return connectStart();
    116123
     
    120127double PerformanceResourceTiming::secureConnectionStart() const
    121128{
    122     if (m_timing->sslStart < 0) // Secure connection not negotiated.
    123         return 0;
     129    if (!m_timing || m_timing->sslStart < 0) // Secure connection not negotiated.
     130        return 0.0;
    124131
    125132    return resourceTimeToDocumentMilliseconds(m_timing->sslStart);
     
    128135double PerformanceResourceTiming::requestStart() const
    129136{
     137    if (!m_timing)
     138        return connectEnd();
    130139    return resourceTimeToDocumentMilliseconds(m_timing->sendStart);
    131140}
     
    133142double PerformanceResourceTiming::responseStart() const
    134143{
     144    if (!m_timing)
     145        return requestStart();
    135146    // FIXME: This number isn't exactly correct. See the notes in PerformanceTiming::responseStart().
    136147    return resourceTimeToDocumentMilliseconds(m_timing->receiveHeadersEnd);
     
    139150double PerformanceResourceTiming::responseEnd() const
    140151{
    141     return monotonicTimeToDocumentMilliseconds(m_finishTime);
    142 }
    143 
    144 double PerformanceResourceTiming::monotonicTimeToDocumentMilliseconds(double seconds) const
    145 {
    146     ASSERT(seconds >= 0.0);
    147     return m_requestingDocument->loader()->timing()->convertMonotonicTimeToDocumentTime(seconds) * 1000.0;
     152    if (!m_timing)
     153        return responseStart();
     154    return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_finishTime);
    148155}
    149156
    150157double PerformanceResourceTiming::resourceTimeToDocumentMilliseconds(int deltaMilliseconds) const
    151158{
    152     return monotonicTimeToDocumentMilliseconds(m_timing->requestTime) + deltaMilliseconds;
     159    if (!deltaMilliseconds)
     160        return 0.0;
     161    return monotonicTimeToDocumentMilliseconds(m_requestingDocument.get(), m_timing->requestTime) + deltaMilliseconds;
    153162}
    154163
  • trunk/Source/WebCore/page/PerformanceResourceTiming.h

    r120962 r135458  
    4949class PerformanceResourceTiming : public PerformanceEntry {
    5050public:
    51     static PassRefPtr<PerformanceResourceTiming> create(const ResourceRequest& request, const ResourceResponse& response, double finishTime, Document* requestingDocument)
     51    static PassRefPtr<PerformanceResourceTiming> create(const AtomicString& initiatorType, const ResourceRequest& request, const ResourceResponse& response, double initiationTime, double finishTime, Document* requestingDocument)
    5252    {
    53         return adoptRef(new PerformanceResourceTiming(request, response, finishTime, requestingDocument));
     53        return adoptRef(new PerformanceResourceTiming(initiatorType, request, response, initiationTime, finishTime, requestingDocument));
    5454    }
    5555
    56     String initiatorType() const;
     56    AtomicString initiatorType() const;
    5757
    5858    double redirectStart() const;
     
    7171
    7272private:
    73     PerformanceResourceTiming(const ResourceRequest&, const ResourceResponse&, double finishTime, Document*);
     73    PerformanceResourceTiming(const AtomicString& initatorType, const ResourceRequest&, const ResourceResponse&, double initiationTime, double finishTime, Document*);
    7474    ~PerformanceResourceTiming();
    7575
    76     double monotonicTimeToDocumentMilliseconds(double seconds) const;
    7776    double resourceTimeToDocumentMilliseconds(int deltaMilliseconds) const;
    7877
     78    AtomicString m_initiatorType;
    7979    RefPtr<ResourceLoadTiming> m_timing;
    8080    double m_finishTime;
Note: See TracChangeset for help on using the changeset viewer.