Производительность и сравнение
Замеры на одном телефоне: vivo PD2536, Android 16, Wi-Fi, одна подписка Remnawave, локация «Нидерланды» во всех трёх приложениях (выход проверен по cdn-cgi/trace: loc=NL), 27.10.2026.
| RVC 1.0.8 | INCY 3.8.2 | Happ 4.9.0 | |
|---|---|---|---|
| Размер установленного APK | 16,5 МБ | 53,8 МБ | 63,8 МБ |
| Холодный запуск (среднее из 3) | 156 мс | 742 мс | 303 мс |
| Память с подключённым VPN (PSS) | 88 МБ | 135 МБ | 211 МБ |
| Процессы / потоки | 1 / 65 | 2 / 105 | 3 / 180 |
| Кадров за 10 с на главном экране при подключении | 29 | 13 | 917 |
| CPU на 100 МБ скачивания (Chrome, медиана) | 2,0 с | 2,2 с | 2,4 с |
| CPU в фоне, простой (медиана из 3 по 60 с) | 0,5 % ядра | 0,3 % ядра | 0,6 % ядра |
Скорость через туннель у всех одинаковая — 50 МБ скачиваются за 6–7 секунд (около 60–70 Мбит/с): она упирается в сервер, а не в клиент.
Что изменилось с прошлого замера (RVC 1.0.6, INCY 3.7.9, Happ 4.8.0, «Автовыбор»): RVC стал запускаться быстрее (203 → 156 мс) за счёт Baseline Profile и одной операции Keystore на старте; INCY перестал перерисовывать главный экран каждый кадр и в простое теперь тратит меньше всех. Happ по-прежнему рисует около 90 кадров в секунду на открытом главном экране.
Что изменилось в 1.0.8
Запуск ускорен с двух сторон:
- Baseline Profile. Список методов, которые нужны при запуске, прокрутке главного экрана и в настройках, встроен в APK. Android компилирует их заранее при установке, а не интерпретирует при первых запусках. Профиль собирается модулем
:baselineprofileна эмуляторе. - Одна операция Keystore вместо пяти и больше. Раньше каждый зашифрованный файл (настройки, подписки, серверы, профили) расшифровывался ключом из Android Keystore — это вызов системного сервиса на каждый файл. Теперь файлы шифруются ключом данных, а ключом Keystore защищён только он.
Замер на эмуляторе (Android 15, программная отрисовка, поэтому абсолютные значения выше, чем на телефоне), холодный запуск после компиляции по профилю:
| 1.0.7 | 1.0.8 | |
|---|---|---|
| Холодный запуск | 2,3–2,9 с | 0,9–1,4 с |
| Чтение сохранённых данных | 120–375 мс | 55–125 мс |
Почему не hev-socks5-tunnel
INCY и Happ передают пакеты через hev-socks5-tunnel и локальный SOCKS-порт. RVC так не делает: на 127.0.0.1 не должно быть портов, через которые другие приложения могли бы найти прокси и узнать IP сервера (см. Безопасность). Связать hev с ядром через unix-сокет нельзя без потери UDP — SOCKS требует для него UDP-порт на localhost. А профиль показал, что время уходит на системные вызовы, которые hev делает так же — на каждый пакет.
Интерфейс
Главный экран рисует кадры только когда на нём что-то меняется — таймер и скорость раз в секунду. Happ на открытом главном экране рисует около 90 кадров в секунду, INCY с версии 3.8 — тоже только при изменениях. Живой фон растрируется один раз в текстуру; при прокрутке средний кадр — около 6 мс при бюджете 8,3 мс на 120 Гц.
Как мерили
CPU — сумма
utime+stimeвсех процессов приложения из/proc/<pid>/stat;память —
dumpsys meminfo, кадры —dumpsys gfxinfo, запуск —am start -W;профиль —
simpleperf record --appна profileable-сборке.скачивание — Chrome открывает
speed.cloudflare.com/__down?bytes=50000000, считается CPU процессов VPN-приложения, медиана из 4–6 загрузок, пересчёт на 100 МБ;запуск —
am start -Wпосле остановки приложения, первый запуск (прогрев кеша) не считается.
Простой в фоне зашумлён трафиком других приложений. В Happ на этом телефоне включён обход для части приложений («Прокси для выбранных приложений» → «Обход»), поэтому через его туннель в простое идёт меньше трафика; Chrome при этом идёт через VPN, что проверено перед замером скачивания.