Web Inspector: Provide UIString descriptions to improve localizations
[WebKit-https.git] / Source / WebInspectorUI / UserInterface / Models / LayoutTimelineRecord.js
1 /*
2  * Copyright (C) 2013 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 WI.LayoutTimelineRecord = class LayoutTimelineRecord extends WI.TimelineRecord
27 {
28     constructor(eventType, startTime, endTime, callFrames, sourceCodeLocation, quad)
29     {
30         super(WI.TimelineRecord.Type.Layout, startTime, endTime, callFrames, sourceCodeLocation);
31
32         console.assert(eventType);
33         console.assert(!quad || quad instanceof WI.Quad);
34
35         if (eventType in WI.LayoutTimelineRecord.EventType)
36             eventType = WI.LayoutTimelineRecord.EventType[eventType];
37
38         this._eventType = eventType;
39         this._quad = quad || null;
40     }
41
42     // Static
43
44     static displayNameForEventType(eventType)
45     {
46         switch (eventType) {
47         case WI.LayoutTimelineRecord.EventType.InvalidateStyles:
48             return WI.UIString("Styles Invalidated");
49         case WI.LayoutTimelineRecord.EventType.RecalculateStyles:
50             return WI.UIString("Styles Recalculated");
51         case WI.LayoutTimelineRecord.EventType.InvalidateLayout:
52             return WI.UIString("Layout Invalidated");
53         case WI.LayoutTimelineRecord.EventType.ForcedLayout:
54             return WI.UIString("Forced Layout", "Layout phase records that were imperative (forced)");
55         case WI.LayoutTimelineRecord.EventType.Layout:
56             return WI.repeatedUIString.timelineRecordLayout();
57         case WI.LayoutTimelineRecord.EventType.Paint:
58             return WI.repeatedUIString.timelineRecordPaint();
59         case WI.LayoutTimelineRecord.EventType.Composite:
60             return WI.repeatedUIString.timelineRecordComposite();
61         }
62     }
63
64     // Import / Export
65
66     static fromJSON(json)
67     {
68         let {eventType, startTime, endTime, callFrames, sourceCodeLocation, quad} = json;
69         quad = quad ? WI.Quad.fromJSON(quad) : null;
70         return new WI.LayoutTimelineRecord(eventType, startTime, endTime, callFrames, sourceCodeLocation, quad);
71     }
72
73     toJSON()
74     {
75         // FIXME: CallFrames
76         // FIXME: SourceCodeLocation
77
78         return {
79             type: this.type,
80             eventType: this._eventType,
81             startTime: this.startTime,
82             endTime: this.endTime,
83             quad: this._quad || undefined,
84         }
85     }
86
87     // Public
88
89     get eventType()
90     {
91         return this._eventType;
92     }
93
94     get width()
95     {
96         return this._quad ? this._quad.width : NaN;
97     }
98
99     get height()
100     {
101         return this._quad ? this._quad.height : NaN;
102     }
103
104     get area()
105     {
106         return this.width * this.height;
107     }
108
109     get quad()
110     {
111         return this._quad;
112     }
113
114     saveIdentityToCookie(cookie)
115     {
116         super.saveIdentityToCookie(cookie);
117
118         cookie[WI.LayoutTimelineRecord.EventTypeCookieKey] = this._eventType;
119     }
120 };
121
122 WI.LayoutTimelineRecord.EventType = {
123     InvalidateStyles: "invalidate-styles",
124     RecalculateStyles: "recalculate-styles",
125     InvalidateLayout: "invalidate-layout",
126     ForcedLayout: "forced-layout",
127     Layout: "layout",
128     Paint: "paint",
129     Composite: "composite"
130 };
131
132 WI.LayoutTimelineRecord.TypeIdentifier = "layout-timeline-record";
133 WI.LayoutTimelineRecord.EventTypeCookieKey = "layout-timeline-record-event-type";