gRPC-haskell/benchmarks.html

1075 lines
264 KiB
HTML
Raw Normal View History

2016-07-22 23:29:05 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>criterion report</title>
<script language="javascript" type="text/javascript">
/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"num
},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new
},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.par
</script>
<script language="javascript" type="text/javascript">
/* Javascript plotting library for jQuery, version 0.8.3.
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
*/
(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function($){var hasOwnProperty=Object.prototype.hasOwnProperty;if(!$.fn.detach){$.fn.detach=function(){return this.each(function(){if(this.parentNode){this.parentNode.removeChild(this)}})}}function Canvas(cls,container){var element=container.children("."+cls)[0];if(element==null){element=document.createElement("canvas");element.className=cls;$(element).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(container);if(!element.getContext){if(window.G_vmlCanvasManager){element=window.G_vmlCanvasManager.initElement(element)}else{throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=element;var context=this.context=element.getContext("2d");var devicePixelRatio=window.devicePixelRatio||1,backingStoreRatio=context.webkitBackingStorePixelRatio||context.mozBackingSto
if(yrange.from==null)yrange.from=yrange.axis.min;if(yrange.to==null)yrange.to=yrange.axis.max;if(xrange.to<xrange.axis.min||xrange.from>xrange.axis.max||yrange.to<yrange.axis.min||yrange.from>yrange.axis.max)continue;xrange.from=Math.max(xrange.from,xrange.axis.min);xrange.to=Math.min(xrange.to,xrange.axis.max);yrange.from=Math.max(yrange.from,yrange.axis.min);yrange.to=Math.min(yrange.to,yrange.axis.max);var xequal=xrange.from===xrange.to,yequal=yrange.from===yrange.to;if(xequal&&yequal){continue}xrange.from=Math.floor(xrange.axis.p2c(xrange.from));xrange.to=Math.floor(xrange.axis.p2c(xrange.to));yrange.from=Math.floor(yrange.axis.p2c(yrange.from));yrange.to=Math.floor(yrange.axis.p2c(yrange.to));if(xequal||yequal){var lineWidth=m.lineWidth||options.grid.markingsLineWidth,subPixel=lineWidth%2?.5:0;ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ctx.lineWidth=lineWidth;if(xequal){ctx.moveTo(xrange.to+subPixel,yrange.from);ctx.lineTo(xrange.to+subPixel,yrange.to)}else{ctx.moveTo(xrange.from,yrange.to+subPixel);ctx.lineTo(xrange.to,yrange.to+subPixel)}ctx.stroke()}else{ctx.fillStyle=m.color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-xrange.from,yrange.from-yrange.to)}}}axes=allAxes();bw=options.grid.borderWidth;for(var j=0;j<axes.length;++j){var axis=axes[j],box=axis.box,t=axis.tickLength,x,y,xoff,yoff;if(!axis.show||axis.ticks.length==0)continue;ctx.lineWidth=1;if(axis.direction=="x"){x=0;if(t=="full")y=axis.position=="top"?0:plotHeight;else y=box.top-plotOffset.top+(axis.position=="top"?box.height:0)}else{y=0;if(t=="full")x=axis.position=="left"?0:plotWidth;else x=box.left-plotOffset.left+(axis.position=="left"?box.width:0)}if(!axis.innermost){ctx.strokeStyle=axis.options.color;ctx.beginPath();xoff=yoff=0;if(axis.direction=="x")xoff=plotWidth+1;else yoff=plotHeight+1;if(ctx.lineWidth==1){if(axis.direction=="x"){y=Math.floor(y)+.5}else{x=Math.floor(x)+.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff);ctx.stroke()}ctx.strokeStyle=axis.options.tickColor;ctx.beginPath();for(i=0;i<axis.ticks.length;++i){var v=axis.ticks[i].v;xoff=yoff=0;if(isNaN(v)||v<axis.min||v>axis.max||t=="full"&&(typeof bw=="object"&&bw[axis.position]>0||bw>0)&&(v==axis.min||v==axis.max))continue;if(axis.direction=="x"){x=axis.p2c(v);yoff=t=="full"?-plotHeight:t;if(axis.position=="top")yoff=-yoff}else{y=axis.p2c(v);xoff=t=="full"?-plotWidth:t;if(axis.position=="left")xoff=-xoff}if(ctx.lineWidth==1){if(axis.direction=="x")x=Math.floor(x)+.5;else y=Math.floor(y)+.5}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff)}ctx.stroke()}if(bw){bc=options.grid.borderColor;if(typeof bw=="object"||typeof bc=="object"){if(typeof bw!=="object"){bw={top:bw,right:bw,bottom:bw,left:bw}}if(typeof bc!=="object"){bc={top:bc,right:bc,bottom:bc,left:bc}}if(bw.top>0){ctx.strokeStyle=bc.top;ctx.lineWidth=bw.top;ctx.beginPath();ctx.moveTo(0-bw.left,0-bw.top/2);ctx.lineTo(plotWidth,0-bw.top/2);ctx.stroke()}if(bw.right>0){ctx.strokeStyle=bc.right;ctx.lineWidth=bw.right;ctx.beginPath();ctx.moveTo(plotWidth+bw.right/2,0-bw.top);ctx.lineTo(plotWidth+bw.right/2,plotHeight);ctx.stroke()}if(bw.bottom>0){ctx.strokeStyle=bc.bottom;ctx.lineWidth=bw.bottom;ctx.beginPath();ctx.moveTo(plotWidth+bw.right,plotHeight+bw.bottom/2);ctx.lineTo(0,plotHeight+bw.bottom/2);ctx.stroke()}if(bw.left>0){ctx.strokeStyle=bc.left;ctx.lineWidth=bw.left;ctx.beginPath();ctx.moveTo(0-bw.left/2,plotHeight+bw.bottom);ctx.lineTo(0-bw.left/2,0);ctx.stroke()}}else{ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderColor;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}}ctx.restore()}function drawAxisLabels(){$.each(allAxes(),function(_,axis){var box=axis.box,legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=axis.options.font||"flot-tick-label tickLabel",tick,x,y,halign,valign;surface.removeText(layer);if(!axis.show||axis.ticks.length==0)return;for(var i=0;i<axis.ticks.length;++i){tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max)continue;if(axis.directi
</script>
<script language="javascript" type="text/javascript">
(function ($) {
$.zip = function(a,b) {
var x = Math.min(a.length,b.length);
var c = new Array(x);
for (var i = 0; i < x; i++)
c[i] = [a[i],b[i]];
return c;
};
$.mean = function(ary) {
var m = 0, i = 0;
while (i < ary.length) {
var j = i++;
m += (ary[j] - m) / i;
}
return m;
};
$.timeUnits = function(secs) {
if (secs < 0) return $.timeUnits(-secs);
else if (secs >= 1e9) return [1e-9, "Gs"];
else if (secs >= 1e6) return [1e-6, "Ms"];
else if (secs >= 1) return [1, "s"];
else if (secs >= 1e-3) return [1e3, "ms"];
else if (secs >= 1e-6) return [1e6, "\u03bcs"];
else if (secs >= 1e-9) return [1e9, "ns"];
else if (secs >= 1e-12) return [1e12, "ps"];
return [1, "s"];
};
$.scaleTimes = function(ary) {
var s = $.timeUnits($.mean(ary));
return [$.scaleBy(s[0], ary), s[0]];
};
$.prepareTime = function(secs) {
var units = $.timeUnits(secs);
var scaled = secs * units[0];
var s = scaled.toPrecision(3);
var t = scaled.toString();
return [t.length < s.length ? t : s, units[1]];
};
$.scaleBy = function(x, ary) {
var nary = new Array(ary.length);
for (var i = 0; i < ary.length; i++)
nary[i] = ary[i] * x;
return nary;
};
$.renderTime = function(secs) {
var x = $.prepareTime(secs);
return x[0] + ' ' + x[1];
};
$.unitFormatter = function(scale) {
var labelname;
return function(secs,axis) {
var x = $.prepareTime(secs / scale);
if (labelname === x[1])
return x[0];
else {
labelname = x[1];
return x[0] + ' ' + x[1];
}
};
};
$.addTooltip = function(name, renderText) {
function showTooltip(x, y, contents) {
$('<div id="tooltip">' + contents + '</div>').css( {
position: 'absolute',
display: 'none',
top: y + 5,
left: x + 5,
border: '1px solid #fdd',
padding: '2px',
'background-color': '#fee',
opacity: 0.80
}).appendTo("body").fadeIn(200);
};
var pp = null;
$(name).bind("plothover", function (event, pos, item) {
$("#x").text(pos.x.toFixed(2));
$("#y").text(pos.y.toFixed(2));
if (item) {
if (pp != item.dataIndex) {
pp = item.dataIndex;
$("#tooltip").remove();
var x = item.datapoint[0],
y = item.datapoint[1];
showTooltip(item.pageX, item.pageY, renderText(x,y));
}
}
else {
$("#tooltip").remove();
pp = null;
}
});
};
})(jQuery);
</script>
<style type="text/css">
html, body {
height: 100%;
margin: 0;
}
#wrap {
min-height: 100%;
}
#main {
overflow: auto;
padding-bottom: 180px; /* must be same height as the footer */
}
#footer {
position: relative;
margin-top: -180px; /* negative value of footer height */
height: 180px;
clear: both;
background: #888;
margin: 40px 0 0;
color: white;
font-size: larger;
font-weight: 300;
}
body:before {
/* Opera fix */
content: "";
height: 100%;
float: left;
width: 0;
margin-top: -32767px;
}
body {
font: 14px Helvetica Neue;
text-rendering: optimizeLegibility;
margin-top: 1em;
}
a:link {
color: steelblue;
text-decoration: none;
}
a:visited {
color: #4a743b;
text-decoration: none;
}
#footer a {
color: white;
text-decoration: underline;
}
.hover {
color: steelblue;
text-decoration: none;
}
.body {
width: 960px;
margin: auto;
}
.footfirst {
position: relative;
top: 30px;
}
th {
font-weight: 500;
opacity: 0.8;
}
th.cibound {
opacity: 0.4;
}
.confinterval {
opacity: 0.5;
}
h1 {
font-size: 36px;
font-weight: 300;
margin-bottom: .3em;
}
h2 {
font-size: 30px;
font-weight: 300;
margin-bottom: .3em;
}
.meanlegend {
color: #404040;
background-color: #ffffff;
opacity: 0.6;
font-size: smaller;
}
</style>
<!--[if !IE 7]>
<style type="text/css">
#wrap {display:table;height:100%}
</style>
<![endif]-->
</head>
<body>
<div id="wrap">
<div id="main" class="body">
<h1>criterion performance measurements</h1>
<h2>overview</h2>
<p><a href="#grokularation">want to understand this report?</a></p>
<div id="overview" class="ovchart" style="width:900px;height:100px;"></div>
<h2><a name="b0">unary request</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde0" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time0" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle0" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb0">xxx</span></td>
<td><span class="olstimept0">xxx</span></td>
<td><span class="confinterval olstimeub0">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb0">xxx</span></td>
<td><span class="olsr2pt0">xxx</span></td>
<td><span class="confinterval olsr2ub0">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">1.1127952052099233e-4</span></td>
<td><span class="time">1.1157779769569623e-4</span></td>
<td><span class="confinterval citime">1.1222578474109467e-4</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">7.006642862776891e-7</span></td>
<td><span class="time">1.6019470204849632e-6</span></td>
<td><span class="confinterval citime">3.0016649862884594e-6</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have slight
(<span class="percent">8.197243287309262e-2</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b1">client stream: 100 messages</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde1" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time1" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle1" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb1">xxx</span></td>
<td><span class="olstimept1">xxx</span></td>
<td><span class="confinterval olstimeub1">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb1">xxx</span></td>
<td><span class="olsr2pt1">xxx</span></td>
<td><span class="confinterval olsr2ub1">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">1.1145656673217617e-3</span></td>
<td><span class="time">1.1225264180385309e-3</span></td>
<td><span class="confinterval citime">1.136100231001483e-3</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">2.1175077057984874e-5</span></td>
<td><span class="time">3.660369985889931e-5</span></td>
<td><span class="confinterval citime">6.0245576168224164e-5</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.2100730004584609</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b2">client stream: 1k messages</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde2" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time2" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle2" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb2">xxx</span></td>
<td><span class="olstimept2">xxx</span></td>
<td><span class="confinterval olstimeub2">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb2">xxx</span></td>
<td><span class="olsr2pt2">xxx</span></td>
<td><span class="confinterval olsr2ub2">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">1.0274288101958585e-2</span></td>
<td><span class="time">1.0341389459833119e-2</span></td>
<td><span class="confinterval citime">1.0418416003070792e-2</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">1.5974251878414234e-4</span></td>
<td><span class="time">2.0913496502759373e-4</span></td>
<td><span class="confinterval citime">2.889361409397357e-4</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have slight
(<span class="percent">3.222222222222209e-2</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b3">client stream: 10k messages</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde3" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time3" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle3" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb3">xxx</span></td>
<td><span class="olstimept3">xxx</span></td>
<td><span class="confinterval olstimeub3">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb3">xxx</span></td>
<td><span class="olsr2pt3">xxx</span></td>
<td><span class="confinterval olsr2ub3">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">0.1035139522385206</span></td>
<td><span class="time">0.1044357553238654</span></td>
<td><span class="confinterval citime">0.10589733927787692</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">8.693634002187114e-4</span></td>
<td><span class="time">1.7581790983451108e-3</span></td>
<td><span class="confinterval citime">2.6984798923229657e-3</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have slight
(<span class="percent">9.876543209876533e-2</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b4">server stream: 100 messages</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde4" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time4" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle4" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb4">xxx</span></td>
<td><span class="olstimept4">xxx</span></td>
<td><span class="confinterval olstimeub4">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb4">xxx</span></td>
<td><span class="olsr2pt4">xxx</span></td>
<td><span class="confinterval olsr2ub4">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">1.00500185533956e-3</span></td>
<td><span class="time">1.0219297837648412e-3</span></td>
<td><span class="confinterval citime">1.038431407924066e-3</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">4.534639216316358e-5</span></td>
<td><span class="time">5.8708277292223296e-5</span></td>
<td><span class="confinterval citime">7.292687430223964e-5</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.4697581699045145</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b5">server stream: 1k messages</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde5" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time5" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle5" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb5">xxx</span></td>
<td><span class="olstimept5">xxx</span></td>
<td><span class="confinterval olstimeub5">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb5">xxx</span></td>
<td><span class="olsr2pt5">xxx</span></td>
<td><span class="confinterval olsr2ub5">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">8.263458511284804e-3</span></td>
<td><span class="time">8.29655676830788e-3</span></td>
<td><span class="confinterval citime">8.338747504141219e-3</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">7.989147957982453e-5</span></td>
<td><span class="time">1.1338955133128914e-4</span></td>
<td><span class="confinterval citime">1.6239809568186118e-4</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have slight
(<span class="percent">2.938475665748384e-2</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b6">server stream: 10k messages</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde6" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time6" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle6" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb6">xxx</span></td>
<td><span class="olstimept6">xxx</span></td>
<td><span class="confinterval olstimeub6">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb6">xxx</span></td>
<td><span class="olsr2pt6">xxx</span></td>
<td><span class="confinterval olsr2ub6">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">8.139915127469478e-2</span></td>
<td><span class="time">8.203977915769449e-2</span></td>
<td><span class="confinterval citime">8.294207157255142e-2</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">8.712272680628149e-4</span></td>
<td><span class="time">1.303323554210239e-3</span></td>
<td><span class="confinterval citime">1.75288845055683e-3</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have slight
(<span class="percent">9.000000000000001e-2</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b7">bidi stream: 50 messages up, 50 down</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde7" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time7" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle7" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb7">xxx</span></td>
<td><span class="olstimept7">xxx</span></td>
<td><span class="confinterval olstimeub7">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb7">xxx</span></td>
<td><span class="olsr2pt7">xxx</span></td>
<td><span class="confinterval olsr2ub7">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">3.6837263323658102e-3</span></td>
<td><span class="time">3.690185989917211e-3</span></td>
<td><span class="confinterval citime">3.7016024806948455e-3</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">1.87435230068336e-5</span></td>
<td><span class="time">2.7406270029965376e-5</span></td>
<td><span class="confinterval citime">3.868689618608243e-5</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have slight
(<span class="percent">2.1266540642722116e-2</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b8">bidi stream: 500 message up, 500 down</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde8" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time8" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle8" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb8">xxx</span></td>
<td><span class="olstimept8">xxx</span></td>
<td><span class="confinterval olstimeub8">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb8">xxx</span></td>
<td><span class="olsr2pt8">xxx</span></td>
<td><span class="confinterval olsr2ub8">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">3.539779838485038e-2</span></td>
<td><span class="time">3.5467452958929724e-2</span></td>
<td><span class="confinterval citime">3.5585300045038584e-2</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">1.1602363892840695e-4</span></td>
<td><span class="time">1.603301186146598e-4</span></td>
<td><span class="confinterval citime">2.1296560804213925e-4</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have slight
(<span class="percent">5.8593749999999986e-2</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b9">bidi stream: 5000 messages up, 5000 down</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde9" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time9" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle9" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb9">xxx</span></td>
<td><span class="olstimept9">xxx</span></td>
<td><span class="confinterval olstimeub9">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb9">xxx</span></td>
<td><span class="olsr2pt9">xxx</span></td>
<td><span class="confinterval olsr2ub9">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">0.3519412043621479</span></td>
<td><span class="time">0.35207846750875343</span></td>
<td><span class="confinterval citime">0.3521320771337429</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">0.0</span></td>
<td><span class="time">1.2712910344311448e-4</span></td>
<td><span class="confinterval citime">1.4489214967143587e-4</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.1875</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="grokularation">understanding this report</a></h2>
<p>In this report, each function benchmarked by criterion is assigned
a section of its own. The charts in each section are active; if
you hover your mouse over data points and annotations, you will see
more details.</p>
<ul>
<li>The chart on the left is a
<a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel
density estimate</a> (also known as a KDE) of time
measurements. This graphs the probability of any given time
measurement occurring. A spike indicates that a measurement of a
particular time occurred; its height indicates how often that
measurement was repeated.</li>
<li>The chart on the right is the raw data from which the kernel
density estimate is built. The <i>x</i> axis indicates the
number of loop iterations, while the <i>y</i> axis shows measured
execution time for the given number of loop iterations. The
line behind the values is the linear regression prediction of
execution time for a given number of iterations. Ideally, all
measurements will be on (or very near) this line.</li>
</ul>
<p>Under the charts is a small table.
The first two rows are the results of a linear regression run
on the measurements displayed in the right-hand chart.</p>
<ul>
<li><i>OLS regression</i> indicates the
time estimated for a single loop iteration using an ordinary
least-squares regression model. This number is more accurate
than the <i>mean</i> estimate below it, as it more effectively
eliminates measurement overhead and other constant factors.</li>
<li><i>R&#xb2; goodness-of-fit</i> is a measure of how
accurately the linear regression model fits the observed
measurements. If the measurements are not too noisy, R&#xb2;
should lie between 0.99 and 1, indicating an excellent fit. If
the number is below 0.99, something is confounding the accuracy
of the linear model.</li>
<li><i>Mean execution time</i> and <i>standard deviation</i> are
statistics calculated from execution time
divided by number of iterations.</li>
</ul>
<p>We use a statistical technique called
the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a>
to provide confidence intervals on our estimates. The
bootstrap-derived upper and lower bounds on estimates let you see
how accurate we believe those estimates to be. (Hover the mouse
over the table headers to see the confidence levels.)</p>
<p>A noisy benchmarking environment can cause some or many
measurements to fall far from the mean. These outlying
measurements can have a significant inflationary effect on the
estimate of the standard deviation. We calculate and display an
estimate of the extent to which the standard deviation has been
inflated by outliers.</p>
<script type="text/javascript">
$(function () {
function mangulate(rpt) {
var measured = function(key) {
var idx = rpt.reportKeys.indexOf(key);
return rpt.reportMeasured.map(function(r) { return r[idx]; });
};
var number = rpt.reportNumber;
var name = rpt.reportName;
var mean = rpt.reportAnalysis.anMean.estPoint;
var iters = measured("iters");
var times = measured("time");
var kdetimes = rpt.reportKDEs[0].kdeValues;
var kdepdf = rpt.reportKDEs[0].kdePDF;
var meanSecs = mean;
var units = $.timeUnits(mean);
var rgrs = rpt.reportAnalysis.anRegress[0];
var scale = units[0];
var olsTime = rgrs.regCoeffs.iters;
$(".olstimept" + number).text(function() {
return $.renderTime(olsTime.estPoint);
});
$(".olstimelb" + number).text(function() {
return $.renderTime(olsTime.estLowerBound);
});
$(".olstimeub" + number).text(function() {
return $.renderTime(olsTime.estUpperBound);
});
$(".olsr2pt" + number).text(function() {
return rgrs.regRSquare.estPoint.toFixed(3);
});
$(".olsr2lb" + number).text(function() {
return rgrs.regRSquare.estLowerBound.toFixed(3);
});
$(".olsr2ub" + number).text(function() {
return rgrs.regRSquare.estUpperBound.toFixed(3);
});
mean *= scale;
kdetimes = $.scaleBy(scale, kdetimes);
var kq = $("#kde" + number);
var k = $.plot(kq,
[{ label: name + " time densities",
data: $.zip(kdetimes, kdepdf),
}],
{ xaxis: { tickFormatter: $.unitFormatter(scale) },
yaxis: { ticks: false },
grid: { borderColor: "#777",
hoverable: true, markings: [ { color: '#6fd3fb',
lineWidth: 1.5, xaxis: { from: mean, to: mean } } ] },
});
var o = k.pointOffset({ x: mean, y: 0});
kq.append('<div class="meanlegend" title="' + $.renderTime(meanSecs) +
'" style="position:absolute;left:' + (o.left + 4) +
'px;bottom:139px;">mean</div>');
$.addTooltip("#kde" + number,
function(secs) { return $.renderTime(secs / scale); });
var timepairs = new Array(times.length);
var lastiter = iters[iters.length-1];
var olspairs = [[0,0], [lastiter, lastiter * scale * olsTime.estPoint]];
for (var i = 0; i < times.length; i++)
timepairs[i] = [iters[i],times[i]*scale];
iterFormatter = function() {
var denom = 0;
return function(iters) {
if (iters == 0)
return '';
if (denom > 0)
return (iters / denom).toFixed();
var power;
if (iters >= 1e9) {
denom = '1e9'; power = '&#x2079;';
}
if (iters >= 1e6) {
denom = '1e6'; power = '&#x2076;';
}
else if (iters >= 1e3) {
denom = '1e3'; power = '&#xb3;';
}
else denom = 1;
if (denom > 1) {
iters = (iters / denom).toFixed();
iters += '&times;10' + power + ' iters';
} else {
iters += ' iters';
}
return iters;
};
};
$.plot($("#time" + number),
[{ label: "regression", data: olspairs,
lines: { show: true } },
{ label: name + " times", data: timepairs,
points: { show: true } }],
{ grid: { borderColor: "#777", hoverable: true },
xaxis: { tickFormatter: iterFormatter() },
yaxis: { tickFormatter: $.unitFormatter(scale) } });
$.addTooltip("#time" + number,
function(iters,secs) {
return ($.renderTime(secs / scale) + ' / ' +
iters.toLocaleString() + ' iters');
});
if (0) {
var cyclepairs = new Array(cycles.length);
for (var i = 0; i < cycles.length; i++)
cyclepairs[i] = [cycles[i],i];
$.plot($("#cycle" + number),
[{ label: name + " cycles",
data: cyclepairs }],
{ points: { show: true },
grid: { borderColor: "#777", hoverable: true },
xaxis: { tickFormatter:
function(cycles,axis) { return cycles + ' cycles'; }},
yaxis: { ticks: false },
});
$.addTooltip("#cycles" + number, function(x,y) { return x + ' cycles'; });
}
};
var reports = [{"reportAnalysis":{"anMean":{"estUpperBound":1.1222578474109467e-4,"estLowerBound":1.1127952052099233e-4,"estPoint":1.1157779769569623e-4,"estConfidenceLevel":0.95},"anRegress":[{"regRSquare":{"estUpperBound":0.9999354162380549,"estLowerBound":0.999466948473189,"estPoint":0.9997801565701177,"estConfidenceLevel":0.95},"regResponder":"time","regCoeffs":{"y":{"estUpperBound":2.200073377691192e-4,"estLowerBound":8.683885397991465e-6,"estPoint":1.2231967168686375e-4,"estConfidenceLevel":0.95},"iters":{"estUpperBound":1.1208100853828737e-4,"estLowerBound":1.1122669199887345e-4,"estPoint":1.1155395813237895e-4,"estConfidenceLevel":0.95}}}],"anStdDev":{"estUpperBound":3.0016649862884594e-6,"estLowerBound":7.006642862776891e-7,"estPoint":1.6019470204849632e-6,"estConfidenceLevel":0.95},"anOutlierVar":{"ovFraction":8.197243287309262e-2,"ovDesc":"slight","ovEffect":"Slight"},"anOverhead":2.7205617842992416e-6},"reportKDEs":[{"kdeValues":[1.0958968858953292e-4,1.0968162805448001e-4,1.0977356751942709e-4,1.0986550698437418e-4,1.0995744644932126e-4,1.1004938591426835e-4,1.1014132537921542e-4,1.1023326484416251e-4,1.1032520430910959e-4,1.1041714377405668e-4,1.1050908323900375e-4,1.1060102270395084e-4,1.1069296216889792e-4,1.10784901633845e-4,1.1087684109879208e-4,1.1096878056373917e-4,1.1106072002868625e-4,1.1115265949363334e-4,1.1124459895858041e-4,1.113365384235275e-4,1.1142847788847458e-4,1.1152041735342167e-4,1.1161235681836874e-4,1.1170429628331583e-4,1.1179623574826291e-4,1.1188817521321e-4,1.1198011467815708e-4,1.1207205414310416e-4,1.1216399360805124e-4,1.1225593307299833e-4,1.123478725379454e-4,1.124398120028925e-4,1.1253175146783957e-4,1.1262369093278666e-4,1.1271563039773374e-4,1.1280756986268083e-4,1.128995093276279e-4,1.1299144879257499e-4,1.1308338825752207e-4,1.1317532772246916e-4,1.1326726718741623e-4,1.1335920665236332e-4,1.134511461173104e-4,1.1354308558225749e-4,1.1363502504720456e-4,1.1372696451215165e-4,1.1381890397709873e-4,1.1391084344204582e-4,1.140027829069929e-4,1.1409472237193998e-4,1.1418666183688706e-4,1.1427860130183415e-4,1.1437054076678123e-4,1.1446248023172832e-4,1.1455441969667539e-4,1.1464635916162248e-4,1.1473829862656956e-4,1.1483023809151665e-4,1.1492217755646372e-4,1.1501411702141081e-4,1.1510605648635789e-4,1.1519799595130498e-4,1.1528993541625205e-4,1.1538187488119914e-4,1.1547381434614622e-4,1.1556575381109331e-4,1.1565769327604038e-4,1.1574963274098747e-4,1.1584157220593455e-4,1.1593351167088164e-4,1.1602545113582871e-4,1.161173906007758e-4,1.1620933006572288e-4,1.1630126953066997e-4,1.1639320899561705e-4,1.1648514846056413e-4,1.1657708792551121e-4,1.166690273904583e-4,1.1676096685540538e-4,1.1685290632035247e-4,1.1694484578529954e-4,1.1703678525024663e-4,1.1712872471519371e-4,1.172206641801408e-4,1.1731260364508787e-4,1.1740454311003496e-4,1.1749648257498204e-4,1.1758842203992913e-4,1.176803615048762e-4,1.1777230096982329e-4,1.1786424043477037e-4,1.1795617989971746e-4,1.1804811936466453e-4,1.1814005882961162e-4,1.182319982945587e-4,1.1832393775950579e-4,1.1841587722445286e-4,1.1850781668939995e-4,1.1859975615434703e-4,1.1869169561929412e-4,1.187836350842412e-4,1.1887557454918829e-4,1.1896751401413536e-4,1.1905945347908245e-4,1.1915139294402953e-4,1.1924333240897662e-4,1.1933527187392369e-4,1.1942721133887078e-4,1.1951915080381786e-4,1.1961109026876495e-4,1.1970302973371202e-4,1.1979496919865911e-4,1.198869086636062e-4,1.1997884812855328e-4,1.2007078759350035e-4,1.2016272705844744e-4,1.2025466652339453e-4,1.2034660598834161e-4,1.2043854545328868e-4,1.2053048491823577e-4,1.2062242438318286e-4,1.2071436384812994e-4,1.2080630331307702e-4,1.208982427780241e-4,1.209901822429712e-4,1.2108212170791827e-4,1.2117406117286535e-4,1.2126600063781244e-4],"kdeType":"time","kdePDF":[51.690454333104654,194.53748670444952,745.983137073066,2499.4864826075727,7293.696723264001,18606.324592414974,41706.149316044,82677.72281313274,146161.11659285624,232859.96212733764,338651.566371352,456128.61223905405,577010.8651797776,692726.3660815249,792641.2232350251,863025.6262160137,890227.8130958664,8671
reports.map(mangulate);
var benches = ["unary request","client stream: 100 messages","client stream: 1k messages","client stream: 10k messages","server stream: 100 messages","server stream: 1k messages","server stream: 10k messages","bidi stream: 50 messages up, 50 down","bidi stream: 500 message up, 500 down","bidi stream: 5000 messages up, 5000 down",];
var ylabels = [[-0,'<a href="#b0">unary request</a>'],[-1,'<a href="#b1">client stream: 100 messages</a>'],[-2,'<a href="#b2">client stream: 1k messages</a>'],[-3,'<a href="#b3">client stream: 10k messages</a>'],[-4,'<a href="#b4">server stream: 100 messages</a>'],[-5,'<a href="#b5">server stream: 1k messages</a>'],[-6,'<a href="#b6">server stream: 10k messages</a>'],[-7,'<a href="#b7">bidi stream: 50 messages up, 50 down</a>'],[-8,'<a href="#b8">bidi stream: 500 message up, 500 down</a>'],[-9,'<a href="#b9">bidi stream: 5000 messages up, 5000 down</a>'],];
var means = $.scaleTimes([1.1157779769569623e-4,1.1225264180385309e-3,1.0341389459833119e-2,0.1044357553238654,1.0219297837648412e-3,8.29655676830788e-3,8.203977915769449e-2,3.690185989917211e-3,3.5467452958929724e-2,0.35207846750875343,]);
var xs = [];
var prev = null;
for (var i = 0; i < means[0].length; i++) {
var name = benches[i].split(/\//);
name.pop();
name = name.join('/');
if (name != prev) {
xs.push({ label: name, data: [[means[0][i], -i]]});
prev = name;
}
else
xs[xs.length-1].data.push([means[0][i],-i]);
}
var oq = $("#overview");
o = $.plot(oq, xs, { bars: { show: true, horizontal: true,
barWidth: 0.75, align: "center" },
grid: { borderColor: "#777", hoverable: true },
legend: { show: xs.length > 1 },
xaxis: { max: Math.max.apply(undefined,means[0]) * 1.02 },
yaxis: { ticks: ylabels, tickColor: '#ffffff' } });
if (benches.length > 3)
o.getPlaceholder().height(28*benches.length);
o.resize();
o.setupGrid();
o.draw();
$.addTooltip("#overview", function(x,y) { return $.renderTime(x / means[1]); });
});
$(document).ready(function () {
$(".time").text(function(_, text) {
return $.renderTime(text);
});
$(".citime").text(function(_, text) {
return $.renderTime(text);
});
$(".percent").text(function(_, text) {
return (text*100).toFixed(1);
});
});
</script>
</div>
</div>
<div id="footer">
<div class="body">
<div class="footfirst">
<h2>colophon</h2>
<p>This report was created using the
<a href="http://hackage.haskell.org/package/criterion">criterion</a>
benchmark execution and performance analysis tool.</p>
<p>Criterion is developed and maintained
by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.</p>
</div>
</div>
</div>
</body>
</html>