Hello,
I am encountering an issue when using PVRCarbon to capture multi-process Vulkan applications.
While single-process Vulkan applications record and replay without any issues (with correct file sizes), the .pvrcbn file generated for multi-process applications is abnormally small, only 2.7 KB. The same multi-process Vulkan application can be captured successfully using GFXReconstruct.
Due to confidentiality, I cannot share the specific game. I would like to ask: is capturing multi-process Vulkan applications simply not supported in this version, or is there likely an error in my configuration?
Environment Details:
-
Version: PVRCarbon v0.15
-
Container Environment: Android 11
-
Library:
PVRCarbon_v0.15\Recorder\Vk\Linux_armv8_64\libVkLayer_PowerVR_carbon.so
Troubleshooting Steps:
I have tried capturing from Frame 0 and Frame 1000. In all attempts, the generated parts folder and the final .pvrcbn file remain only 2.7KB.
Attachments/Logs:
pvrcarbon.json:
{
"recording":
{
"enable": true,
"frames": "0-1100",
"frameDelimiters": "vkFrameBoundary,vkQueuePresentKHR",
"bundleParts": true,
"exitAfterFrame": 1000000,
"output":
{
"debug": true,
"verbose": true,
"information": true,
"warning": true,
"error": true
}
}
}
logcat -s PVRCarbon,vulkan:
D vulkan : searching for layers in '/data/local/debug/vulkan'
I PVRCarbon: Detected the Android Vulkan Loader querying for information. Switching to passthrough mode
D vulkan : added global layer 'VK_LAYER_POWERVR_carbon' from library '/data/local/debug/vulkan/libVkLayer_PowerVR_carbon.so'
D vulkan : searching for layers in '/data/user/0/com.myapp'
D vulkan : searching for layers in '/data/app/~~4p5gDNcx7mKSxELefbELrQ==/com.myapp-rNcwPvC0w-v-lVSysu_WrQ==/lib/arm64'
D vulkan : searching for layers in '/data/app/~~4p5gDNcx7mKSxELefbELrQ==/com.myapp-rNcwPvC0w-v-lVSysu_WrQ==/base.apk!/lib/arm64-v8a'
I vulkan : Loaded layer VK_LAYER_POWERVR_carbon
I PVRCarbon: Found Config: '/data/local/debug/vulkan/pvrcarbon.json'
D PVRCarbon: JsonConfig: Enabled recording
D PVRCarbon: JsonConfig: Set frames to '0-1100'
D PVRCarbon: JsonConfig: Set frame delimiters to 'vkFrameBoundary,vkQueuePresentKHR'
D PVRCarbon: JsonConfig: Enabled bundle parts
D PVRCarbon: JsonConfig: Set exit after frame to 1000000
D PVRCarbon: Failed to get JNI_GetCreatedJavaVMs
D PVRCarbon: Using fallback method for setting default output path
I PVRCarbon: Recording process: 'com.myapp'
D PVRCarbon: Failed to retrieve the fully qualified path for library 'libc.so' (Unsupported)
D PVRCarbon: Library 'libc.so' loaded
D PVRCarbon: Library 'libc.so' unloaded
D PVRCarbon: Failed to retrieve the fully qualified path for library 'libdl.so' (Unsupported)
D PVRCarbon: Library 'libdl.so' loaded
D PVRCarbon: Library 'libdl.so' unloaded
I PVRCarbon: Successfully installed syshooks
I PVRCarbon: Recording frames: 0-1100
I PVRCarbon: Writing intermediate data to '/data/data/com.myapp/files/com.myapp_frames_0-1100.0000.parts'
D PVRCarbon: Vk Interface: Creating shared layer state
D PVRCarbon: Vk Interface: Adding Host Layer
D PVRCarbon: Vk Interface: Adding Overrides Layer
D PVRCarbon: Vk Interface: Adding Record Layer
D PVRCarbon: Vk Interface: Adding Memory Layer
D PVRCarbon: Vk Interface: Adding Native Buffer Layer
D PVRCarbon: Vk Interface: Adding handle lifetimes Serialisation Layer
D PVRCarbon: Failed to retrieve the fully qualified path for library '/system/lib64/libvulkan.so' (Unsupported)
D PVRCarbon: Library '/system/lib64/libvulkan.so' loaded
I PVRCarbon: Supported Instance Extensions (11 in total):
I PVRCarbon: VK_KHR_surface : Spec Version [25]
I PVRCarbon: VK_KHR_android_surface : Spec Version [6]
I PVRCarbon: VK_EXT_swapchain_colorspace : Spec Version [4]
I PVRCarbon: VK_KHR_get_surface_capabilities2 : Spec Version [1]
I PVRCarbon: VK_KHR_device_group_creation : Spec Version [1]
I PVRCarbon: VK_KHR_external_fence_capabilities : Spec Version [1]
I PVRCarbon: VK_KHR_external_memory_capabilities : Spec Version [1]
I PVRCarbon: VK_KHR_external_semaphore_capabilities : Spec Version [1]
I PVRCarbon: VK_KHR_get_physical_device_properties2 : Spec Version [2]
I PVRCarbon: VK_EXT_debug_report : Spec Version [9]
I PVRCarbon: VK_EXT_debug_utils : Spec Version [2]
I PVRCarbon: Supported Instance Layers (1 in total):
I PVRCarbon: VK_LAYER_POWERVR_carbon : Spec Version [4211009], Implementation Version [61440]
V PVRCarbon: Opening '/data/data/com.myapp/files/com.myapp_frames_0-1100.0000.parts/0.calls.pvrcbn.part' for writing
I PVRCarbon: Enabling instance extension: VK_KHR_get_physical_device_properties2
I PVRCarbon: Enabling instance extension: VK_KHR_device_group_creation
I PVRCarbon: Created Vulkan '1.0.1' instance
I PVRCarbon: Application Info: 'UE4' (0)
I PVRCarbon: Engine Info: 'UE4' (0)
D PVRCarbon: Vk Interface: Enabling passthrough mode
D PVRCarbon: Library '/system/lib64/libvulkan.so' unloaded
D PVRCarbon: Vk Interface: Adding Host Layer
D PVRCarbon: Vk Interface: Adding Memory Layer
D PVRCarbon: Recorder: Finalising Recording...
I PVRCarbon: Packaging up '/data/data/com.myapp/files/com.myapp_frames_0-1100.0000.parts' using compression 'zlib'...
D PVRCarbon: Adding zip entry for parts file '/data/data/com.myapp/files/com.myapp_frames_0-1100.0000.parts/0.calls.pvrcbn.part' ('36448' bytes uncompressed)...
I PVRCarbon: Successfully created '/data/data/com.myapp/files/com.myapp_frames_0-1100.pvrcbn'
D PVRCarbon: Recorder: Finalising Complete
ls -hl /data/data/com.myapp/files/com.myapp_frames_0-1100.pvrcbn
-rw------- 1 u0_a122 u0_a122 2.7K 2026-03-31 14:50 /data/data/com.myapp/files/com.myapp_frames_0-1100.pvrcbn
adb multi-process log print:
adb shell '
pkg=com.myapp
echo "== Process List =="
ps -A -o PID,NAME 2>/dev/null | grep "$pkg" 2>/dev/null
echo ""
echo "== Unique Process Names =="
ps -A -o NAME 2>/dev/null | grep "$pkg" 2>/dev/null | sort -u
echo ""
echo "== Vulkan Usage =="
for p in /proc/[0-9]*; do
pid=${p##*/}
name=$(cat $p/cmdline 2>/dev/null)
[ -z "$name" ] && continue
echo "$name" | grep -q "$pkg" 2>/dev/null || continue
if grep -q "vulkan.powervr.so" $p/maps 2>/dev/null; then
echo "$pid: $name"
fi
done
output:
== Process List ==
35201 com.myapp:xg_vip_service
35619 com.myapp:psoprogramservice
35625 com.myapp:psoprogramservice1
37336 com.myapp
== Unique Process Names ==
com.myapp
com.myapp:psoprogramservice
com.myapp:psoprogramservice1
com.myapp:xg_vip_service
== Vulkan Usage ==
35201: com.myapp:xg_vip_service
35619: com.myapp:psoprogramservice
35625: com.myapp:psoprogramservice1
37336: com.myapp
Thank you for your help.