Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7669ea5a authored by Josh Gao's avatar Josh Gao Committed by Gerrit Code Review
Browse files

Merge changes I4d351f56,Ib9e91157

* changes:
  adbd: tune USB read/write sizes and queue depths.
  adb: add benchmarks for sink/source.
parents 83d9b680 5841a96a
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@

import os
import statistics
import subprocess
import tempfile
import time

import adb
@@ -56,6 +58,41 @@ def analyze(name, speeds):
    msg = "%s: %d runs: median %.2f MiB/s, mean %.2f MiB/s, stddev: %.2f MiB/s"
    print(msg % (name, len(speeds), median, mean, stddev))

def benchmark_sink(device=None, size_mb=100):
    if device == None:
        device = adb.get_device()

    speeds = list()
    cmd = device.adb_cmd + ["raw", "sink:%d" % (size_mb * 1024 * 1024)]

    with tempfile.TemporaryFile() as tmpfile:
        tmpfile.truncate(size_mb * 1024 * 1024)

        for _ in range(0, 10):
            tmpfile.seek(0)
            begin = time.time()
            subprocess.check_call(cmd, stdin=tmpfile)
            end = time.time()
            speeds.append(size_mb / float(end - begin))

    analyze("sink %dMiB" % size_mb, speeds)

def benchmark_source(device=None, size_mb=100):
    if device == None:
        device = adb.get_device()

    speeds = list()
    cmd = device.adb_cmd + ["raw", "source:%d" % (size_mb * 1024 * 1024)]

    with open(os.devnull, 'w') as devnull:
        for _ in range(0, 10):
            begin = time.time()
            subprocess.check_call(cmd, stdout=devnull)
            end = time.time()
            speeds.append(size_mb / float(end - begin))

    analyze("source %dMiB" % size_mb, speeds)

def benchmark_push(device=None, file_size_mb=100):
    if device == None:
        device = adb.get_device()
@@ -110,6 +147,8 @@ def benchmark_shell(device=None, file_size_mb=100):
def main():
    device = adb.get_device()
    unlock(device)
    benchmark_sink(device)
    benchmark_source(device)
    benchmark_push(device)
    benchmark_pull(device)

+4 −4
Original line number Diff line number Diff line
@@ -57,11 +57,11 @@ using android::base::StringPrintf;
// We can't find out whether we have support for AIO on ffs endpoints until we submit a read.
static std::optional<bool> gFfsAioSupported;

static constexpr size_t kUsbReadQueueDepth = 16;
static constexpr size_t kUsbReadSize = 16384;
static constexpr size_t kUsbReadQueueDepth = 32;
static constexpr size_t kUsbReadSize = 8 * PAGE_SIZE;

static constexpr size_t kUsbWriteQueueDepth = 16;
static constexpr size_t kUsbWriteSize = 16 * PAGE_SIZE;
static constexpr size_t kUsbWriteQueueDepth = 32;
static constexpr size_t kUsbWriteSize = 8 * PAGE_SIZE;

static const char* to_string(enum usb_functionfs_event_type type) {
    switch (type) {