Android15 Camera3中打印函数调用栈
1.使用CallStack跟踪函数调用
修改涉及三个内容:
- Android.bp中添加对CallStack的引用。CallStack被打包在libutilscallstack.so。
- 代码中包含CallStack的头文件。
- 代码中调用CallStack接口,打印函数调用栈。
例子:查看Camera3Device::waitUntilStateThenRelock调用链路
1.Camera3Device.cpp中包含utils/CallStack.h头文件
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index bb54f25..9f30160 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -74,6 +74,7 @@
#include <algorithm>
#include <optional>
#include <tuple>
+#include <utils/CallStack.h>
using namespace android::camera3;
using namespace android::camera3::SessionConfigurationUtils;
2.Camera3Device::waitUntilStateThenRelock中打印调用栈
@@ -1654,32 +1661,59 @@ status_t Camera3Device::waitUntilStateThenRelock(bool active, nsecs_t timeout,
mRequestThread->signalPipelineDrain(streamIds);
signalPipelineDrain = true;
}
mRequestBufferSM.onWaitUntilIdle();
}
+ {
+ android::String8 backtrace;
+ android::CallStack cs;
+ cs.update();
+ backtrace = cs.toString();
+ ALOGD("chenhy-trace:%s", backtrace.c_str());
+ }
+
bool stateSeen = false;
nsecs_t startTime = systemTime();
do {
if (mStatus == STATUS_ERROR) {
// Device in error state. Return right away.
3.Camera3Device.cpp编译时链接libutilscallstack.so
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
index a74b6d6..b58c535 100644
--- a/services/camera/libcameraservice/Android.bp
+++ b/services/camera/libcameraservice/Android.bp
@@ -233,6 +233,10 @@ cc_library {
"-Werror",
"-Wno-ignored-qualifiers",
],
+
+ shared_libs: [
+ "libutilscallstack",
+ ],
}
cc_library_static {
4.效果