blob: 7106fd90eff794a0066d70a94e4da18b40b424ec [file] [log] [blame]
<!--
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
-->
<!--
Simple page for testing gadgets.rpc performance.
Allows you to add a simulated "gadget" (in this case just a static
HTML page which loads gadgets.rpc also), and pass some
specified number of random messages of specified size to
and from it.
To use, start up two instances of
the Shindig Gadgets Server on two separate ports to test
"real" cross-domain communication, since port is factored
into the same-domain policy enforced by browsers. One
server will be used for the container, the other for the gadget.
If your container on localhost:8080 with gadget on localhost:8081,
then to load the test load the following in your browser:
http://localhost:8080/container/rpctest_container.html?localhost:8081
This test container/gadget pair is configurable via two other options:
* &gadgetdeferred=1 - tests early-message queueing from container to
gadget, by preventing attachment of gadget until a button is pressed.
* &uabackward=1 - tests "incorrect" rpc.js setup in container:
gadgets.rpc.setAuthToken(...) called before, not after, gadget frame exists.
These options may be provided in any combination.
-->
<html>
<head>
<title>gadgets.rpc Performance Tests: Container</title>
<script>
// Configurable test harness options.
var gadgethost = 'http://' + window.location.search.substring(1).split('&')[0];
var gadgetdeferred = window.location.search.indexOf('&gadgetdeferred=1') !== -1;
var uabackward = window.location.search.indexOf('&uabackward=1') !== -1;
var flash = window.location.search.indexOf('&rpctx=flash') !== -1;
var rmr = window.location.search.indexOf('&rpctx=rmr') !== -1;
// Useful per-page variables.
var gadgeturl = gadgethost + '/container/rpctest_gadget.xml';
var gadgetrelay = gadgethost + '/container/rpc_relay.uncompressed.html';
</script>
<script language="JavaScript" type="text/javascript" src="/gadgets/js/rpc.js?c=1&nocache=1&debug=1"></script>
<script>
var gadgetrenderingurl = gadgethost + '/gadgets/ifr?url=' + gadgeturl + '&libs=rpc&parent=' + window.location.protocol + '//' + window.location.host + '&debug=1&nocache=1&' + (flash ? '&rpctx=flash' : '') + (rmr ? '&rpctx=rmr' : '');
</script>
<script language="JavaScript" type="text/javascript" src="/container/rpctest_perf.js"></script>
</script>
<!-- need a script break to allow rpc.js to load before calling referenced methods -->
<script>
// gadgets.rpc "service" that receives a message sent before body onload.
function handleInitialGadgetMessage(message) {
var status = document.getElementById('initconsole');
status.innerHTML = 'gadget says: ' + message;
}
gadgets.rpc.register('initial_gadget_message', handleInitialGadgetMessage);
function handleGadgetServicePing() {
var childping = document.getElementById('childping');
var pingval = childping.innerHTML;
pingval++;
childping.innerHTML = pingval;
}
gadgets.rpc.register('gadget_service_ping', handleGadgetServicePing);
function appendGadget() {
var secret = Math.round(Math.random() * 10000000);
var renderUrl = gadgetrenderingurl + '#rpctoken=' + secret;
var container = document.getElementById("container");
// Rendering about:blank first seems to fix bfcache issue (mismatched rpc tokens)
var iframeHtml = "<iframe id='gadget' name='gadget' height=400 width=800 src='about:blank'></iframe>";
if (uabackward) {
// incorrect but likely widely used
gadgets.rpc.setRelayUrl('gadget', gadgetrelay);
gadgets.rpc.setAuthToken('gadget', secret);
container.innerHTML = iframeHtml;
document.getElementById('gadget').src = renderUrl;
} else {
// "correct" way.
container.innerHTML = iframeHtml;
document.getElementById('gadget').src = renderUrl;
gadgets.rpc.setupReceiver('gadget'); // use the new init API, which parses out all needed variables.
}
}
function initTestContainer() {
if (!gadgetdeferred) {
appendGadget();
} else {
document.getElementById('showgadget').style.display = '';
}
document.getElementById('relaymethod').innerHTML = gadgets.rpc.getRelayChannel();
// Method called from rpctest_perf.js
initPerfTest();
};
</script>
</head>
<body style="background-color: #cccccc" onload="initTestContainer();">
<div>gadgets.rpc Performance: Container Page (method: <span id="relaymethod"></span>)</div><hr/>
<div>Initial gadget render console: <span id="initconsole">Gadget hasn't commented yet.</span></div>
<div>Child gadget ping count: <span id="childping">0</span></div><hr/>
<div>Test<br/>
<ul>
<li>Number of messages to send:
<select name="num_msgs" id="num_msgs">
<option value="1" selected>1</option>
<option value="10">10</option>
<option value="100">100</option>
<option value="1000">1000</option>
</select>
</li>
<li>Message size:
<select name="msg_size" id="msg_size">
<option value="10">10 B</option>
<option value="100">100 B</option>
<option value="1024" selected>1 kB</option>
<option value="10240">10 kB</option>
<option value="102400">100 kB</option>
<option value="1048576">1 MB</option>
</select>
</li>
<li>
<input type="button" value="Start The Test!" onclick="runPerfTest('gadget');" />
</li>
</ul>
</div>
<div id="test_running" style="display:none;">
Running test...
</div>
<div id="results" style="display:none;">
Results: Gadget-to-Container<br/>
Messages: <span id="results_num_received"></span>, Bytes: <span id="results_bytes_received"></span> <span id="in_or_out"></span><br/>
Time elapsed for test run: <span id="results_time_used"></span><br/>
Messages/second: <span id="results_msgs_per_sec"></span><br/>
Bytes/second: <span id="results_bytes_per_sec"></span><br/>
Referrer: <span id="results_referrer"></span>
</div>
<hr/>
<div>Callback<br/>
<ul>
<li>Input: <input type="text" value="test-value" size="20" id="echo_test_input"/> <input type="button" value="Sync Callback Test" onclick="runCallbackTest('gadget',true);"/> <input type="button" value="Async Callback Test" onclick="runCallbackTest('gadget',false);"/></li>
<li>Result: <span id="echo_test_result"></span></li>
</ul>
</div>
<hr/>
<div>Gadget: <span id="showgadget" style="display:none"><input type="button" onclick="appendGadget(); this.style.display='none';" value="Append Gadget Now (for delayed load testing)"/></span></div>
<div id="container"></div>
</body>
</html>