From 1751ecb163d28da20863d463e4f21322ad1cb9ff Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 20 Sep 2018 20:53:38 +0200 Subject: benchmark --- src/webex/pages/benchmark.html | 17 +++++++ src/webex/pages/benchmark.tsx | 111 +++++++++++++++++++++++++++++++++++++++++ src/webex/pages/common.ts | 31 ++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 src/webex/pages/benchmark.html create mode 100644 src/webex/pages/benchmark.tsx create mode 100644 src/webex/pages/common.ts (limited to 'src') 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 @@ + + + + + Taler Wallet: Benchmarks + + + + + + +
+

Benchmarks

+
+
+ + 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 + */ + + +/** + * 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
Waiting for results ...
; + } else { + return
; + } + } + return ( + <> +

Results for {result.repetitions} repetitions

+ + + + + + + { + Object.keys(result.time).sort().map( + k => + + + + + ) + } + +
{i18n.str`Operation`}{i18n.str`time (ms/op)`}
{k}{result.time[k] / result.repetitions}
+ + ); +} + +class BenchmarkRunner extends React.Component { + 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 ( +
+ + this.setState({ repetitions: Number.parseInt(evt.target.value) })} /> + {" "} + + +
+ ); + } +} + + +runOnceWhenReady(() => { + ReactDOM.render(, 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 + */ + +/** + * 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(); +} -- cgit v1.2.3