[pypy-commit] jitviewer ui_improvements: Various UI improvements.

vext01 noreply at buildbot.pypy.org
Fri May 1 12:41:10 CEST 2015


Author: Edd Barrett <vext01 at gmail.com>
Branch: ui_improvements
Changeset: r269:c6415f862f16
Date: 2015-05-01 11:41 +0100
http://bitbucket.org/pypy/jitviewer/changeset/c6415f862f16/

Log:	Various UI improvements.

	Display loop list as a table. Include columns for length, times
	executes, # of new ops, # of call ops. Display loop description in a
	more palatable manner. Unfloat the menu so it can't cover the traces
	(pet hate).

	Feedback welcomed.

diff --git a/_jitviewer/app.py b/_jitviewer/app.py
--- a/_jitviewer/app.py
+++ b/_jitviewer/app.py
@@ -91,6 +91,26 @@
         self.filename = filename
         self.storage = storage
 
+    def count_artefacts(self, loop):
+        calls = news = 0
+        for op in loop.operations:
+            if "call" in op.name:
+                calls += 1
+            if op.name.startswith("new"):
+                news += 1
+        return calls, news
+
+    def parse_repr(self, r):
+        elems = r.split(",")
+        title = elems[0]
+        if len(elems) == 1:
+            filenm = None
+            line = None
+        else:
+            filenm = elems[1]
+            line = elems[2]
+        return title, filenm, line
+
     def index(self):
         all = flask.request.args.get('all', None)
         loops = []
@@ -106,6 +126,11 @@
                 func = DummyFunc()
             func.count = getattr(loop, 'count', '?')
             func.descr = mangle_descr(loop.descr)
+            func.n_ops = len(loop.operations)
+
+            func.n_calls, func.n_news = self.count_artefacts(loop)
+            func.title, func.filenm, func.line = self.parse_repr(func.repr())
+
             loops.append(func)
         loops.sort(lambda a, b: cmp(b.count, a.count))
         if len(loops) > CUTOFF:
diff --git a/_jitviewer/static/style.css b/_jitviewer/static/style.css
--- a/_jitviewer/static/style.css
+++ b/_jitviewer/static/style.css
@@ -1,5 +1,6 @@
 /*HTML5 Reset*/
-a,abbr,address,article,aside,audio,b,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,p,pre,q,samp,section,small,span,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,ul,var,video{ margin:0; padding:0; border:0; font-size:100%; font-weight:inherit; font-style:inherit; vertical-align:baseline}article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{ display:block}a,ins,del{ text-decoration:none}ul,ol{ list-style:none}table{ border-spacing:0; border-collapse:collapse}caption,th{ text-align:left}q:after,q:before{ content:��}
+/*a,abbr,address,article,aside,audio,b,blockquote,body,canvas,caption,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,p,pre,q,samp,section,small,span,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,ul,var,video{ margin:0; padding:0; border:0; font-size:100%; font-weight:inherit; font-style:inherit; vertical-align:baseline}article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{ display:block}a,ins,del{ text-decoration:none}ul,ol{ list-style:none}table{ border-spacing:0; border-collapse:collapse}caption,th{ text-align:left}q:after,q:before{ content:��}
+ * */
 /*End of HTML5 Reset*/
 
 /* General Layout & Typography 
@@ -69,14 +70,14 @@
 #main {
 	display: block;
     float: left;
-    width: 90%;
+    width: 97%;
     margin-left: 30px;
 }
 header {
 	display: block;
-	width: 360px;
+	/*width: 95%; */
 	
-	position: fixed;
+	/*position: fixed; */
 	top: 10px;
 	right: 10px;
 	
@@ -137,9 +138,10 @@
 		-moz-box-shadow: 0px 0px 7px #cacaca;
 		-webkit-box-shadow: 0px 0px 7px #cacaca;
 		box-shadow: 0px 0px 7px #cacaca;
-    margin-left: 100px;
+    /*margin-left: 100px;
     padding-bottom: 5px;
     padding-top: 5px;
+    */
 }
 
 .single-operation {
@@ -249,5 +251,23 @@
     font-size: 25px;
 }
 
+th {
+    text-align: left;
+    background-color: #cccccc;
+}
+
+tr:nth-child(even) {
+    background-color: #dddddd;
+}
+
+table {
+	font-size: small;
+	border-spacing: 3px;
+}
+
+.count {
+	text-align: right;
+}
+
 /* End of Formatting 
 -----------------------------------------*/
diff --git a/_jitviewer/templates/index.html b/_jitviewer/templates/index.html
--- a/_jitviewer/templates/index.html
+++ b/_jitviewer/templates/index.html
@@ -19,6 +19,7 @@
   </script>
 </head>
 <body>
+  <h1>JIT Viewer</h1>
   <header>
     <div class="menu">Menu</div>
     <a id="asmtoggler" href="#">Show assembler [a]</a><br>
@@ -26,7 +27,6 @@
     <div id="callstack">
     </div>
   </header>
-  <h1>JIT Viewer</h1>
   <!--
   <div id="title">
     <span id="title-text">JIT viewer</span>
@@ -36,11 +36,23 @@
       Filter [/]: <input id="inp-bar" type="text" size="80"></input>
   <div>
   <div id="loops">
-    <ul>
+    <table>
+	    <tr style="background-color: #cccccc;"><th>Loop</th><th>execs</th><th>ops</th><th>news</th><th>calls</th></tr>
       {% for item in loops %}
-      <li class="loopitem" id="{{item.descr}}" name="{{item.repr()}}"><span><a href="#" data-name="{{ item.descr }}">{{item.repr()}}</a> run {{item.count}} times</span></li>
+      <tr class="loopitem" id="{{item.descr}}" name="{{item.repr()}}">
+	      <!--<li class="loopitem" id="{{item.descr}}" name="{{item.repr()}}"><span><a href="#" data-name="{{ item.descr }}">{{item.repr()}}</a> run {{item.count}} times</span></li>-->
+	      <td>
+		      <i><a href="#" data-name="{{ item.descr }}">{{item.title}}</a></i>
+		  {% if item.filenm %}
+		  <br />    {{item.filenm}}
+		  {% endif %}
+		  {% if item.line %}
+		  <br />    {{item.line}}
+		  {% endif %}
+	      </td><td class="count">{{item.count}}</td><td class="count">{{item.n_ops}}</td><td class="count">{{item.n_news}}</td><td class="count">{{item.n_calls}}</td>
+      </tr>
       {% endfor %}
-    </ul>
+    </table>
     {% if extra_data %}
       <a href="/?all=true">{{extra_data}}</a>
     {% endif %}


More information about the pypy-commit mailing list