Source/WebCore/ChangeLog

 12012-08-29 Andrey Kosyakov <caseq@chromium.org>
 2
 3 Web Inspector: display the number of dirty render objects in Layout timeline event
 4 https://bugs.webkit.org/show_bug.cgi?id=95331
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Count the render objects that need layout in InspectorTimelineAgent::willLayout()
 9 and display the number in popover over Layout record in Timeline panel.
 10
 11 * inspector/InspectorTimelineAgent.cpp:
 12 (WebCore::InspectorTimelineAgent::willLayout):
 13 * inspector/TimelineRecordFactory.cpp:
 14 (WebCore):
 15 (WebCore::TimelineRecordFactory::createLayoutData):
 16 * inspector/TimelineRecordFactory.h:
 17 (TimelineRecordFactory):
 18 * inspector/front-end/TimelinePresentationModel.js:
 19 (WebInspector.TimelinePresentationModel.Record.prototype._generatePopupContentWithImagePreview):
 20
1212013-03-22 Andrey Kosyakov <caseq@chromium.org>
222
323 Web Inspector: timeline paint rectangles are off for transformed layers

Source/WebCore/inspector/InspectorTimelineAgent.cpp

@@void InspectorTimelineAgent::didInvalidateLayout(Frame* frame)
263263
264264void InspectorTimelineAgent::willLayout(Frame* frame)
265265{
266  pushCurrentRecord(InspectorObject::create(), TimelineRecordType::Layout, true, frame);
 266 RenderObject* root = frame->view()->layoutRoot();
 267 if (!root)
 268 root = frame->document()->renderer();
 269 int needLayoutCount = 0;
 270 for (RenderObject* o = root; o;) {
 271 if (!root->needsLayout()) {
 272 o = o->nextInPreOrderAfterChildren();
 273 continue;
 274 }
 275 ++needLayoutCount;
 276 o = o->nextInPreOrder();
 277 }
 278 pushCurrentRecord(TimelineRecordFactory::createLayoutData(needLayoutCount), TimelineRecordType::Layout, true, frame);
267279}
268280
269281void InspectorTimelineAgent::didLayout(RenderObject* root)

@@void InspectorTimelineAgent::didLayout(RenderObject* root)
275287 Vector<FloatQuad> quads;
276288 root->absoluteQuads(quads);
277289 if (quads.size() >= 1)
278  entry.data = TimelineRecordFactory::createLayoutData(quads[0]);
 290 TimelineRecordFactory::appendLayoutRoot(entry.data.get(), quads[0]);
279291 else
280292 ASSERT_NOT_REACHED();
281293 didCompleteCurrentRecord(TimelineRecordType::Layout);

Source/WebCore/inspector/TimelineRecordFactory.cpp

@@PassRefPtr<InspectorObject> TimelineRecordFactory::createReceiveResourceData(con
178178 data->setNumber("encodedDataLength", length);
179179 return data.release();
180180}
 181
 182PassRefPtr<InspectorObject> TimelineRecordFactory::createLayoutData(int nodeCount)
 183{
 184 RefPtr<InspectorObject> data = InspectorObject::create();
 185 data->setNumber("nodeCount", nodeCount);
 186 return data.release();
 187}
181188
182189PassRefPtr<InspectorObject> TimelineRecordFactory::createDecodeImageData(const String& imageType)
183190{

@@PassRefPtr<InspectorObject> TimelineRecordFactory::createPaintData(const FloatQu
235242 return data.release();
236243}
237244
238 PassRefPtr<InspectorObject> TimelineRecordFactory::createLayoutData(const FloatQuad& quad)
 245void TimelineRecordFactory::appendLayoutRoot(InspectorObject* data, const FloatQuad& quad)
239246{
240  RefPtr<InspectorObject> data = InspectorObject::create();
241247 data->setArray("root", createQuad(quad));
242  return data.release();
243248}
244249
245250} // namespace WebCore

Source/WebCore/inspector/TimelineRecordFactory.h

@@namespace WebCore {
8080
8181 static PassRefPtr<InspectorObject> createResourceFinishData(const String& requestId, bool didFail, double finishTime);
8282
83  static void addRectData(InspectorObject*, const LayoutRect&);
 83 static PassRefPtr<InspectorObject> createLayoutData(int nodeCount);
 84
 85 static PassRefPtr<InspectorObject> createPaintData(const LayoutRect&);
8486
8587 static PassRefPtr<InspectorObject> createDecodeImageData(const String& imageType);
8688

@@namespace WebCore {
9496
9597 static PassRefPtr<InspectorObject> createPaintData(const FloatQuad&);
9698
97  static PassRefPtr<InspectorObject> createLayoutData(const FloatQuad&);
 99 static void appendLayoutRoot(InspectorObject* data, const FloatQuad&);
98100
99101#if ENABLE(WEB_SOCKETS)
100102 static inline PassRefPtr<InspectorObject> createWebSocketCreateData(unsigned long identifier, const KURL& url, const String& protocol)

Source/WebCore/inspector/front-end/TimelinePresentationModel.js

@@WebInspector.TimelinePresentationModel.Record.prototype = {
10451045 callStackLabel = WebInspector.UIString("Styles recalculation forced");
10461046 break;
10471047 case recordTypes.Layout:
 1048 if (this.data["nodeCount"])
 1049 contentHelper.appendTextRow(WebInspector.UIString("Nodes to layout"), this.data["nodeCount"]);
10481050 callSiteStackTraceLabel = WebInspector.UIString("Layout invalidated");
10491051 if (this.stackTrace) {
10501052 callStackLabel = WebInspector.UIString("Layout forced");

LayoutTests/ChangeLog

 12012-08-29 Andrey Kosyakov <caseq@chromium.org>
 2
 3 Web Inspector: display the number of dirty render objects in Layout timeline event
 4 https://bugs.webkit.org/show_bug.cgi?id=95331
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * inspector/timeline/timeline-layout-expected.txt: rebaselined to include nodeCount;
 9 * inspector/timeline/timeline-test.js: added nodeCount to custom formatted timeline record fields;
 10
1112013-03-22 Andrey Kosyakov <caseq@chromium.org>
212
313 Web Inspector: timeline paint rectangles are off for transformed layers

LayoutTests/http/tests/inspector/timeline-test.js

@@InspectorTest.timelinePropertyFormatters = {
2222 identifier: "formatAsTypeName",
2323 clip: "formatAsTypeName",
2424 root: "formatAsTypeName",
 25 nodeCount: "formatAsTypeName",
2526};
2627
2728InspectorTest.startTimeline = function(callback)

LayoutTests/inspector/timeline/timeline-layout-expected.txt

@@Layout Properties:
66 children : <object>
77 counters : <object>
88 data : {
 9 nodeCount : <number>
910 root : <object>
1011 }
1112 endTime : <number>