Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Drive the benchmark's device arm through devicelab

Open
#95 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
22/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
android, kotlin, shell
Domain
devtools

Research direction

Start in devicelab/lab, where DEMO_PACKAGE, DEMO_ACTIVITY, build_demo, install_demo and wait_for_playback are hardwired to the demo; parameterise these per scenario, keeping the demo's values as defaults. Then add devicelab/scenarios/benchmark.sh and cover the device-free parts in devicelab/test/selftest. Done when devicelab/lab run benchmark yields peak RSS and battery per arm and the baseline's device table has numbers.

Written by the indexing model from the issue text.

Description

enhancement need-device

Problem

benchmark/ (#43) reports every metric of PRD.md §6's matrix except the two that need a device:
peak RSS and battery delta over a 30-minute session. Both are properties of a process on a
device with a battery, and there is no honest way to take either from a JVM — so the committed
baseline prints them as dashes, and says so rather than leaving the metrics out.

The app half exists. BenchmarkActivity takes an arm, one of the public streams in
PublicStreams.kt, and a duration; plays a 30-minute session on a real device over a real network;
writes its telemetry as a JSONL trace in the same format the Robolectric arm uses; and logs one line
under the tag SuperPlayerBench when it is done. It deliberately measures neither number itself — an
app measuring its own memory would be measuring the measurement.

What is missing is the harness around it.

Why it was not done with #43

devicelab/ is this repository's one entry point for measuring on a device, and its README already
names the benchmark as a consumer. But lab is currently shaped around the demo throughout:

  • DEMO_PACKAGE and DEMO_ACTIVITY are fixed globals
  • build_demo builds demo/ and knows its APK path
  • install_demo verifies a stale-artifact fingerprint the demo's build writes into its own assets
  • wait_for_playback reads dumpsys media_session, and the benchmark app publishes no session

Parameterising all of that is a real change to a harness whose whole value is that it is reliable,
and it cannot be verified without a device. Shipping it half-done inside #43 would have put
untested shell into the one thing that is supposed to be dependable.

What to build

  • A scenario-declared app in devicelab/lab: package, activity, build directory and APK name, with
    the demo's values as the defaults, so no existing scenario changes.
  • A readiness probe a scenario can override. The benchmark app's is its own SuperPlayerBench
    logcat line, not a media session.
  • The stale-artifact guard for the benchmark's APK — the equivalent of the demo's
    RecordSuperPlayerArtifacts, so a device run refuses to measure an APK built against a stale
    publish, exactly as the demo's does.
  • devicelab/scenarios/benchmark.sh, running each arm in turn with the process_memory and
    battery data sources, and a scenario_report that puts peak RSS and battery beside each arm.
  • Coverage in devicelab/test/selftest, which is device-free and in check.

Done when

  • devicelab/lab run benchmark produces a report with peak RSS and battery per arm.
  • benchmark/baseline/'s device-arm table has numbers in it instead of dashes, with the device
    recorded alongside them the way run.json records one.
  • benchmark/README.md and devicelab/README.md stop saying this is not built.
Dominant language
Kotlin
Stars
1
Forks
0
Avg merge
1h 12m
Merged PRs (30d)
195

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from ramesh130/superplayer

All issues in ramesh130/superplayer

Similar issues

More Kotlin issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.