Skip to content

Commit

Permalink
Page profiler - sorting measurements by memory usage
Browse files Browse the repository at this point in the history
  • Loading branch information
napernik committed Jun 22, 2017
1 parent 6353c0e commit 020d565
Showing 1 changed file with 101 additions and 46 deletions.
147 changes: 101 additions & 46 deletions Website/Composite/transformations/page_profiler.xslt
Expand Up @@ -109,7 +109,7 @@
border: 0;
}

#__C1PerformanceTrace tr.weak {
#__C1PerformanceTrace tr.weak, #__C1PerformanceTrace td.weak {
color: gray;
}

Expand Down Expand Up @@ -147,6 +147,7 @@

<script language="javascript" type="text/javascript">
<![CDATA[ // <!--
var __c1_collapsedNodesMemory = new Array();
var __c1_collapsedNodesTime = new Array();
var __c1_collapsedNodesExecution = new Array();
var __c1_order = 'execution';
Expand All @@ -161,14 +162,48 @@

var consoleUrl = '<xsl:value-of select="$consoleUrl"/>';
<![CDATA[
function getTable(order) {
if(order == 'execution') {
return document.getElementById("orderedByExecution");
}
if(order == 'time') {
return document.getElementById("orderedByTime");
}
return document.getElementById("orderedByMemory");
}
function getCollapsedNodes(order) {
if(order == 'execution') {
return __c1_collapsedNodesExecution;
}
if(order == 'time') {
return __c1_collapsedNodesTime;
}
return __c1_collapsedNodesMemory;
}
function setCollapsedNodes(order, newArray) {
if(order == 'execution') {
__c1_collapsedNodesExecution = newArray;
return;
}
if(order == 'time') {
__c1_collapsedNodesTime = newArray;
return;
}
__c1_collapsedNodesMemory = newArray;
}
function __c1_updateTree(order) {
function StringStartsWith(a, b) {
return (a.length > b.length) && (a.substring(0, b.length) == b)
}
var table = order == 'execution' ? document.getElementById("orderedByExecution") : document.getElementById("orderedByTime");
var __c1_collapsedNodes = order == 'execution' ? __c1_collapsedNodesExecution : __c1_collapsedNodesTime;
var table = getTable(order);
var __c1_collapsedNodes = getCollapsedNodes(order);
var rows = table.childNodes;
for (var i = 0; i < rows.length; i++) {
Expand Down Expand Up @@ -205,7 +240,8 @@
function __c1_OnRowClick(imageButton) {
row = imageButton.parentNode.parentNode;
var __c1_collapsedNodes = __c1_order == 'execution' ? __c1_collapsedNodesExecution : __c1_collapsedNodesTime;
var __c1_collapsedNodes = getCollapsedNodes(__c1_order);
for(var i=0; i< __c1_collapsedNodes.length; i++)
{
if(__c1_collapsedNodes[i] == row.id) {
Expand All @@ -215,37 +251,43 @@
newArray[j] = __c1_collapsedNodes[(j < i) ? j : j + 1];
}
__c1_order == 'execution' ? __c1_collapsedNodesExecution = newArray : __c1_collapsedNodesTime = newArray;
setCollapsedNodes(__c1_order, newArray);
__c1_updateTree(__c1_order);
return;
}
}
__c1_order == 'execution' ? __c1_collapsedNodesExecution[__c1_collapsedNodesExecution.length] = row.id : __c1_collapsedNodesTime[__c1_collapsedNodesTime.length] = row.id;
var nodes = getCollapsedNodes(__c1_order);
nodes[nodes.length] = row.id;
__c1_updateTree(__c1_order);
return;
}
function __c1_OrderTable(order) {
__c1_order = order;
var tableByTime = document.getElementById("orderedByTime");
var tableByExecution = document.getElementById("orderedByExecution");
var tableByTime = getTable('time');
var tableByExecution = getTable('execution');
var tableByMemory = getTable('memory');
var orderByTime = document.getElementById("orderByTime");
var orderByExecution = document.getElementById("orderByExecution");
var orderByMemory = document.getElementById("orderByMemory");
var showExecution = __c1_order == 'execution' && orderByExecution.className.indexOf('active') < 0;
var showTime = __c1_order == 'time' && orderByTime.className.indexOf('active') < 0;
var showMemory = __c1_order == 'memory' && orderByMemory.className.indexOf('active') < 0;
if(showExecution || showTime || showMemory) {
tableByExecution.style.display = showExecution ? 'table-row-group' : 'none';
tableByTime.style.display = showTime ? 'table-row-group' : 'none';
tableByMemory.style.display = showMemory ? 'table-row-group' : 'none';
orderByExecution.className = showExecution ? orderByExecution.className + ' active' : orderByExecution.className.replace('active', ' ');
orderByTime.className = showTime ? orderByTime.className + ' active' : orderByTime.className.replace('active', ' ');
orderByMemory.className = showMemory ? orderByMemory.className + ' active' : orderByMemory.className.replace('active', ' ');
}
if( __c1_order == 'execution' && orderByExecution.className.indexOf('active') < 0) {
tableByTime.style.display = 'none';
orderByTime.className = orderByTime.className.replace('active', ' ');
tableByExecution.style.display = 'table-row-group';
orderByExecution.className = orderByExecution.className + ' active';
}
if( __c1_order == 'time' && orderByTime.className.indexOf('active') < 0) {
tableByExecution.style.display = 'none';
orderByExecution.className = orderByExecution.className.replace('active', ' ');
tableByTime.style.display = 'table-row-group';
orderByTime.className = orderByTime.className + ' active';
}
__c1_updateTree(__c1_order);
return;
}
Expand All @@ -257,17 +299,19 @@
<thead>
<tr class="head">
<th style="width: 80px;">Own time, ms</th>
<th>
<xsl:if test="$TimeMeasurementDefined">
<th style="width: 110px;">Memory usage, kb</th>
</xsl:if>
<th>
<div style="float: left; padding-top: 4px;">Function calls, ms</div>
<div style="float: right; font-weight: normal;">
Order by: <a id="orderByExecution" class="btn active order" onclick="__c1_OrderTable('execution')">Execution Order</a>
<a id="orderByTime" onclick="__c1_OrderTable('time')" class="btn order">Time Used</a>
Order by:
<a id="orderByExecution" onclick="__c1_OrderTable('execution')" class="btn active order" >Execution Order</a>
<a id="orderByTime" onclick="__c1_OrderTable('time')" class="btn order">Time Used</a>
<a id="orderByMemory" onclick="__c1_OrderTable('memory')" class="btn order">Memory Allocated</a>
</div>

</th>
<xsl:if test="$TimeMeasurementDefined">
<th style="width: 110px;">Memory usage, kb</th>
</xsl:if>
</tr>
</thead>
<tbody id="orderedByExecution">
Expand All @@ -283,6 +327,13 @@
<xsl:sort select="number(@totalTime)" data-type="number" order="descending"/>
</xsl:apply-templates>
</tbody>
<tbody id="orderedByMemory">
<xsl:apply-templates select="Measurement">
<xsl:with-param name="Level" select="0" />
<xsl:with-param name="OrderBy" select="'memory'" />
<xsl:sort select="number(@memoryUsageKb)" data-type="number" order="descending"/>
</xsl:apply-templates>
</tbody>
<tfoot>
<tr>
<td colspan="3">
Expand Down Expand Up @@ -336,18 +387,24 @@
</xsl:if>

<td class="__TraceOwn">
<xsl:if test="@ownTime &lt; 1000">
<xsl:attribute name="class">weak</xsl:attribute>
</xsl:if>

<!-- If node has parallel children, we're not showing "ownTime" -->

<xsl:if test="count(./Measurement[@parallel = 'true']) = 0">
<xsl:value-of select="floor(@ownTime div 1000)" />
<span class="weak">
.<xsl:value-of select="floor(@ownTime div 100) mod 10" />
</span>
<xsl:if test="count(./Measurement[@parallel = 'true']) = 0"><xsl:value-of select="floor(@ownTime div 1000)" /><span class="weak">.<xsl:value-of select="floor(@ownTime div 100) mod 10" /></span>
</xsl:if>



</td>

<xsl:if test="$TimeMeasurementDefined">
<td class="__TraceMemoryUsage">
<xsl:value-of select="@memoryUsageKb"/>
</td>

</xsl:if>

<!--
<td class="__ParallelColumn">
<xsl:if test="@parallel = 'true'">
Expand All @@ -368,10 +425,7 @@
</xsl:otherwise>
</xsl:choose>

<xsl:value-of select="floor(@totalTime div 1000)" />
<span class="weak">
.<xsl:value-of select="floor(@totalTime div 100) mod 10" />
</span>
<xsl:value-of select="floor(@totalTime div 1000)" /><span class="weak">.<xsl:value-of select="floor(@totalTime div 100) mod 10" /></span>

(<xsl:value-of select="@persentFromTotal" />%)

Expand All @@ -390,12 +444,6 @@
<span class="__parallel">*</span>
</xsl:if -->
</td>
<xsl:if test="$TimeMeasurementDefined">
<td class="__TraceMemoryUsage">
<xsl:value-of select="@memoryUsageKb"/>
</td>

</xsl:if>
</tr>
<xsl:choose>
<xsl:when test="$OrderBy = 'time'">
Expand All @@ -405,7 +453,14 @@
<xsl:sort select="@totalTime" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:when test="$OrderBy = 'memory'">
<xsl:apply-templates select="./Measurement">
<xsl:with-param name="Level" select="$Level + 1" />
<xsl:with-param name="OrderBy" select="'memory'" />
<xsl:sort select="@memoryUsageKb" data-type="number" order="descending"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="./Measurement">
<xsl:with-param name="Level" select="$Level + 1" />
<xsl:with-param name="OrderBy" select="'execution'" />
Expand Down

0 comments on commit 020d565

Please sign in to comment.