diff options
-rw-r--r-- | src/webex/pages/benchmark.html | 17 | ||||
-rw-r--r-- | src/webex/pages/benchmark.tsx | 111 | ||||
-rw-r--r-- | src/webex/pages/common.ts | 31 |
3 files changed, 159 insertions, 0 deletions
diff --git a/src/webex/pages/benchmark.html b/src/webex/pages/benchmark.html new file mode 100644 index 000000000..a593d1e37 --- /dev/null +++ b/src/webex/pages/benchmark.html @@ -0,0 +1,17 @@ +<!doctype html> +<html> + <head> + <meta charset="UTF-8"> + <title>Taler Wallet: Benchmarks</title> + <link rel="stylesheet" type="text/css" href="../style/wallet.css"> + <link rel="icon" href="/img/icon.png"> + <script src="/dist/page-common-bundle.js"></script> + <script src="/dist/benchmark-bundle.js"></script> + </head> + <body> + <section id="main"> + <h1>Benchmarks</h1> + <div id="container"></div> + </section> + </body> +</html> diff --git a/src/webex/pages/benchmark.tsx b/src/webex/pages/benchmark.tsx new file mode 100644 index 000000000..1d91ac0bd --- /dev/null +++ b/src/webex/pages/benchmark.tsx @@ -0,0 +1,111 @@ +/* + This file is part of TALER + (C) 2015 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + + +/** + * Benchmarks for the wallet. + * + * @author Florian Dold + */ + +import * as i18n from "../../i18n"; + +import { runOnceWhenReady } from "./common"; + +import { BenchmarkResult } from "../../walletTypes"; + +import * as wxApi from "../wxApi"; + +import * as React from "react"; +import * as ReactDOM from "react-dom"; + + +interface BenchmarkRunnerState { + repetitions: number; + result?: BenchmarkResult; + running: boolean; +} + + +function BenchmarkDisplay(props: BenchmarkRunnerState) { + const result = props.result; + if (!result) { + if (props.running) { + return <div>Waiting for results ...</div>; + } else { + return <div></div>; + } + } + return ( + <> + <h2>Results for {result.repetitions} repetitions</h2> + <table className="pure-table"> + <thead> + <tr> + <th>{i18n.str`Operation`}</th> + <th>{i18n.str`time (ms/op)`}</th> + </tr> + { + Object.keys(result.time).sort().map( + k => + <tr> + <td>{k}</td> + <td>{result.time[k] / result.repetitions}</td> + </tr> + ) + } + </thead> + </table> + </> + ); +} + +class BenchmarkRunner extends React.Component<any, BenchmarkRunnerState> { + constructor(props: any) { + super(props); + this.state = { + repetitions: 10, + running: false, + }; + } + + async run() { + this.setState({ result: undefined, running: true }); + let result = await wxApi.benchmarkCrypto(this.state.repetitions); + this.setState({ result, running: false }); + } + + render() { + return ( + <div> + <label>Repetitions:</label> + <input type="number" + value={this.state.repetitions} + onChange={(evt) => this.setState({ repetitions: Number.parseInt(evt.target.value) })} /> + {" "} + <button onClick={() => this.run()}>Run</button> + <BenchmarkDisplay {...this.state} /> + </div> + ); + } +} + + +runOnceWhenReady(() => { + ReactDOM.render(<BenchmarkRunner />, document.getElementById("container")!); + // Will be used by the backend to detect when the popup gets closed, + // so we can clear notifications +}); diff --git a/src/webex/pages/common.ts b/src/webex/pages/common.ts new file mode 100644 index 000000000..695e5fc1d --- /dev/null +++ b/src/webex/pages/common.ts @@ -0,0 +1,31 @@ +/* + This file is part of TALER + (C) 2018 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +/** + * Common helper functions for all web extension pages. + */ + +/** + * Make sure that a function is executed exactly once + * after the DOM has been loaded. + */ +export function runOnceWhenReady(f: () => void): void { + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", f); + return; + } + f(); +} |