feat: M6.10–M6.19 批量收编 + M6.19 推卡验收
- M7 launcher 重写 5 期(虚拟化宫格/meow_theme 单一权威/横幅动画/自定义 PIN 键盘) - OOM 通用化(cachegov 上收 SDK)、自动切歌根治、meowpanel jv_free 泄漏修复、Hello 滚动卡顿修复 - ncm 歌词 UI / 媒体通知封面 / 封面分辨率 640 - 5 bug 修复:ncm 后台化 UI 叠层+点击穿透、再进 ncm 桌面叠层、播放页新旧 UI 叠层抢刷脏区(meow_ui_gfx 恢复边沿整帧重画)、PIN 亮屏亮度跳(keys.c meow_panel_on 按 settings_brightness_clamped 恢复)、通知中心封面显歌单封面(cover.c save_cover_raw 加 is_song + 命中块守卫) - 四 App 统一重链新 meow_ui.a 51caee4a;M6.19=0.8.19 固件 2d2331f2 推卡自刷验收全绿
This commit is contained in:
1 parent
c2ee7626a4
commit
3d70a3dd2c
176 files changed
+15507
-597
No files matched your search
@@ -22,6 +22,7 @@
|
||||
#define REBUFFER_AFTER_MS 500 /* 单次调用累计等待超此值后启用再缓冲迟滞 */
|
||||
#define REBUFFER_MIN (64 * 1024) /* 迟滞放行门槛(≈1.6s@320kbps) */
|
||||
#define STALL_MS 1000 /* 单次调用等待超此值 → 置 stalled(播放线程 pause 联动) */
|
||||
#define STREAM_SRC_REFAULT_MS 50 /* pread 慢于此阈且数据已在盘上 → 计一次 refault(§2.3) */
|
||||
|
||||
struct stream_src {
|
||||
int fd; /* 只读 fd(pread;写端另有自己的写 fd) */
|
||||
@@ -36,8 +37,16 @@ struct stream_src {
|
||||
uint64_t wait_ms_total;
|
||||
int underruns;
|
||||
int stalled;
|
||||
int refaults; /* 数据在盘上但 pread 慢(>50ms)= DONTNEED 丢页重读 TF(§2.3) */
|
||||
};
|
||||
|
||||
/* SDK meow_cachegov 提供的 refault 上报(strong 时覆盖弱符号;未链 SDK 时为空指针,调用需判空)。 */
|
||||
#if defined(__GNUC__)
|
||||
extern void meow_cachegov_note_refault(void) __attribute__((weak));
|
||||
#else
|
||||
extern void meow_cachegov_note_refault(void);
|
||||
#endif
|
||||
|
||||
static int64_t mono_ms(void)
|
||||
{
|
||||
struct timespec ts;
|
||||
@@ -182,9 +191,18 @@ static size_t src_read(void *buf, size_t size, void *ud)
|
||||
if (avail > 0 && !gated) {
|
||||
size_t n = (size - done) < (size_t)avail ? (size - done) : (size_t)avail;
|
||||
uint64_t pos = s->read_pos;
|
||||
int had_data = (pos < s->written); /* 数据已在盘上(放锁前采样;勿在放锁后读 written) */
|
||||
pthread_mutex_unlock(&s->mu); /* pread 期间放锁,不阻塞写端 broadcast */
|
||||
int64_t t0 = mono_ms();
|
||||
ssize_t r = pread(s->fd, (char *)buf + done, n, (off_t)pos);
|
||||
int64_t pread_ms = mono_ms() - t0;
|
||||
pthread_mutex_lock(&s->mu);
|
||||
if (r > 0 && had_data && pread_ms > STREAM_SRC_REFAULT_MS) {
|
||||
/* 数据在盘上但 pread 慢 = DONTNEED 丢页后重读 TF(underrun 确认是 refault,
|
||||
* 非网络等待)。上报 SDK meow_cachegov(弱符号,未链时为空指针需判空)。 */
|
||||
s->refaults++;
|
||||
if (meow_cachegov_note_refault) meow_cachegov_note_refault();
|
||||
}
|
||||
if (r <= 0) { /* 盘 IO 错:按中断收尾(真 EOF 语义) */
|
||||
if (!s->failed) s->failed = -3; /* NCM_ERR_IO(本层不依赖 core 头) */
|
||||
s->final = s->written ? s->written : 1;
|
||||
@@ -290,6 +308,24 @@ uint64_t stream_src_written(stream_src_t *s)
|
||||
return w;
|
||||
}
|
||||
|
||||
int stream_src_refaults(stream_src_t *s)
|
||||
{
|
||||
if (!s) return 0;
|
||||
pthread_mutex_lock(&s->mu);
|
||||
int r = s->refaults;
|
||||
pthread_mutex_unlock(&s->mu);
|
||||
return r;
|
||||
}
|
||||
|
||||
uint64_t stream_src_read_pos(stream_src_t *s)
|
||||
{
|
||||
if (!s) return 0;
|
||||
pthread_mutex_lock(&s->mu);
|
||||
uint64_t p = s->read_pos;
|
||||
pthread_mutex_unlock(&s->mu);
|
||||
return p;
|
||||
}
|
||||
|
||||
uint64_t stream_src_final(stream_src_t *s)
|
||||
{
|
||||
if (!s) return 1;
|
||||
|
||||
Reference in new issue
Block a user