<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[160941] trunk/Tools</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/160941">160941</a></dd>
<dt>Author</dt> <dd>bjonesbe@adobe.com</dd>
<dt>Date</dt> <dd>2013-12-20 16:05:40 -0800 (Fri, 20 Dec 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>Pretty print LayoutUnit, LayoutPoint, and LayoutSize in gdb and lldb
https://bugs.webkit.org/show_bug.cgi?id=126080

Reviewed by Anders Carlsson.

This changes the output of printing LayoutUnits to be in px, removing
the need to divide by 64 manually.

This will lead to gdb output like:

m_frameRect = {
    m_location = LayoutPoint(0px, 0px),
    m_size = LayoutSize(800px, 585px)
}

And lldb output like:

(const WebCore::LayoutRect) $0 = {
  m_location = { x = 744px, y = 1px }
  m_size = { width = 236px, height = 40px }
}

This patch is based on patch for Blink by cbiesinger@chromium.org.

* gdb/webkit.py:
(WebCoreLayoutUnitPrinter):
(WebCoreLayoutUnitPrinter.__init__):
(WebCoreLayoutUnitPrinter.to_string):
(WebCoreLayoutSizePrinter):
(WebCoreLayoutSizePrinter.__init__):
(WebCoreLayoutSizePrinter.to_string):
(WebCoreLayoutPointPrinter):
(WebCoreLayoutPointPrinter.__init__):
(WebCoreLayoutPointPrinter.to_string):
(add_pretty_printers):
* lldb/lldb_webkit.py:
(__lldb_init_module):
(WebCoreLayoutUnit_SummaryProvider):
(WebCoreLayoutSize_SummaryProvider):
(WebCoreLayoutPoint_SummaryProvider):
(WebCoreLayoutUnitProvider):
(WebCoreLayoutUnitProvider.__init__):
(WebCoreLayoutUnitProvider.to_string):
(WebCoreLayoutSizeProvider):
(WebCoreLayoutSizeProvider.__init__):
(WebCoreLayoutSizeProvider.get_width):
(WebCoreLayoutSizeProvider.get_height):
(WebCoreLayoutPointProvider):
(WebCoreLayoutPointProvider.__init__):
(WebCoreLayoutPointProvider.get_x):
(WebCoreLayoutPointProvider.get_y):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsgdbwebkitpy">trunk/Tools/gdb/webkit.py</a></li>
<li><a href="#trunkToolslldblldb_webkitpy">trunk/Tools/lldb/lldb_webkit.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (160940 => 160941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2013-12-20 23:56:38 UTC (rev 160940)
+++ trunk/Tools/ChangeLog        2013-12-21 00:05:40 UTC (rev 160941)
</span><span class="lines">@@ -1,3 +1,57 @@
</span><ins>+2013-12-20  Bem Jones-Bey  &lt;bjonesbe@adobe.com&gt;
+
+        Pretty print LayoutUnit, LayoutPoint, and LayoutSize in gdb and lldb
+        https://bugs.webkit.org/show_bug.cgi?id=126080
+
+        Reviewed by Anders Carlsson.
+
+        This changes the output of printing LayoutUnits to be in px, removing
+        the need to divide by 64 manually.
+
+        This will lead to gdb output like:
+
+        m_frameRect = {
+            m_location = LayoutPoint(0px, 0px),
+            m_size = LayoutSize(800px, 585px)
+        }
+
+        And lldb output like:
+
+        (const WebCore::LayoutRect) $0 = {
+          m_location = { x = 744px, y = 1px }
+          m_size = { width = 236px, height = 40px }
+        }
+
+        This patch is based on patch for Blink by cbiesinger@chromium.org.
+
+        * gdb/webkit.py:
+        (WebCoreLayoutUnitPrinter):
+        (WebCoreLayoutUnitPrinter.__init__):
+        (WebCoreLayoutUnitPrinter.to_string):
+        (WebCoreLayoutSizePrinter):
+        (WebCoreLayoutSizePrinter.__init__):
+        (WebCoreLayoutSizePrinter.to_string):
+        (WebCoreLayoutPointPrinter):
+        (WebCoreLayoutPointPrinter.__init__):
+        (WebCoreLayoutPointPrinter.to_string):
+        (add_pretty_printers):
+        * lldb/lldb_webkit.py:
+        (__lldb_init_module):
+        (WebCoreLayoutUnit_SummaryProvider):
+        (WebCoreLayoutSize_SummaryProvider):
+        (WebCoreLayoutPoint_SummaryProvider):
+        (WebCoreLayoutUnitProvider):
+        (WebCoreLayoutUnitProvider.__init__):
+        (WebCoreLayoutUnitProvider.to_string):
+        (WebCoreLayoutSizeProvider):
+        (WebCoreLayoutSizeProvider.__init__):
+        (WebCoreLayoutSizeProvider.get_width):
+        (WebCoreLayoutSizeProvider.get_height):
+        (WebCoreLayoutPointProvider):
+        (WebCoreLayoutPointProvider.__init__):
+        (WebCoreLayoutPointProvider.get_x):
+        (WebCoreLayoutPointProvider.get_y):
+
</ins><span class="cx"> 2013-12-20  Martin Robinson  &lt;mrobinson@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] [CMake] Add support for building ImageDiff
</span></span></pre></div>
<a id="trunkToolsgdbwebkitpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/gdb/webkit.py (160940 => 160941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/gdb/webkit.py        2013-12-20 23:56:38 UTC (rev 160940)
+++ trunk/Tools/gdb/webkit.py        2013-12-21 00:05:40 UTC (rev 160941)
</span><span class="lines">@@ -166,6 +166,33 @@
</span><span class="cx">         return WTFStringPrinter(self.val['m_value']).to_string()
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+class WebCoreLayoutUnitPrinter:
+    &quot;Print a WebCore::LayoutUnit&quot;
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        return &quot;%gpx&quot; % (self.val['m_value'] / 64.0)
+
+
+class WebCoreLayoutSizePrinter:
+    &quot;Print a WebCore::LayoutSize&quot;
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        return 'LayoutSize(%s, %s)' % (WebCoreLayoutUnitPrinter(self.val['m_width']).to_string(), WebCoreLayoutUnitPrinter(self.val['m_height']).to_string())
+
+
+class WebCoreLayoutPointPrinter:
+    &quot;Print a WebCore::LayoutPoint&quot;
+    def __init__(self, val):
+        self.val = val
+
+    def to_string(self):
+        return 'LayoutPoint(%s, %s)' % (WebCoreLayoutUnitPrinter(self.val['m_x']).to_string(), WebCoreLayoutUnitPrinter(self.val['m_y']).to_string())
+
+
</ins><span class="cx"> class WebCoreQualifiedNamePrinter(StringPrinter):
</span><span class="cx">     &quot;Print a WebCore::QualifiedName&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -271,6 +298,9 @@
</span><span class="cx">         (re.compile(&quot;^WTF::CString$&quot;), WTFCStringPrinter),
</span><span class="cx">         (re.compile(&quot;^WTF::String$&quot;), WTFStringPrinter),
</span><span class="cx">         (re.compile(&quot;^WTF::StringImpl$&quot;), WTFStringImplPrinter),
</span><ins>+        (re.compile(&quot;^WebCore::LayoutUnit$&quot;), WebCoreLayoutUnitPrinter),
+        (re.compile(&quot;^WebCore::LayoutPoint$&quot;), WebCoreLayoutPointPrinter),
+        (re.compile(&quot;^WebCore::LayoutSize$&quot;), WebCoreLayoutSizePrinter),
</ins><span class="cx">         (re.compile(&quot;^WebCore::QualifiedName$&quot;), WebCoreQualifiedNamePrinter),
</span><span class="cx">         (re.compile(&quot;^JSC::Identifier$&quot;), JSCIdentifierPrinter),
</span><span class="cx">         (re.compile(&quot;^JSC::JSString$&quot;), JSCJSStringPrinter),
</span></span></pre></div>
<a id="trunkToolslldblldb_webkitpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/lldb/lldb_webkit.py (160940 => 160941)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/lldb/lldb_webkit.py        2013-12-20 23:56:38 UTC (rev 160940)
+++ trunk/Tools/lldb/lldb_webkit.py        2013-12-21 00:05:40 UTC (rev 160941)
</span><span class="lines">@@ -41,6 +41,9 @@
</span><span class="cx">     debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFMediaTime_SummaryProvider WTF::MediaTime')
</span><span class="cx">     debugger.HandleCommand('type synthetic add -x &quot;WTF::Vector&lt;.+&gt;$&quot; --python-class lldb_webkit.WTFVectorProvider')
</span><span class="cx">     debugger.HandleCommand('type synthetic add -x &quot;WTF::HashTable&lt;.+&gt;$&quot; --python-class lldb_webkit.WTFHashTableProvider')
</span><ins>+    debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLayoutUnit_SummaryProvider WebCore::LayoutUnit')
+    debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLayoutSize_SummaryProvider WebCore::LayoutSize')
+    debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLayoutPoint_SummaryProvider WebCore::LayoutPoint')
</ins><span class="cx"> 
</span><span class="cx"> def WTFString_SummaryProvider(valobj, dict):
</span><span class="cx">     provider = WTFStringProvider(valobj, dict)
</span><span class="lines">@@ -79,6 +82,20 @@
</span><span class="cx">     return &quot;{ %d/%d, %f }&quot; % (provider.timeValue(), provider.timeScale(), float(provider.timeValue()) / provider.timeScale())
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+def WebCoreLayoutUnit_SummaryProvider(valobj, dict):
+    provider = WebCoreLayoutUnitProvider(valobj, dict)
+    return &quot;{ %s }&quot; % provider.to_string()
+
+
+def WebCoreLayoutSize_SummaryProvider(valobj, dict):
+    provider = WebCoreLayoutSizeProvider(valobj, dict)
+    return &quot;{ width = %s, height = %s }&quot; % (provider.get_width(), provider.get_height())
+
+
+def WebCoreLayoutPoint_SummaryProvider(valobj, dict):
+    provider = WebCoreLayoutPointProvider(valobj, dict)
+    return &quot;{ x = %s, y = %s }&quot; % (provider.get_x(), provider.get_y())
+
</ins><span class="cx"> # FIXME: Provide support for the following types:
</span><span class="cx"> # def WTFVector_SummaryProvider(valobj, dict):
</span><span class="cx"> # def WTFCString_SummaryProvider(valobj, dict):
</span><span class="lines">@@ -184,6 +201,39 @@
</span><span class="cx">         return impl.to_string()
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+class WebCoreLayoutUnitProvider:
+    &quot;Print a WebCore::LayoutUnit&quot;
+    def __init__(self, valobj, dict):
+        self.valobj = valobj
+
+    def to_string(self):
+        return &quot;%gpx&quot; % (self.valobj.GetChildMemberWithName('m_value').GetValueAsUnsigned(0) / 64.0)
+
+
+class WebCoreLayoutSizeProvider:
+    &quot;Print a WebCore::LayoutSize&quot;
+    def __init__(self, valobj, dict):
+        self.valobj = valobj
+
+    def get_width(self):
+        return WebCoreLayoutUnitProvider(self.valobj.GetChildMemberWithName('m_width'), dict).to_string()
+
+    def get_height(self):
+        return WebCoreLayoutUnitProvider(self.valobj.GetChildMemberWithName('m_height'), dict).to_string()
+
+
+class WebCoreLayoutPointProvider:
+    &quot;Print a WebCore::LayoutPoint&quot;
+    def __init__(self, valobj, dict):
+        self.valobj = valobj
+
+    def get_x(self):
+        return WebCoreLayoutUnitProvider(self.valobj.GetChildMemberWithName('m_x'), dict).to_string()
+
+    def get_y(self):
+        return WebCoreLayoutUnitProvider(self.valobj.GetChildMemberWithName('m_y'), dict).to_string()
+
+
</ins><span class="cx"> class WTFVectorProvider:
</span><span class="cx">     def __init__(self, valobj, internal_dict):
</span><span class="cx">         self.valobj = valobj
</span></span></pre>
</div>
</div>

</body>
</html>