Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make quick-sqlite 2x quicker? #30

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

mjmasn
Copy link

@mjmasn mjmasn commented Oct 30, 2023

DISCLAIMER 1: This is not a PR intended to be merged, use at your own risk
DISCLAIMER 2: I don't really know anything about C++


Intro

This PR is intended to spark a discussion about improving the performance of this package. Sure it's like 5-8x faster than non-JSI packages but it's still not perfect. For background, we deal with some fairly large (for mobile anyway) data sets with up to 300000 records per table, maybe with 15-30 text/number/boolean columns on average. Selecting all these rows might take 20-30 seconds or more depending on the device. Obviously selecting 30 columns across 300k records at once is a worst case scenario but if we can improve the worst case performance, we'll probably be improving the best cases too, helping our apps feel a lot more responsive.

Potential Performance Bottlenecks

I've identified two major bottlenecks but there could be others.

QuickValue

Digging into the package code, I can see that there is an intermediate QuickValue state created for every bit of data passing from JSI to SQLite and back again. It feels like this isn't necessary, and indeed for query results I have been able to make it work without. I know @ospfranco has handed this package over but maybe he can shed some light onto the original reasons for this?

JSI Objects

That gets us a bit more perf, but converting the SQLite results to JSI objects is still pretty slow. I had an inkling that using arrays would be more efficient here. Adding this feature in gets us a full 2x performance increase vs the current intermediate values + JSI objects.

Other???

I think the biggest issue is likely to be that creating JSI strings is slow, but that may be outside the scope of this package to solve. But maybe there are other issues that a more knowledgable eye could spot!

The PR

This PR is what I've essentially hacked together so far to improve the two main issues. I've duplicated the execute and executeAsync methods as execute2 and executeAsync2 to allow performance to be compared.

Both of these new methods can take an additional returnArrays boolean parameter to determine whether to return results as (false) an array of objects, and (true) an array of arrays.

What I mean by this is:

[
    { my_field: 'hello', my_field_2: 8 },
    { my_field: 'goodbye', my_field_2: 45 }
]

vs

[
    ['hello', 8],
    ['goodbye', 45]
]

All seems well but it's probably quite likely I've done bad things given I hadn't touched C++ at all before looking into this.

I guess my hope is that this can get some eyes and feedback and hopefully form a basis for an actual PR into the project that will give users of the package a nice performance boost.

Benchmarks

Based on setting up the benchmark by inserting 200000 rows into the database, each with 30 text columns containing random 64-character strings, then running each test 3 times to ensure the results were accurate.

These specific tests were performed on a Google Pixel 6 Pro with Android 14 but I've seen similar performance gains on iOS simulator, iPhone 7 Plus, iPad 2019, Samsung Galaxy Tab A 2019.

Selecting 5000 records

Method Limit Sync (ms) Async (ms)
Current 5000 382 372
Current 5000 354 445
Current 5000 394 493
New (Objects) 5000 276 246
New (Objects) 5000 272 232
New (Objects) 5000 276 232
New (Arrays) 5000 204 161
New (Arrays) 5000 225 162
New (Arrays) 5000 204 184

Selecting 50000 records

Method Limit Sync (ms) Async (ms)
Current 50000 3094 3480
Current 50000 3239 3594
Current 50000 3259 3719
New (Objects) 50000 2319 2589
New (Objects) 50000 2470 2659
New (Objects) 50000 2384 2660
New (Arrays) 50000 1702 1866
New (Arrays) 50000 1632 1862
New (Arrays) 50000 1656 1868

Selecting 200000 records

Method Limit Sync (ms) Async (ms)
Current 200000 14108 n/a (OOM)
Current 200000 13747 n/a (OOM)
Current 200000 14229 n/a (OOM)
New (Objects) 200000 11918 13395
New (Objects) 200000 12685 13638
New (Objects) 200000 12780 14277
New (Arrays) 200000 6932 7872
New (Arrays) 200000 7448 8254
New (Arrays) 200000 7479 8443

@ospfranco
Copy link

ospfranco commented Oct 31, 2023

The wrapper QuickValue is just a convenient way to encapsulate any type of values and return them to the calling JSI function to be later returned to the JS context. Memory allocation probably takes some time, so you are right, getting rid should decrease memory consumption.

However mixing JSI code with the SQL code was not a good abstraction at the time (nor is a good encapsulation strategy) so I preferred good design over raw speed.

@mjmasn
Copy link
Author

mjmasn commented Oct 31, 2023

Thanks @ospfranco, appreciate the quick reply! I figured that'd be the reasoning but that's positive in a way, I wanted to make sure there wasn't a hard technical reason why it would be necessary.

I guess we'll patch this on our end for now as we do need to prioritise perf, but I still think there's value in exploring performance improvements more generally.

Will leave this open for comments anyway

@ospfranco
Copy link

I just took another look into your code and I realized you only modified the sync operations. You might be lacking some context here.

Indeed it is no problem to create more JSI objects on sync operations and you will gain performance because you are halting the JavaScript context. There you can pass and create jsi::XXX values as the query executes because no other JS is running.

The QuickValue abstraction was there to allow the package to run async queries in a different thread, and then return the results to the calling function purely in C++ scalars, which then needs to schedule blocking time in the JS context again in order to create JS values again. If you don't do this, then you will crash JS because it might be busy in the middle of another operation. This is just a limitation of interacting between native code and JS. Although Async operations might be a little slower, they do not block your React Native app from running and should be the go-to way for such large operations. At the end of the day, one could have both abstractions, but I developed the package in my free time and it is too much of a time sink to maintain two different implementations.

You also posted some memory crashes, which will depend on the device. You tested on some somewhat older devices, but there are a lot of smaller Android devices out there with very little memory and such large datasets will almost always crash on those. Even though I tried to make the fastest possible package, I still do not encourage running such large data sets on mobile devices.

In any case, thank you for posting some metrics! I also took a look at the codebase again after many months and really enjoyed spelunking once again :)

@vhakulinen
Copy link

This might be a bit off topic, but inspired by not too dissimilar reasons I started to work on new sqlite bindings for JSI with a different API approach. The code can be found here: https://github.com/vhakulinen/sqlite-jsi. I would like to crunch it out to a complete package for react native, since but I don't have the time for it, perhaps the code can be a source of inspiration others.

One thing you could try with the values (i.e. QuickValue) is to turn them into hosted objects. This way you might be able to avoid copying. I.e. instead of

  • sqlite copy QuickValue copy runtime

you would have

  • sqlite copy QuickValue (hosted object) on demand runtime (perhaps without copying through ArrayBuffer).

I just realized this and haven't tried it in sqlite-jsi.

Another thing I suspect that might be worth of a closer look is the connection initialization. Currently react-native-quick-sqlite forces serialized threading mode. Reworking the code to work through other modes could improve performance on some multithreaded workloads. With sqlite-jsi, I limited background threads to one per connection (and put a mutex in front of the connection) and leave it up to the API consumer to open more connections (i.e. connection pool) for parallel work. Having per connection blocking transaction in this scenario is a bit challenging, but doable.

And a third thing, preserve and reuse the prepared statements. Currently react-native-quick-sqlite doesn't allow this and throws the statements away after each API call.

Lastly, thank you @ospfranco for creating this library. I has helped us immensely.

@ospfranco
Copy link

Yeah, Hosted Objects was suggested at some point, I didn't quite see the benefit though, it gives some sort of lazy initialization on access, but if you iterate through the entire result set it should still result in the same runtime performance. I might be wrong though.

As for the threading mode, I think there was some issue that forced serialized mode but I don't remember right now. Maybe going through the commit history on the original repo will shed some info.

In any case, the current iteration of JSI libraries will all disappear was Hermes static disappears. I'm already looking forward to building a new version of the SQLite library based on it. Before I'm thinking about building a web-worker API that would be required to offload work to different threads. It would be based on message passing, so such huge workloads might not work, but for sync work, it should be orders of magnitude faster.

@vhakulinen
Copy link

Once you have thousands of items loaded from the database and displayed in, say, scrolled view the cost of copying everything upfront starts to matter.

And the threading issue is likely that the code is currently sharing the same connection object across threads which is a big no-no without mutexes (which the serialized mode adds).

@mjmasn one additional thing for the string performance: javascript handles strings in UTF-16, while JSI (from what I've seen) and sqlite uses UTF-8. Converting UTF-8 <-> UTF-16 has some cost. If you're loading a ton of text from sqlite that you're not displaying immediately to the user (or use otherwise), you could try to query the texts as BLOBs, load them to a array buffer and then, once required, turn the array buffer into a string.

@ospfranco
Copy link

ospfranco commented Nov 4, 2023

Once you have thousands of items loaded from the database and displayed in, say, scrolled view the cost of copying everything upfront starts to matter.

Yeah, you are right. I cannot stop people from squeezing every drop of performance out of the devices.

And the threading issue is likely that the code is currently sharing the same connection object across threads which is a big no-no without mutexes (which the serialized mode adds).

Yeah, I think that was the problem. I think at some point I tried multiple connections but the code gets messy fast.

@mjmasn one additional thing for the string performance: javascript handles strings in UTF-16, while JSI (from what I've seen) and sqlite uses UTF-8. Converting UTF-8 <-> UTF-16 has some cost. If you're loading a ton of text from sqlite that you're not displaying immediately to the user (or use otherwise), you could try to query the texts as BLOBs, load them to a array buffer and then, once required, turn the array buffer into a string.

JavaScript is retarded. Indeed internally every string is UTF-16 and there are a lot of conversions between UTF-8 and UTF-16 even when it interacts within itself.

Actually, you guys inspired me to try to hack at this again and see what can be done to really squeeze the last bit of performance. Instead of using the QuickValue struct one can use std::any, which should use a lot less memory allocation. I also implemented a new version of a SmartHostObject (over a simpler previous implementation, the new version that uses an unordered_map internally which means faster access to fields) and this is what I got.

I created a sample database with 300k records. A mixture of strings, ints, and floats. Then queried all of them at once.

Using current implementation:

New implementation:

As stated the cost is shifted when accessing the lazy object fields. But if you only display a few of them at a time, should be absolutely negible.

@ospfranco
Copy link

Created a new package. Mostly API compatible, you will need to relocate your DB or specify a path. But it is quite faster when loading large sets of data.

https://github.com/OP-Engineering/op-sqlite

@mjmasn
Copy link
Author

mjmasn commented Nov 7, 2023

Just catching up on this thread, could not have hoped for a better set of replies ❤️

In my initial tests I'm seeing a 3x perf boost on SELECTs using your new package @ospfranco, really appreciate you taking the time to look into this.

@ospfranco
Copy link

cheers! access are a bit slower, so if you iterate over all of the data it will probably be slower, but I guess it is better when used in flatlists and what not.

@ospfranco
Copy link

I just published a new version. I've now gotten Android to under a second and iOS to ~500ms to load the 300k records. @mjmasn give it a try.

@mjmasn
Copy link
Author

mjmasn commented Nov 8, 2023

Hey @ospfranco, one thing I'm noticing is if I do a few large fetches in a row, the app is crashing due to OOM. It happens much less so with react-native-quick-sqlite. Not sure how to go about debugging that. For a 50k record fetch, 30 columns per row, memory use was increasing like 500MB each time on both iOS and Android yesterday. With your latest version it's more like 200-300MB.

Interestingly this is in a new RN app containing both react-native-quick-sqlite and @op-engineering/op-sqlite - if I run a bunch of SELECTs on op-sqlite, memory increases, leave the app for a while, no change. As soon as a run the same query on react-native-quick-sqlite the memory does drop over time after that.

Each package is using a different SQLite database file, containing identical data. I had to make some minor changes to react-native-quick-sqlite just to rename the osp namespace to osp2 to avoid a red screen on iOS due to quick-sqlite failing to install.

One other thing, with the latest version of op-sqlite it seems running PRAGMA commands crashes the app.

ADB crash log
11-08 09:04:44.017  2578  2710 F libc    : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 2710 (mqt_js), pid 2578 (com.compare)
11-08 09:04:44.278  2791  2791 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
11-08 09:04:44.278  2791  2791 F DEBUG   : Build fingerprint: 'google/raven/raven:14/UP1A.231005.007/10754064:user/release-keys'
11-08 09:04:44.278  2791  2791 F DEBUG   : Revision: 'MP1.0'
11-08 09:04:44.278  2791  2791 F DEBUG   : ABI: 'arm64'
11-08 09:04:44.278  2791  2791 F DEBUG   : Timestamp: 2023-11-08 09:04:44.110138046+0000
11-08 09:04:44.278  2791  2791 F DEBUG   : Process uptime: 3s
11-08 09:04:44.278  2791  2791 F DEBUG   : Cmdline: com.compare
11-08 09:04:44.278  2791  2791 F DEBUG   : pid: 2578, tid: 2710, name: mqt_js  >>> com.compare <<<
11-08 09:04:44.278  2791  2791 F DEBUG   : uid: 10347
11-08 09:04:44.278  2791  2791 F DEBUG   : tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
11-08 09:04:44.278  2791  2791 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0000000000000000
11-08 09:04:44.278  2791  2791 F DEBUG   : Cause: null pointer dereference
11-08 09:04:44.278  2791  2791 F DEBUG   :     x0  0000000000000000  x1  0000006de52b0cf0  x2  0000000000000004  x3  652f732500686361
11-08 09:04:44.278  2791  2791 F DEBUG   :     x4  0000000000000000  x5  0000006ec0bcc96d  x6  0000000065707974  x7  7f7f7f7f7f7f7f7f
11-08 09:04:44.278  2791  2791 F DEBUG   :     x8  0000000065707974  x9  00000000000087ff  x10 0000000000000050  x11 0000000000000006
11-08 09:04:44.278  2791  2791 F DEBUG   :     x12 0000000000005046  x13 0249249249249249  x14 0000000000000001  x15 b7870000001d810e
11-08 09:04:44.278  2791  2791 F DEBUG   :     x16 0000006de53e58c0  x17 00000072100b3900  x18 0000006ebc070000  x19 0000006ec0bcc968
11-08 09:04:44.278  2791  2791 F DEBUG   :     x20 0000006ec0bcc948  x21 0000006ec0bcc980  x22 0000000000000000  x23 0000006ec0bcc969
11-08 09:04:44.278  2791  2791 F DEBUG   :     x24 00000000ffffffff  x25 0000000000000001  x26 0000000000000000  x27 0000000000000000
11-08 09:04:44.278  2791  2791 F DEBUG   :     x28 0000006de52ac838  x29 0000006ec0bcc8b0
11-08 09:04:44.278  2791  2791 F DEBUG   :     lr  0000006de52da6b0  sp  0000006ec0bcc8b0  pc  00000072100b3910  pst 0000000080001000
11-08 09:04:44.278  2791  2791 F DEBUG   : 97 total frames
11-08 09:04:44.278  2791  2791 F DEBUG   : backtrace:
11-08 09:04:44.278  2791  2791 F DEBUG   :       #00 pc 0000000000055910  /apex/com.android.runtime/lib64/bionic/libc.so (__strlen_aarch64+16) (BuildId: 19c32900d9d702c303d2b4164fbba76c)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #01 pc 00000000000546ac  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libop-sqlite.so (std::__ndk1::pair, std::__ndk1::allocator >, std::__ndk1::variant, std::__ndk1::allocator >, JSBuffer> >::pair(std::__ndk1::pair&&)+144) (BuildId: 7f2fa13c1fca9b57268c15fdcf1b0df8dab54937)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #02 pc 0000000000053798  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libop-sqlite.so (osp::sqliteExecute(std::__ndk1::basic_string, std::__ndk1::allocator >, std::__ndk1::basic_string, std::__ndk1::allocator > const&, std::__ndk1::vector, std::__ndk1::allocator >, JSBuffer>, std::__ndk1::allocator, std::__ndk1::allocator >, JSBuffer> > >*, std::__ndk1::vector >*, std::__ndk1::shared_ptr > >)+2580) (BuildId: 7f2fa13c1fca9b57268c15fdcf1b0df8dab54937)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #03 pc 00000000000598ec  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libop-sqlite.so (BuildId: 7f2fa13c1fca9b57268c15fdcf1b0df8dab54937)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #04 pc 00000000003e269c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #05 pc 00000000003e25c4  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (std::__ndk1::function::operator()(facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long) const+132) (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #06 pc 00000000003e2530  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (facebook::jsi::DecoratedHostFunction::operator()(facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long)+84) (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #07 pc 00000000003e24b8  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #08 pc 00000000003e2404  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (facebook::jsi::Value std::__ndk1::__invoke_void_return_wrapper::__call(facebook::jsi::DecoratedHostFunction&, facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*&&, unsigned long&&)+120) (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #09 pc 00000000003e2340  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #10 pc 00000000003e10d0  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (std::__ndk1::__function::__func, facebook::jsi::Value (facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long)>::operator()(facebook::jsi::Runtime&, facebook::jsi::Value const&, facebook::jsi::Value const*&&, unsigned long&&)+120) (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #11 pc 000000000007d568  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #12 pc 0000000000087ccc  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #13 pc 00000000000a5cc0  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #14 pc 00000000000a542c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #15 pc 0000000000088aac  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #16 pc 0000000000120668  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #17 pc 0000000000087ccc  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #18 pc 00000000000a5cc0  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #19 pc 00000000000a542c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #20 pc 0000000000087fc0  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #21 pc 0000000000086724  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #22 pc 0000000000148884  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #23 pc 0000000000087ccc  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #24 pc 00000000000a5cc0  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #25 pc 00000000000a542c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #26 pc 0000000000087fc0  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #27 pc 0000000000087810  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #28 pc 0000000000075bbc  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes.so (BuildId: f9e06fb4881f7a81f5556a5298f6be8e724d7983)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #29 pc 00000000003dee74  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (facebook::jsi::RuntimeDecorator::call(facebook::jsi::Function const&, facebook::jsi::Value const&, facebook::jsi::Value const*, unsigned long)+68) (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #30 pc 00000000003dd2b0  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #31 pc 00000000003e9c4c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (facebook::react::JSIExecutor::flush()+84) (BuildId: 5a3214274800ef73)
11-08 09:04:44.278  2791  2791 F DEBUG   :       #32 pc 000000000027fbec  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #33 pc 000000000027fb54  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #34 pc 000000000027faec  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #35 pc 000000000027fa98  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #36 pc 000000000027e89c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #37 pc 00000000002aafe0  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #38 pc 00000000002aaf40  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (std::__ndk1::function::operator()(facebook::react::JSExecutor*) const+60) (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #39 pc 00000000002aaef4  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #40 pc 00000000002aae7c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #41 pc 00000000002aae30  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #42 pc 00000000002aae08  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #43 pc 00000000002a9b80  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #44 pc 00000000003d494c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (BuildId: 5a3214274800ef73)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #45 pc 00000000003d4908  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libhermes_executor.so (std::__ndk1::function::operator()() const+20) (BuildId: 5a3214274800ef73)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #46 pc 000000000020c514  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #47 pc 000000000020c490  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #48 pc 000000000020c444  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #49 pc 000000000020c41c  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #50 pc 000000000020b254  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libreactnativejni.so (BuildId: 54508d41347f6d51)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #51 pc 0000000000015e84  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libfbjni.so (facebook::jni::detail::MethodWrapper::dispatch(facebook::jni::alias_ref::JavaPart, facebook::jni::JRunnable, void>::_javaobject*>)+32) (BuildId: 27496b9e5551bff5c79496b936b663bf8868c68b)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #52 pc 0000000000015dfc  /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/lib/arm64/libfbjni.so (facebook::jni::detail::FunctionWrapper::JavaPart, facebook::jni::JRunnable, void>::_javaobject*>), facebook::jni::detail::JTypeFor::JavaPart, facebook::jni::JRunnable, void>::_javaobject*, void>::call(_JNIEnv*, _jobject*, void (*)(facebook::jni::alias_ref::JavaPart, facebook::jni::JRunnable, void>::_javaobject*>))+60) (BuildId: 27496b9e5551bff5c79496b936b663bf8868c68b)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #53 pc 000000000034aa30  /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+144) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #54 pc 0000000000333fa4  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #55 pc 0000000000511078  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+1976) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #56 pc 000000000049efac  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+4716) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #57 pc 000000000034d1d8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #58 pc 00000000001d6bc4  /system/framework/framework.jar (android.os.Handler.handleCallback+0)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #59 pc 0000000000378bb0  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.11907307138045539842)+232) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #60 pc 0000000000511d44  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+5252) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #61 pc 000000000049e470  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+1840) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #62 pc 000000000034d1d8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #63 pc 00000000001d6a0c  /system/framework/framework.jar (android.os.Handler.dispatchMessage+0)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #64 pc 0000000000378bb0  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.11907307138045539842)+232) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #65 pc 0000000000511d44  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+5252) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #66 pc 000000000049e470  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+1840) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #67 pc 000000000034d1d8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #68 pc 00000000002d753c  [anon:dalvik-classes.dex extracted in memory from /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/base.apk] (com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage+0)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #69 pc 0000000000378bb0  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.11907307138045539842)+232) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #70 pc 0000000000511d44  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+5252) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #71 pc 000000000049e100  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+960) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #72 pc 000000000034d1d8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #73 pc 00000000001fbe18  /system/framework/framework.jar (android.os.Looper.loopOnce+0)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #74 pc 0000000000378bb0  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.11907307138045539842)+232) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #75 pc 0000000000511d44  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+5252) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #76 pc 000000000049e470  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+1840) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #77 pc 000000000034d1d8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #78 pc 00000000001fc58c  /system/framework/framework.jar (android.os.Looper.loop+0)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #79 pc 0000000000378bb0  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.11907307138045539842)+232) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #80 pc 0000000000511d44  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+5252) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #81 pc 000000000049e470  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+1840) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #82 pc 000000000034d1d8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #83 pc 00000000002d7680  [anon:dalvik-classes.dex extracted in memory from /data/app/~~FLDRmmdzzIpvnyNjil6njw==/com.compare-o2qJqdsT3sH0NZLOLOAW5A==/base.apk] (com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run+0)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #84 pc 0000000000378bb0  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.11907307138045539842)+232) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #85 pc 0000000000511d44  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+5252) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #86 pc 000000000049efac  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+4716) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #87 pc 000000000034d1d8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #88 pc 000000000010eaf0  /apex/com.android.art/javalib/core-oj.jar (java.lang.Thread.run+0)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #89 pc 0000000000378bb0  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.__uniq.112435418011751916792819755956732575238.llvm.11907307138045539842)+232) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #90 pc 00000000003784a8  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+964) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #91 pc 000000000034ab68  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #92 pc 0000000000333fa4  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #93 pc 000000000023e4d4  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+144) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #94 pc 0000000000539a3c  /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1600) (BuildId: 4cfdaa9e5146c43e20ae36ee1caf9b7f)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #95 pc 00000000000c9ccc  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+204) (BuildId: 19c32900d9d702c303d2b4164fbba76c)
11-08 09:04:44.279  2791  2791 F DEBUG   :       #96 pc 000000000005db00  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 19c32900d9d702c303d2b4164fbba76c)

If it'd be helpful for me to share my comparison app let me know, more than happy to get it into a sharable state at some point this week 👍🏻

@ospfranco
Copy link

Please open a ticket in the new repo and try the latest version 1.0.3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants