aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/webex/pages/benchmark.html17
-rw-r--r--src/webex/pages/benchmark.tsx111
-rw-r--r--src/webex/pages/common.ts31
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();
+}