Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Andrew Woloszyn
    @AWoloszyn
    For Vulkan, it should replay on the Device on which it was captured.
    Only our GLES replay is done on host.
    Andrew Woloszyn
    @AWoloszyn
    In reality, our test is slightly lacking for Vulkan.
    /gapis/api/vulkan/replay.go:GetReplayPriority only looks at the ABI of the device right now.
    I have opened #1069 to track this
    BeingChen
    @kingchenbin
    Hey Guys, I am trying to capture an vulkan application on Windows with released binary. It seems that only 64-bits application can be logged. Have you ever met this issue?
    Andrew Woloszyn
    @AWoloszyn
    Hi, thanks for the interest.
    That is correct, we currently only build 64-bit binaries. In fact even if you were to compile yourself, at the moment, you would still only get 64-bit binaries.
    There is no technical reason that it would be incredibly difficult to handle 32-bit windows applications, but might require quit a bit of work in the build system to get everything working well together.
    rishi-rranjan
    @rishi-rranjan
    I would like to save the image data in YUV format..If YUV format is not possible, RGBA works for me..I can convert RGBA to YUV offline.. Currently framebuffer window only allows to save PNG image..Can you help me how to get RGBA or YUV image saved?
    Ben Clayton
    @ben-clayton
    PNG files have red, green, blue and alpha channels. What file type are you after? Just raw bytes in RGBA sequential order? I'm not aware of any standardized file format for YUV. Again, what file format are you after?
    Ben Clayton
    @ben-clayton
    @rishi-rranjan - imagemagick let's you convert between almost every image format known to mankind.
    rishi-rranjan
    @rishi-rranjan
    @ben-clayton I am looking at raw bytes for RGBA sequential order..I was thinking that compression will be lossy PNG is a lossless compression so I will start with this and convert it to RAW RGBA/YUV
    For the context, we are using this to compare our cloud VR solution with VR content running locally on DayDream so we need the RAW RGBA bytes to compare them
    David Srbeck├Ż
    @dsrbecky
    @rishi-rranjan Note that the framebuffer in GAPID is rendered using the desktop's GPU, so it is not bit-for-bit identical to what is on the device (at least for GL, Vulkan does replay on device)
    rishi-rranjan
    @rishi-rranjan
    @dsrbecky Thanks for pointing this out.. Our main aim to make sure that latency from our cloud server so we will be comparing the same content playing natively on Android and capture it using GAPID against the frames captured using our solution from remote server and being played on Android
    We will be comparing both the captures mainly to analyze the similarity in both the capture to conclude that our sloution has same latency KPIs as content running natively on Android
    Jakouf
    @Jakouf
    Is there currently a way to get the time for each drawcall in GLES?
    Ben Clayton
    @ben-clayton
    Hi @Jakouf.
    Currently no. We do have plans to add profiling support to GAPID. Please stay tuned.
    Jakouf
    @Jakouf
    Thanks a lot for the answer.
    kko-smol
    @kko-smol
    Hello. Debug opengles linux application (on arm with Mali400) not supported, is right?
    TheMartynBliss
    @TheMartynBliss
    Trying to build the latest release from source (windows 10) and getting fatal errors due to string.h not being found - anyone else seen this?
    Ben Clayton
    @ben-clayton
    Hi @TheMartynBliss , long time no see.
    I'm actually building on Win10 right now... Let me see if I hit this
    Ben Clayton
    @ben-clayton
    @TheMartynBliss - I just did a full clean build without hitting that issue. What file was it in?
    Edwin Vane
    @ThalmicRevane
    Is it possible to use GAPID in an embedded native environment? That is, no java. It seems to be possible but it's looking like I need to replicate a lot of work done by various clients. Is that the case?
    I can link a binary executable against libgapii.so but it looks like I need to do "installation" stuff manually. Is that right?
    Edwin Vane
    @ThalmicRevane
    Also, is it expected that GAPID doesn't build out of the box? I followed all the linux instructions and find myself having to make changes to bazel files to get by errors.
    Edwin Vane
    @ThalmicRevane
    Scratch that. 0.20.0 works. Docs need updating from stated 0.18.0 I guess.
    FYI, 0.25.0 does not work.
    Hugues Evrard
    @hevrard
    @ThalmicRevane bazel 0.25 is being worked on (google/gapid#2744) , please use bazel 0.24 for now
    Edwin Vane
    @ThalmicRevane
    I gave up. Looking at other api tracing libs now. It would be too much work to replicate functionality that depends on java.
    Hugues Evrard
    @hevrard
    @ThalmicRevane sorry to hear that. Out of curiosity, could you let me know what you want to achieve and why GAPID is not a good fit?
    Edwin Vane
    @ThalmicRevane
    I'm trying to debug a graphics memory leak I suspect is being caused by an OpenGL-using lib I'm using. I wanted to trace the GL lib calls like I would do on a desktop system. The Android environment I'm working in has Java stripped away. So I've got adb but otherwise everything is 100% native.
    While I can link in the libgapii libs it appears they need to be initialized in a way that requires the java debug bridge. At least as far as I can gather looking at the go code.
    Hugues Evrard
    @hevrard
    Yes, the interceptor (GAPII) needs to inject trampoline code into the application under test, and uses the debugger to stop the app right when it starts. So the Java debugger is required for this.
    Which version of Android is your project using?
    Edwin Vane
    @ThalmicRevane
    7.1
    Hugues Evrard
    @hevrard
    Then I am afraid the debugger + code injection hack is needed. Pascal merged a new approach which only uses GLES layers, but that would only be available in Android Q onwards I think: google/gapid#2700
    Good luck with your project, please let us know how you/another tracer manage to trace GLES calls with a different approach!
    Edwin Vane
    @ThalmicRevane
    Too bad. Sure I hope I find something useful :P
    Andrew Woloszyn
    @AWoloszyn
    When you say The Android environment I'm working in has Java stripped away. Does this mean you can do something like LD_PRELOAD= ? You may be able to get gapii attached that way.
    If you have sufficient control over your application (and its lifecycle) you should in theory be able to LD_PRELOAD libgapii.so, and create the spy (call gapii::Spy::get())
    Without Java, we would be unable to understand how the application launches, and connect normally. (OnCreate / ClassLoaders) are what android typically uses, but your application is obviously started in some other way, so would have to do something similar
    Edwin Vane
    @ThalmicRevane
    LD_PRELOAD is the technique I'm about to try with another lib: https://github.com/apitrace/apitrace.
    If I were to do this with gapii where does it send trace data? I thought it blocked on a socket connection? Presumably I need a client also running?
    Hugues Evrard
    @hevrard
    @ThalmicRevane GAPII will talk to GAPIS via this socket. You may be able to launch GAPIS on your host machine, and point GAPII socket connection to GAPIS via adb forward port forwarding
    GAPII does not talk to a client directly. The scheme is client <--> GAPIS <--> GAPII
    Pascal Muetschard
    @pmuetschard
    @ThalmicRevane sorry I'm late to the party. What you are trying to do is entirely possible. Modify your app to load libgapii.so before doing any EGL/GL work. Then, call the exposed JNI_OnLoad function. You can pass two nullptrs as arguments, as we no longer use Java for anything and ignore them. If you cannot modify your app to call JNI_OnLoad, you can achieve the same by marking the JNI_OnLoad function as a constructor function and removing its arguments, rebuilding, and using LD_PRELOAD to load the library. Calling JNI_OnLoad will initialize the spy and block your app waiting for a connection from host. You should see a GAPII awaiting connection on pipe <pipe> message in logcat. You can then trace using the gapit command line utility. Specify the android device and use a target URL of the form port:<pipename>:<abi>. <pipename> is gapii by default and <abi> is one of armeabi-v7a, arm64-v8a or x86 depending on the ABI of the app you are trying to trace. Let me know if that works for you.
    Pascal Muetschard
    @pmuetschard
    An example trace command: gapit trace -api gles -disable-pcs -out trace.gfxtrace -serial HT0000A00000 -uri port:gapii:arm64-v8a (use your device's serial, of course).
    Edwin Vane
    @ThalmicRevane
    Thanks for those instructions. I got apitrace working for me. If I get around to it I will try gapid again.
    RahulAN
    @citrix123
    Hi All !
    I am very new to gapid
    Do gapid works with anbox emulator ?
    Hugues Evrard
    @hevrard
    Hi, unfortunately GAPID does not support the official Android emulator, and it very probably doesn't work either on anbox. GAPID system requirements are detailed here: https://gapid.dev/requirements/