- 博客(16)
- 资源 (3)
- 收藏
- 关注
原创 pthread 32位兼容问题
我创建了一个匿名共享内存。当我的client用pthread_cond_timedwait 等待信号量,server端用pthread_cond_broadcast通知的时候发现pthread_cond_timedwait每次都超时,也就是说pthread_cond_broadcast无效!我的pthread_cond_t是client初始化的,当client端是32位时,pthread_cond_t的大小就是int32_t __private[1];注意:形参__cond是64位,p1的地址是32位的。
2024-05-07 19:20:01
419
原创 Android P出现的编译问题
首先解决这个问题的思路是,将android.mk 转换成对应的android.bp文件 。 android.mk大家都很熟悉了,就是android下编译模块的配置文件,可以理解为android makefile。从android N之后,我们发现好多模块下面没有了android.mk文件,多了一个android.bp文件。这个是google在android N之后新的编译配置文件。...
2018-11-21 10:02:35
2794
原创 Monado接入perfetto
第一段意思是下面的配置保存称为一个data_events.cfg 作为perfetto --txt -c data_events.cfg的配置section.buffers: {config: {这段意思是要运行下面的一些命令。
2025-07-06 15:55:35
739
原创 moando ATW源码分析
src/xrt/compositor/client/comp_vk_client.c到src/xrt/compositor/multi/comp_multi_compositor.c的xrt_comp_create_swapchain 再到src/xrt/compositor/util/comp_base.c的base_create_swapchain,但后到src/xrt/compositor/util/comp_swapchain.c的。
2025-07-06 15:54:07
651
原创 无vsync问题分析
3、从vsync注册流程上看首次register vsync成功后,下次要开启vsync就靠上一次的vsync回调。kernel实现路径:android/kernel_platform/msm-kernel/drivers/gpu/drm/drm_vblank.c。cat d/dri/0/encoder*/status 可以看到1s中vsync增加的数量,比如72HZ 对应的增量就是72。adb shell ps -AT --pid 进程号| grep SDM_ 查看线程是否存在。
2025-07-06 15:46:36
247
原创 monotime转bootTime误差
是指计算机运行时间的单调递增计数器,通常用于计算相对时间间隔,而不受系统时间的影响。在VR应用场景中,由于vsync拿到的是monotime,所以大部分情况下用monotime,当需要预测头的pose的时候传给算法的时间是boottime。已知boottime和monotime的差异,当系统没有休眠的时候二者的差异是0. 也就是A时刻转换后的bootime等于B时刻转换后的bootime 符合预期。当系统有休眠的时候A时刻转换后的bootime小于B时刻转换后的bootime ,差异是休眠的时间。
2025-07-06 15:44:16
460
原创 开机竖条纹问题
frameworks/base/services/core/java/com/android/server/policy/BurnInProtectionHelper.java策略。可以看到层数明显增加。对比亮灭屏前后的dumpsys surfaceflinger可以看到:亮灭屏前的合成方式是gpu。由于开了防止烧屏功能导致层数增加,从而从device合成变成gpu合成,导致的竖条纹。亮灭屏 transform重置0,可以看出transform最后一行有6个像素偏移。且android12 DB版本正常。
2025-07-06 15:42:32
207
原创 绑定cpu核失效问题分析
这种调度策略旨在优化性能和资源利用率,通过将特定任务分配给特定的 CPU 核心,以最大程度地减少 CPU 缓存的切换和通信开销,从而提高系统整体性能。:在软亲和度调度中,操作系统给出了一个建议,但并不强制要求将特定任务绑定到特定的 CPU 核心。操作系统可能会尽力将任务调度到建议的 CPU 上执行,但仍然有可能在不同的 CPU 之间进行迁移,特别是在负载均衡或性能优化的情况下。这意味着操作系统将任务限制在特定的 CPU 上执行,不会在不同的 CPU 之间进行迁移。2、修改cpu簇最小在线数量为cpu数量。
2025-07-06 15:41:05
262
原创 binder线程jni找不到java类
在 Binder 线程中使用 JNI 时,由于 JNI 代码运行在原生层,而原生层并没有直接关联 Java 的 ClassLoader,所以需要手动设置 ClassLoader,确保 JNI 能正确加载 Java 类。通常,在主线程或其他业务线程中,ClassLoader 已经被正确设置,而在 Binder 线程中,需要手动指定 ClassLoader,尤其是当 JNI 调用涉及 Java 类的反射或调用方法时。我的jni调用是在binder线程中发起的。我是通过jni的FindClass查找的。
2024-09-11 17:51:57
314
原创 如何使用BitTube进行IPC通信
这是通过 Unix 域套接字提供的读写能力来实现的,使得系统可以高效地响应和处理不同的事件。Binder 的通信机制涉及较多的上下文切换和内核操作,而 BitTube 通过直接的套接字通信,资源消耗较少。:BitTube 的实现比 Binder 更为轻量,尤其是在传输简单数据(如事件通知)时,BitTube 更加合适,避免了 Binder 通信中复杂的数据序列化和反序列化步骤。:BitTube 的协议和机制简洁,特别适合短小频繁的消息传递,如输入事件、显示更新信号等。1.基于 Unix 域套接字的通信。
2024-09-06 19:33:34
385
原创 libc++ not find
libc++.so 是系统提供的 C++ 标准库,通常存在于 Android 系统的 /system/lib 目录中。libc++_shared.so 由应用或库自带,确保库和应用之间的一致性,避免由于系统更新而导致的兼容性问题。libc++_shared.so 是由开发者项目自带的 C++ 标准库实现,通常在应用的 lib 目录中。libc++_shared.so 用于应用程序和库的内部,确保在应用中使用一致的 C++ 标准库实现。编译出来的so叫libc++_shared.so。
2024-08-22 11:44:42
550
原创 绑定cpu核失效问题分析
这种调度策略旨在优化性能和资源利用率,通过将特定任务分配给特定的 CPU 核心,以最大程度地减少 CPU 缓存的切换和通信开销,从而提高系统整体性能。:在软亲和度调度中,操作系统给出了一个建议,但并不强制要求将特定任务绑定到特定的 CPU 核心。操作系统可能会尽力将任务调度到建议的 CPU 上执行,但仍然有可能在不同的 CPU 之间进行迁移,特别是在负载均衡或性能优化的情况下。这意味着操作系统将任务限制在特定的 CPU 上执行,不会在不同的 CPU 之间进行迁移。2、修改cpu簇最小在线数量为cpu数量。
2024-05-11 15:45:28
928
原创 mono转bootTime误差
boottime” 和 “monotime” 是两种不同的时间概念:1.Boottime(引导时间):是指系统启动时间,从计算机开机到操作系统完全加载并可用的时间段。在 Android 系统中,Boottime 通常是指系统启动时的时间戳,以纳秒为单位。这个时间戳可以通过系统调用获取,例如 getBtimerNs 函数。2.Monotime(单调时间):是指计算机运行时间的单调递增计数器,通常用于计算相对时间间隔,而不受系统时间的影响。
2024-05-11 10:05:41
662
原创 ASharedMemory共享内存
本文将模拟进程间共享内存的实现,用多线程模拟看api描述,他是创建了一个共享的内存区域,并返回一个文件描述符,这个描述符可以被mmap映射我们在mmp的时候可以使用flag: PROT_READ | PROT_WRITE | PROT_EXEC仅支持android26以上/** * Create a shared memory region. * * Create shared memory region and returns an file descriptor. The resul.
2022-05-28 16:07:05
1021
原创 Monado结构体
Compositor的主要结构体1、comp_compositor/*! * Main compositor struct tying everything in the compositor together. * * @ingroup comp_main * @implements xrt_compositor_native */struct comp_compositor{ struct comp_base base; //! Renderer helper.渲染帮助类
2022-05-26 17:43:33
536
原创 Android Selinux权限配置
如果直接如上添加到system_server.te文件中,会报一个neverallow;针对neverallow google是允许修改的,强制修改会导致gms测试fail针对如何避免这种情况,需要修改你所设置属性的lable,如下标红的地方。修改方法就是如下▪(1). 定义system property类型. 在property.te•type demo_prop, property...
2018-11-21 11:30:25
84
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅