aboutsummaryrefslogtreecommitdiff
path: root/src/webex/pages/benchmark.tsx
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-09-20 20:53:38 +0200
committerFlorian Dold <florian.dold@gmail.com>2018-09-20 20:53:38 +0200
commit1751ecb163d28da20863d463e4f21322ad1cb9ff (patch)
tree9f301534ef20fe01da30d3cb89249ee708e811ce /src/webex/pages/benchmark.tsx
parentb285d3e2774c1fa3842821b3af7d7bb6a71f50de (diff)
downloadwallet-core-1751ecb163d28da20863d463e4f21322ad1cb9ff.tar.xz
benchmark
Diffstat (limited to 'src/webex/pages/benchmark.tsx')
-rw-r--r--src/webex/pages/benchmark.tsx111
1 files changed, 111 insertions, 0 deletions
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
+});