mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-24 23:38:09 +00:00
feat(python): implement benchmark application interface
This commit is contained in:
parent
52d85d1f39
commit
c8faac952a
1
python/.changelog.d/4101.added
Normal file
1
python/.changelog.d/4101.added
Normal file
@ -0,0 +1 @@
|
||||
Added support for benchmarks.
|
36
python/src/trezorlib/benchmark.py
Normal file
36
python/src/trezorlib/benchmark.py
Normal file
@ -0,0 +1,36 @@
|
||||
# This file is part of the Trezor project.
|
||||
#
|
||||
# Copyright (C) 2012-2022 SatoshiLabs and contributors
|
||||
#
|
||||
# This library is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License version 3
|
||||
# as published by the Free Software Foundation.
|
||||
#
|
||||
# This library 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 Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the License along with this library.
|
||||
# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from . import messages
|
||||
from .tools import expect
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .client import TrezorClient
|
||||
from .protobuf import MessageType
|
||||
|
||||
|
||||
@expect(messages.BenchmarkNames)
|
||||
def list_names(
|
||||
client: "TrezorClient",
|
||||
) -> "MessageType":
|
||||
return client.call(messages.BenchmarkListNames())
|
||||
|
||||
|
||||
@expect(messages.BenchmarkResult)
|
||||
def run(client: "TrezorClient", name: str) -> "MessageType":
|
||||
return client.call(messages.BenchmarkRun(name=name))
|
68
python/src/trezorlib/cli/benchmark.py
Normal file
68
python/src/trezorlib/cli/benchmark.py
Normal file
@ -0,0 +1,68 @@
|
||||
# This file is part of the Trezor project.
|
||||
#
|
||||
# Copyright (C) 2012-2022 SatoshiLabs and contributors
|
||||
#
|
||||
# This library is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License version 3
|
||||
# as published by the Free Software Foundation.
|
||||
#
|
||||
# This library 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 Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the License along with this library.
|
||||
# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
|
||||
|
||||
from fnmatch import fnmatch
|
||||
from typing import TYPE_CHECKING, List, Optional
|
||||
|
||||
import click
|
||||
|
||||
from .. import benchmark
|
||||
from . import with_client
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
||||
from ..client import TrezorClient
|
||||
|
||||
|
||||
def list_names_patern(
|
||||
client: "TrezorClient", pattern: Optional[str] = None
|
||||
) -> List[str]:
|
||||
names = list(benchmark.list_names(client).names)
|
||||
if pattern is None:
|
||||
return names
|
||||
return [name for name in names if fnmatch(name, pattern)]
|
||||
|
||||
|
||||
@click.group(name="benchmark")
|
||||
def cli() -> None:
|
||||
"""Benchmark commands."""
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.argument("pattern", required=False)
|
||||
@with_client
|
||||
def list_names(client: "TrezorClient", pattern: Optional[str] = None) -> None:
|
||||
"""List names of all supported benchmarks"""
|
||||
names = list_names_patern(client, pattern)
|
||||
if len(names) == 0:
|
||||
click.echo("No benchmark satisfies the pattern.")
|
||||
else:
|
||||
for name in names:
|
||||
click.echo(name)
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.argument("pattern", required=False)
|
||||
@with_client
|
||||
def run(client: "TrezorClient", pattern: Optional[str]) -> None:
|
||||
"""Run benchmark"""
|
||||
names = list_names_patern(client, pattern)
|
||||
if len(names) == 0:
|
||||
click.echo("No benchmark satisfies the pattern.")
|
||||
else:
|
||||
for name in names:
|
||||
result = benchmark.run(client, name)
|
||||
click.echo(f"{name}: {result.value} {result.unit}")
|
@ -31,6 +31,7 @@ from ..transport.udp import UdpTransport
|
||||
from . import (
|
||||
AliasedGroup,
|
||||
TrezorConnection,
|
||||
benchmark,
|
||||
binance,
|
||||
btc,
|
||||
cardano,
|
||||
@ -416,6 +417,7 @@ cli.add_command(tezos.cli)
|
||||
|
||||
cli.add_command(firmware.cli)
|
||||
cli.add_command(debug.cli)
|
||||
cli.add_command(benchmark.cli)
|
||||
|
||||
#
|
||||
# Main
|
||||
|
Loading…
Reference in New Issue
Block a user