Some checks failed
Android CI / build (push) Failing after 11m9s
- core-patches перебазированы с v1.13.18-extended-2.6.5 на v1.14.1-extended-2.7.2 (тот же тег, что у Windows). WireGuard на Android остаётся на официальном amneziawg-go: L3-flow 1.14 требует sagernet InputPackets, поэтому для Android-движка SupportsFlow()=false и трафик идёт через стек, как в 1.13; domain-пиры резолвятся один раз при старте. Hysteria2 переведён на GeckoOptions/hop_interval_max, xray/relay-probe/daemon — на API 1.14. - Kotlin: новые методы PlatformInterface/CommandServerHandler/CommandClientHandler, список DNS-адресов TUN, setLocale без падения, без setMemoryLimit (gate8-эксперимент gc10 удалён — API больше нет). - scripts/resolve_core_version.py: проверяет кандидата (тег→коммит, LICENSE, Go/gomobile, sing UDP, теги libbox против upstream, применимость всей серии патчей) и только тогда меняет core.properties; не проходит — fail closed. Используется windows/scripts/prepare_core_release.py; заморозка хранит singbox. - build-core: теги 1.14 (usbip/openconnect, без snell), libbox-тесты с -checklinkname=0; аудит fallback — ExchangeAsync. Хост: build-core.sh целиком, 405 unit-тестов, verify-project.sh, 475 сгенерированных конфигов приняты `sing-box check`. На устройстве ядро 1.14 ещё не проверялось.
63 lines
2.4 KiB
Text
63 lines
2.4 KiB
Text
def median:
|
|
sort as $s | ($s|length) as $n |
|
|
if $n == 0 then null
|
|
elif ($n % 2) == 1 then $s[($n/2|floor)]
|
|
else (($s[$n/2-1] + $s[$n/2]) / 2)
|
|
end;
|
|
|
|
def stats($name):
|
|
[ .[] | select(.scenario == $name) ] as $rows |
|
|
{
|
|
scenario:$name,
|
|
repetitions:($rows|length),
|
|
median_cpu_ticks:([$rows[].cpu_ticks]|median),
|
|
median_elapsed_ms:([$rows[].elapsed_nanos / 1000000]|median),
|
|
median_pss_kb:([$rows[].pss_kb]|median),
|
|
median_rss_kb:([$rows[].rss_kb]|median),
|
|
median_tun_bytes:([$rows[].tun_bytes]|median),
|
|
median_uid_network_bytes:([$rows[].uid_network_bytes]|median),
|
|
median_throughput_mbps:([$rows[].throughput_mbps]|median)
|
|
};
|
|
|
|
def delta($current;$candidate;$metric):
|
|
$current[$metric] as $a | $candidate[$metric] as $b |
|
|
if $a == null or $b == null or $a == 0 then null
|
|
else ((($b-$a)/$a*10000|round)/100)
|
|
end;
|
|
|
|
def comparison($name;$current;$candidate):
|
|
(stats($current)) as $a | (stats($candidate)) as $b |
|
|
(delta($a;$b;"median_cpu_ticks")) as $cpu |
|
|
(delta($a;$b;"median_elapsed_ms")) as $elapsed |
|
|
(delta($a;$b;"median_pss_kb")) as $pss |
|
|
(delta($a;$b;"median_throughput_mbps")) as $throughput |
|
|
{
|
|
name:$name,current:$current,candidate:$candidate,
|
|
cpu_delta_percent:$cpu,
|
|
elapsed_delta_percent:$elapsed,
|
|
pss_delta_percent:$pss,
|
|
throughput_delta_percent:$throughput,
|
|
decision:(
|
|
if [$cpu,$elapsed,$pss,$throughput] |
|
|
map(select(. != null and (fabs >= $threshold))) |
|
|
length > 0
|
|
then "PHYSICAL_CONFIRMATION_REQUIRED"
|
|
else "NO_CHANGE_BELOW_5_PERCENT_OR_NO_SIGNAL"
|
|
end
|
|
)
|
|
};
|
|
|
|
. as $rows | [$rows[].scenario] | unique as $names |
|
|
{
|
|
significance_percent:$threshold,
|
|
environment:"AVD results are exploratory; energy and production decisions require physical release/profileable runs",
|
|
scenarios:[$names[] as $name | ($rows | stats($name))],
|
|
comparisons:[
|
|
($rows | comparison("direct_vs_proxy";"selected_direct";"selected_proxy")),
|
|
($rows | comparison("home_visible_vs_closed";"ui_closed";"ui_home_visible")),
|
|
($rows | comparison("diagnostics_visible_vs_closed";"ui_closed";"ui_diagnostics_visible")),
|
|
($rows | comparison("dns_sequential_vs_parallel";"dns_sequential";"dns_parallel")),
|
|
($rows | comparison("mixed_vs_system";"stack_current_mixed";"stack_system")),
|
|
($rows | comparison("mtu_default_vs_1500";"mtu_default_9000";"mtu_1500"))
|
|
]
|
|
}
|