我正在使用Google本机代码在android 8.1中测试hwbinder的性能。这里是the link of google performance test。
我选择用户模式来编译源代码。运行此测试时,没有得到有用的答复和NE错误,我看到了逻辑删除日志,这表明原因是因为客户端使用空指针获取服务。但是,服务器还可以。我得到领事的答复。
***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
这是墓碑日志。
...
pid: 7778, tid: 7778, name: libhwbinder_ben >>> libhwbinder_benchmark64 <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
Cause: null pointer dereference
...
backtrace:
#00 pc 0000000000005b1c /system/bin/libhwbinder_benchmark64 (BM_sendVec_binderize(benchmark::State&)+80)
#01 pc 00000000000083c4 /system/bin/libhwbinder_benchmark64 (benchmark::internal::(anonymous namespace)::RunInThread(benchmark::internal::Benchmark::Instance const*, unsigned long, int, benchmark::internal::ThreadManager*)+108)
#02 pc 0000000000007004 /system/bin/libhwbinder_benchmark64 (benchmark::RunSpecifiedBenchmarks(benchmark::BenchmarkReporter*, benchmark::BenchmarkReporter*)+2588)
#03 pc 0000000000005a60 /system/bin/libhwbinder_benchmark64 (main+792)
#04 pc 00000000000c0a94 /system/lib64/libc.so (__libc_init+88)
#05 pc 00000000000056a8 /system/bin/libhwbinder_benchmark64 (_start_main+80)
然后,我选择eng模式来编译相同的代码。我成功了,并得到了与Google性能测试相同的结果。
我发现密钥是/system/lib64/android.hardware.tests.libhwbinder@1.0.so。如果我以eng模式推送此文件,则编译成功。如果我以用户模式编译此文件,则会失败。
为什么我不能在用户模式下运行此测试?具有两种编译模式的.so文件之间有什么区别?
我用谷歌搜索这个问题。但是,关于hidl和hwbinder的事情太少了。