Changeset 57280 in webkit


Ignore:
Timestamp:
Apr 8, 2010 8:27:32 AM (14 years ago)
Author:
pfeldman@chromium.org
Message:

2010-04-08 Pavel Feldman <pfeldman@chromium.org>

Reviewed by Yury Semikhatsky.

Web Inspector: Render Load, DOM Content and MarkTimeline event dividers on Timeline panel.

https://bugs.webkit.org/show_bug.cgi?id=37267

  • English.lproj/localizedStrings.js:
  • inspector/InspectorController.cpp: (WebCore::InspectorController::mainResourceFiredDOMContentEvent): (WebCore::InspectorController::mainResourceFiredLoadEvent):
  • inspector/InspectorController.h:
  • inspector/InspectorTimelineAgent.cpp: (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent): (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
  • inspector/InspectorTimelineAgent.h: (WebCore::):
  • inspector/front-end/ResourcesPanel.js: (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):
  • inspector/front-end/TimelineAgent.js:
  • inspector/front-end/TimelineGrid.js: (WebInspector.TimelineGrid.prototype.removeEventDividers):
  • inspector/front-end/TimelinePanel.js: (WebInspector.TimelinePanel): (WebInspector.TimelinePanel.prototype.get _recordStyles): (WebInspector.TimelinePanel.prototype._updateMarks): (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline): (WebInspector.TimelinePanel.prototype._clearPanel): (WebInspector.TimelinePanel.prototype._refresh): (WebInspector.TimelinePanel.prototype._refreshRecords): (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition): (WebInspector.TimelineRecordGraphRow.prototype.update):
  • inspector/front-end/inspector.css: (.resources-event-divider): (.resources-red-divider): (.resources-blue-divider): (.resources-orange-divider):
Location:
trunk
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r57279 r57280  
     12010-04-08  Pavel Feldman  <pfeldman@chromium.org>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: Render Load, DOM Content and MarkTimeline event dividers on Timeline panel.
     6
     7        https://bugs.webkit.org/show_bug.cgi?id=37267
     8
     9        * inspector/timeline-enum-stability-expected.txt:
     10
    1112010-04-08  Kent Tamura  <tkent@chromium.org>
    212
  • trunk/LayoutTests/inspector/timeline-enum-stability-expected.txt

    r57150 r57280  
    2121WebInspector.TimelineAgent.RecordType.ResourceReceiveData : 16
    2222WebInspector.TimelineAgent.RecordType.GCEvent : 17
     23WebInspector.TimelineAgent.RecordType.MarkDOMContentEventType : 18
     24WebInspector.TimelineAgent.RecordType.MarkLoadEventType : 19
    2325
  • trunk/WebCore/ChangeLog

    r57277 r57280  
     12010-04-08  Pavel Feldman  <pfeldman@chromium.org>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: Render Load, DOM Content and MarkTimeline event dividers on Timeline panel.
     6
     7        https://bugs.webkit.org/show_bug.cgi?id=37267
     8
     9        * English.lproj/localizedStrings.js:
     10        * inspector/InspectorController.cpp:
     11        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
     12        (WebCore::InspectorController::mainResourceFiredLoadEvent):
     13        * inspector/InspectorController.h:
     14        * inspector/InspectorTimelineAgent.cpp:
     15        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
     16        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
     17        * inspector/InspectorTimelineAgent.h:
     18        (WebCore::):
     19        * inspector/front-end/ResourcesPanel.js:
     20        (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):
     21        * inspector/front-end/TimelineAgent.js:
     22        * inspector/front-end/TimelineGrid.js:
     23        (WebInspector.TimelineGrid.prototype.removeEventDividers):
     24        * inspector/front-end/TimelinePanel.js:
     25        (WebInspector.TimelinePanel):
     26        (WebInspector.TimelinePanel.prototype.get _recordStyles):
     27        (WebInspector.TimelinePanel.prototype._updateMarks):
     28        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
     29        (WebInspector.TimelinePanel.prototype._clearPanel):
     30        (WebInspector.TimelinePanel.prototype._refresh):
     31        (WebInspector.TimelinePanel.prototype._refreshRecords):
     32        (WebInspector.TimelineCalculator.prototype.computeBarGraphWindowPosition):
     33        (WebInspector.TimelineRecordGraphRow.prototype.update):
     34        * inspector/front-end/inspector.css:
     35        (.resources-event-divider):
     36        (.resources-red-divider):
     37        (.resources-blue-divider):
     38        (.resources-orange-divider):
     39
    1402010-04-01  Antonio Gomes  <tonikitoo@webkit.org>
    241
  • trunk/WebCore/inspector/InspectorController.cpp

    r56825 r57280  
    842842    if (m_mainResource) {
    843843        m_mainResource->markDOMContentEventTime();
     844        if (m_timelineAgent)
     845            m_timelineAgent->didMarkDOMContentEvent();
    844846        if (m_frontend)
    845847            m_mainResource->updateScriptObject(m_frontend.get());
     
    854856    if (m_mainResource) {
    855857        m_mainResource->markLoadEventTime();
     858        if (m_timelineAgent)
     859            m_timelineAgent->didMarkLoadEvent();
    856860        if (m_frontend)
    857861            m_mainResource->updateScriptObject(m_frontend.get());
  • trunk/WebCore/inspector/InspectorController.h

    r56670 r57280  
    215215    void endGroup(MessageSource source, unsigned lineNumber, const String& sourceURL);
    216216
    217     void markTimeline(const String& message); 
     217    void markTimeline(const String& message);
    218218
    219219#if ENABLE(JAVASCRIPT_DEBUGGER)
  • trunk/WebCore/inspector/InspectorTimelineAgent.cpp

    r57150 r57280  
    245245}
    246246
     247void InspectorTimelineAgent::didMarkDOMContentEvent()
     248{
     249    ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
     250    addRecordToTimeline(record, MarkDOMContentEventType);
     251}
     252
     253void InspectorTimelineAgent::didMarkLoadEvent()
     254{
     255    ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS());
     256    addRecordToTimeline(record, MarkLoadEventType);
     257}
     258
    247259void InspectorTimelineAgent::reset()
    248260{
  • trunk/WebCore/inspector/InspectorTimelineAgent.h

    r57150 r57280  
    6969    ReceiveResourceDataTimelineRecordType = 16,
    7070    GCEventTimelineRecordType = 17,
     71    MarkDOMContentEventType = 18,
     72    MarkLoadEventType = 19
    7173};
    7274
     
    112114
    113115    void didMarkTimeline(const String&);
     116    void didMarkDOMContentEvent();
     117    void didMarkLoadEvent();
    114118
    115119    void willSendResourceRequest(unsigned long, bool isMainResource, const ResourceRequest&);
  • trunk/WebCore/inspector/front-end/ResourcesPanel.js

    r56143 r57280  
    579579
    580580            var loadDivider = document.createElement("div");
    581             loadDivider.className = "resources-onload-divider";
     581            loadDivider.className = "resources-event-divider resources-red-divider";
    582582
    583583            var loadDividerPadding = document.createElement("div");
     
    594594
    595595            var domContentDivider = document.createElement("div");
    596             domContentDivider.className = "resources-ondomcontent-divider";
     596            domContentDivider.className = "resources-event-divider resources-blue-divider";
    597597           
    598598            var domContentDividerPadding = document.createElement("div");
  • trunk/WebCore/inspector/front-end/TimelineAgent.js

    r57150 r57280  
    5252    FunctionCall : 15,
    5353    ResourceReceiveData: 16,
    54     GCEvent : 17
     54    GCEvent : 17,
     55    MarkDOMContentEventType : 18,
     56    MarkLoadEventType : 19
    5557};
    5658
  • trunk/WebCore/inspector/front-end/TimelineGrid.js

    r53588 r57280  
    3838
    3939    this._dividersElement = document.createElement("div");
    40     this._dividersElement.id = "resources-dividers";
     40    this._dividersElement.className = "resources-dividers";
    4141    this.element.appendChild(this._dividersElement);
    4242
    4343    this._eventDividersElement = document.createElement("div");
    44     this._eventDividersElement.id = "resources-event-dividers";
     44    this._eventDividersElement.className = "resources-event-dividers";
    4545    this.element.appendChild(this._eventDividersElement);
    4646
    4747    this._dividersLabelBarElement = document.createElement("div");
    48     this._dividersLabelBarElement.id = "resources-dividers-label-bar";
     48    this._dividersLabelBarElement.className = "resources-dividers-label-bar";
    4949    this.element.appendChild(this._dividersLabelBarElement);
    5050}
     
    136136    },
    137137
     138    removeEventDividers: function()
     139    {
     140        this._eventDividersElement.removeChildren();
     141    },
     142
    138143    setScrollAndDividerTop: function(scrollTop, dividersTop)
    139144    {
  • trunk/WebCore/inspector/front-end/TimelineOverviewPane.js

    r56997 r57280  
    164164    },
    165165
     166    updateEventDividers: function(records, dividerConstructor)
     167    {
     168        this._overviewGrid.removeEventDividers();
     169        for (var i = 0; i < records.length; ++i) {
     170            var record = records[i];
     171            var positions = this._overviewCalculator.computeBarGraphPercentages(record);
     172            var divider = dividerConstructor(record);
     173            divider.style.left = positions.start + "%";
     174            this._overviewGrid.addEventDivider(divider);
     175        }
     176    },
     177
    166178    setSidebarWidth: function(width)
    167179    {
  • trunk/WebCore/inspector/front-end/TimelinePanel.js

    r57150 r57280  
    9696    this.toggleFilterButton.toggled = true;
    9797    this._calculator._showShortEvents = this.toggleFilterButton.toggled;
     98    this._markTimelineRecords = [];
     99    this._expandOffset = 15;
    98100}
    99101
     
    153155            recordStyles[recordTypes.ResourceReceiveData] = { title: WebInspector.UIString("Receive Data"), category: this.categories.loading };
    154156            recordStyles[recordTypes.GCEvent] = { title: WebInspector.UIString("GC Event"), category: this.categories.scripting };
     157            recordStyles[recordTypes.MarkDOMContentEventType] = { title: WebInspector.UIString("DOMContent event"), category: this.categories.scripting };
     158            recordStyles[recordTypes.MarkLoadEventType] = { title: WebInspector.UIString("Load event"), category: this.categories.scripting };
    155159            this._recordStylesArray = recordStyles;
    156160        }
     
    176180    {
    177181        this.recordsCounter.textContent = WebInspector.UIString("%d of %d captured records are visible", this._rootRecord._visibleRecordsCount, this._rootRecord._allRecordsCount);
     182    },
     183
     184    _updateEventDividers: function()
     185    {
     186        this._timelineGrid.removeEventDividers();
     187        var clientWidth = this._graphRowsElement.offsetWidth - this._expandOffset;
     188        for (var i = 0; i < this._markTimelineRecords.length; ++i) {
     189            var record = this._markTimelineRecords[i];
     190            var positions = this._calculator.computeBarGraphWindowPosition(record, clientWidth);
     191            if (positions.left < 0 || positions.left >= clientWidth)
     192                continue;
     193
     194            var divider = this._createEventDivider(record);
     195            divider.style.left = (positions.left + this._expandOffset) + "px";
     196
     197            this._timelineGrid.addEventDivider(divider);
     198        }
     199        this._overviewPane.updateEventDividers(this._markTimelineRecords, this._createEventDivider.bind(this));
     200    },
     201
     202    _createEventDivider: function(record)
     203    {
     204        var eventDivider = document.createElement("div");
     205        eventDivider.className = "resources-event-divider";
     206        var recordTypes = WebInspector.TimelineAgent.RecordType;
     207
     208        var eventDividerPadding = document.createElement("div");
     209        eventDividerPadding.className = "resources-event-divider-padding";
     210        eventDividerPadding.title = record.title;
     211
     212        if (record.type === recordTypes.MarkDOMContentEventType)
     213            eventDivider.className += " resources-blue-divider";
     214        else if (record.type === recordTypes.MarkLoadEventType)
     215            eventDivider.className += " resources-red-divider";
     216        else if (record.type === recordTypes.MarkTimeline) {
     217            eventDivider.className += " resources-orange-divider";
     218            eventDividerPadding.title = record.data.message;
     219        }
     220        eventDividerPadding.appendChild(eventDivider);
     221        return eventDividerPadding;
    178222    },
    179223
     
    244288            }
    245289        }
     290        var recordTypes = WebInspector.TimelineAgent.RecordType;
    246291
    247292        var formattedRecord = new WebInspector.TimelinePanel.FormattedRecord(record, parentRecord, this._recordStyles, this._sendRequestRecords, this._timerRecords);
     293
     294        if (record.type === recordTypes.MarkDOMContentEventType || record.type === recordTypes.MarkLoadEventType) {
     295            // No bar entry for load events.
     296            this._markTimelineRecords.push(formattedRecord);
     297            return;
     298        }
     299
    248300        ++this._rootRecord._allRecordsCount;
    249301
     
    261313            }
    262314        }
     315
     316        // Keep bar entry for mark timeline since nesting might be interesting to the user.
     317        if (record.type === recordTypes.MarkTimeline)
     318            this._markTimelineRecords.push(formattedRecord);
    263319    },
    264320
     
    294350    _clearPanel: function()
    295351    {
     352        this._markTimelineRecords = [];
    296353        this._sendRequestRecords = {};
    297354        this._timerRecords = {};
     
    361418        this._refreshRecords(!this._boundariesAreValid);
    362419        this._updateRecordsCounter();
     420        this._updateEventDividers();
    363421        this._boundariesAreValid = true;
    364422    },
     
    418476        // Define row height, should be in sync with styles for timeline graphs.
    419477        const rowHeight = 18;
    420         const expandOffset = 15;
    421478
    422479        // Convert visible area to visible indexes. Always include top-level record for a visible nested record.
     
    452509
    453510            listRowElement.row.update(record, isEven, this._calculator, visibleTop);
    454             graphRowElement.row.update(record, isEven, this._calculator, width, expandOffset, i);
     511            graphRowElement.row.update(record, isEven, this._calculator, width, this._expandOffset, i);
    455512
    456513            listRowElement = listRowElement.nextSibling;
     
    473530        this.sidebarResizeElement.style.height = this.sidebarElement.clientHeight + "px";
    474531        // Reserve some room for expand / collapse controls to the left for records that start at 0ms.
    475         var timelinePaddingLeft = this._calculator.windowLeft === 0 ? expandOffset : 0;
     532        var timelinePaddingLeft = this._calculator.windowLeft === 0 ? this._expandOffset : 0;
    476533        if (updateBoundaries)
    477534            this._timelineGrid.updateDividers(true, this._calculator, timelinePaddingLeft);
     
    531588    },
    532589
    533     computeBarGraphWindowPosition: function(record, clientWidth, expandOffset)
     590    computeBarGraphWindowPosition: function(record, clientWidth)
    534591    {
    535592        const minWidth = 5;
    536593        const borderWidth = 4;
    537         var workingArea = clientWidth - expandOffset - minWidth - borderWidth;
     594        var workingArea = clientWidth - minWidth - borderWidth;
    538595        var percentages = this.computeBarGraphPercentages(record);
    539596        var left = percentages.start / 100 * workingArea;
     
    671728        this._record = record;
    672729        this.element.className = "timeline-graph-side timeline-category-" + record.category.name + (isEven ? " even" : "");
    673         var barPosition = calculator.computeBarGraphWindowPosition(record, clientWidth, expandOffset);
     730        var barPosition = calculator.computeBarGraphWindowPosition(record, clientWidth - expandOffset);
    674731        this._barWithChildrenElement.style.left = barPosition.left + expandOffset + "px";
    675732        this._barWithChildrenElement.style.width = barPosition.widthWithChildren + "px";
  • trunk/WebCore/inspector/front-end/inspector.css

    r57206 r57280  
    26682668}
    26692669
    2670 #resources-dividers {
     2670.resources-dividers {
    26712671    position: absolute;
    26722672    left: 0;
     
    26772677}
    26782678
    2679 #resources-event-dividers {
     2679.resources-event-dividers {
    26802680    position: absolute;
    26812681    left: 0;
     
    26872687}
    26882688
    2689 #resources-dividers-label-bar {
     2689.timeline .resources-event-dividers {
     2690    height: 19px;
     2691}
     2692
     2693.resources-dividers-label-bar {
    26902694    position: absolute;
    26912695    top: 0;
     
    27152719}
    27162720
    2717 .resources-onload-divider {
     2721.resources-event-divider {
    27182722    position: absolute;
    27192723    width: 2px;
     
    27212725    bottom: 0;
    27222726    z-index: 300;
     2727}
     2728
     2729.resources-red-divider {
    27232730    background-color: rgba(255, 0, 0, 0.5);
    27242731}
    27252732
    2726 .resources-ondomcontent-divider {
    2727     position: absolute;
    2728     width: 2px;
    2729     top: 0;
    2730     bottom: 0;
    2731     z-index: 300;
     2733.resources-blue-divider {
    27322734    background-color: rgba(0, 0, 255, 0.5);
     2735}
     2736
     2737.resources-orange-divider {
     2738    background-color: rgba(255, 178, 23, 0.5);
    27332739}
    27342740
Note: See TracChangeset for help on using the changeset viewer.