WPEView wraps the WPE WebKit browser engine in a reusable Android library.

Overview

WPE Android

logo

WPE WebKit port for Android.

WPEView API

WPEView wraps the WPE WebKit browser engine in a reusable Android library. WPEView serves a similar purpose to Android's built-in WebView and tries to mimick its API aiming to be an easy to use drop-in replacement with extended functionality.

Setting up WPEView in your Android application is fairly simple.

(TODO: package, distribute and document installation)

First, add the WPEView widget to your Activity layout:

">
<com.wpe.wpeview.WPEView
        android:id="@+id/wpe_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"/>

And next, wire it in your Activity implementation to start using the API, for example, to load an URL:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    var browser = findViewById(R.id.wpe_view)
    browser?.loadUrl(INITIAL_URL)
}

To see WPEView in action check the examples folder.

Setting up your environment

python3

The bootstrap script requires python3.

Getting the dependencies

WPE Android depends on a considerable amount of libraries, including libWPE and WPEWebKit. To ease the cross-compilation process we use Cerbero. To set all things up run:

python3 ./scripts/bootstrap.py

This command will fetch the required binaries and place them in the expected location.

If you want to build (and/or modify) the dependencies you can pass the --build option:

python3 ./scripts/bootstrap.py --build

This command will fetch Cerbero, the Android NDK and a bunch of dependencies required to cross-compile WPE Android dependencies. The process takes a significant amount of time.

You can optionally create a debug build of WPEWebKit passing the --debug option to the bootstrap command:

python3 ./scripts/bootstrap.py --build --debug

Finally, the bootstrap option accepts the --arch option to set the target architecture. Currently the only supported architecture is arm64.

Android Studio

Android Studio is required to build and run WPE Android. Once the bootstrap process is done and all the dependencies are cross-compiled and installed, you should be able to open the launcher demo with Android Studio and run it on a real device.

Known issues and limitations

  • The only supported architecture at the moment is arm64.
  • WPE Android does not work with an Android emulator due to EGL emulation issues.
  • The scripts and build have only been tested in Linux.
Issues
  • Support armv7

    Support armv7

    All dependencies can be cross-compiled to armv7 except for WPEWebKit.

    The current link error is:

    lib/libWTF.a(lib/../Source/WTF/wtf/CMakeFiles/WTF.dir/MediaTime.cpp.o):MediaTime.cpp:function WTF::MediaTime::setTimeScale(unsigned int, WTF::MediaTime::RoundingFlags): error: undefined reference to '__mulodi4'
    lib/libWTF.a(lib/../Source/WTF/wtf/CMakeFiles/WTF.dir/MediaTime.cpp.o):MediaTime.cpp:function WTF::MediaTime::operator*(int) const: error: undefined reference to '__mulodi4'
    lib/libWTF.a(lib/../Source/WTF/wtf/CMakeFiles/WTF.dir/MediaTime.cpp.o):MediaTime.cpp:function WTF::MediaTime::operator*(int) const: error: undefined reference to '__mulodi4'
    lib/libWTF.a(lib/../Source/WTF/wtf/CMakeFiles/WTF.dir/MediaTime.cpp.o):MediaTime.cpp:function WTF::MediaTime::compare(WTF::MediaTime const&) const: error: undefined reference to '__mulodi4'
    clang++: error: linker command failed with exit code 1 (use -v to see invocation)
    ninja: build stopped: subcommand failed.
    

    I see the same issue building for android_x86

    bug priority-low 
    opened by ferjm 5
  • Do not append 'cerbero' to external cerbero path

    Do not append 'cerbero' to external cerbero path

    Do not append 'cerbero' to external cerbero path in boostrap script because given path should already point to external directory which contains the packages

    opened by zhani 4
  • Bootstrap build with fetched binaries seems to fail

    Bootstrap build with fetched binaries seems to fail

    For context, I am on a fresh install of Arch Linux. Just tried to build this again with the newly available binaries, but once it finishes downloading them the script eventually exits with this output:

    NEEDED but not provided:
         libGLESv2.so
    Provided but not NEEDED:
         libicutest_68.so
         libdv.so
         libzbar.so
         libgstbadaudio-1.0.so
         libnice.so
         libdvdnav.so
         libgstbasecamerabinsrc-1.0.so
         libavfilter.so
         libmpg123.so
         libgstcodecs-1.0.so
         libx264_157.so
         libgstallocators-1.0.so
         libtheoraenc.so
         libgstgl-1.0.so
         libopus.so
         libtheora.so
         libwavpack.so
         libsrtp2.so
         libwebrtc_audio_processing.so
         libspandsp.so
         libtag_1.so
         libexslt.so
         libtheoradec.so
         libspeex.so
         libcairo-gobject.so
         libgthread-2.0.so
         libopenh264.so
         libgstsctp-1.0.so
         libgstriff-1.0.so
         libgstplayer-1.0.so
         libcairo-script-interpreter.so
         libicuio_68.so
         libFLAC.so
         librsvg-2.so
         librtmp_1.so
         libvo-aacenc.so
         libmp3lame.so
         libavformat.so
         libgstwebrtc-1.0.so
         libges-1.0.so
         liborc-test-0.4.so
         libgstadaptivedemux-1.0.so
         libdca.so
         libass.so
         libvorbisidec.so
         libgstrtspserver-1.0.so
         libgstphotography-1.0.so
         liba52.so
         libopencore-amrwb.so
         libmms.so
         libsrt_1.so
         libcharset.so
         liboggkate.so
         libgstmpegts-1.0.so
         libgnutls.so
         libsbc.so
         libgstvulkan-1.0.so
         libgstinsertbin-1.0.so
         libopencore-amrnb.so
         libvorbisenc.so
         libSoundTouch.so
         libgsttranscoder-1.0.so
         libgstisoff-1.0.so
         libgraphene-1.0.so
         libturbojpeg.so
         libvorbisfile.so
         libWPEBackend-android.so
    
    opened by msub2 4
  • Add WPEView API for overriding User Agent

    Add WPEView API for overriding User Agent

    opened by zhani 2
  • Running x86 build fails to start

    Running x86 build fails to start

    05/03 09:26:15: Launching 'examples.minibrowser' on Samsung S20 API 29 x86.
    Install successfully finished in 3 s 702 ms.
    $ adb shell am start -n "com.wpe.examples.minibrowser/com.wpe.examples.minibrowser.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
    Connected to process 4992 on device 'Samsung_S20_API_29_x86 [emulator-5554]'.
    Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
    I/les.minibrowse: Late-enabling -Xcheck:jni
    E/les.minibrowse: Unknown bits set in runtime_flags: 0x8000
    W/les.minibrowse: Unexpected CPU variant for X86 using defaults: x86
    D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
    W/libc: Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)
    D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
    D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
    D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
    W/RenderThread: type=1400 audit(0.0:10): avc: denied { write } for name="property_service" dev="tmpfs" ino=6911 scontext=u:r:untrusted_app:s0:c116,c256,c512,c768 tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0 app=com.wpe.examples.minibrowser
    W/les.minibrowse: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
    W/les.minibrowse: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
    V/WPE Glue: BrowserGlue::setupEnvironment()
    V/WPE Browser: Browser creation
    V/WPE Glue: BrowserGlue.initLooperHelper()
    V/WPE Glue: LooperThread::initialize() ALooper 0xd6f67540
    D/WPE Browser: Load URL https://igalia.com
    I/WPE Browser: In UIProcess thread
    V/WPE Browser: No available page. Queueing https://igalia.com for load
    V/WPE Glue: BrowserGlue.init()
    V/WPE Glue: Browser::init
    V/WPE Glue: ui_process_thread_entry -- entered, g_main_context_default() 0xea221820
    V/WPE Glue: ui_process_thread_entry -- running via GMainLoop 0xdf0eb638 for GMainContext 0xdf0eb618
    V/WPE Browser: Visibility changed for com.wpe.wpeview.WPEView{5ba111 VFE...... ......I. 0,0-0,0 #7f0801ae app:id/wpe_view} to 0
    D/HostConnection: HostConnection::get() New Host Connection established 0xd6f4c190, tid 5028
    D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit ANDROID_EMU_sync_buffer_data GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_1 
    W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
    D/EGL_emulation: eglCreateContext: 0xd6f1a360: maj 3 min 1 rcv 4
    D/EGL_emulation: eglMakeCurrent: 0xd6f1a360: ver 3 1 (tinfo 0xd6f0f850)
    E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
    E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
    W/Gralloc3: mapper 3.x is not supported
    D/HostConnection: createUnique: call
    D/HostConnection: HostConnection::get() New Host Connection established 0xd6f4c320, tid 5028
    D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit ANDROID_EMU_sync_buffer_data GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_1 
    D/eglCodecCommon: allocate: Ask for block of size 0x1000
    D/eglCodecCommon: allocate: ioctl allocate returned offset 0x3fee5c000 size 0x2000
    D/EGL_emulation: eglMakeCurrent: 0xd6f1a360: ver 3 1 (tinfo 0xd6f0f850)
    D/WPE Browser: Create new Page instance for view com.wpe.wpeview.WPEView{5ba111 VFE...... ........ 0,0-1440,2688 #7f0801ae app:id/wpe_view}
    V/WPE page0: Page construction [email protected]
    D/WPE gfx.View0: View: holder [email protected]
    V/WPEView: View created com.wpe.wpe.gfx.View{89af8dc V.E...... ......I. 0,0-0,0} number of views 0
    D/WPE page0: onViewReady
    V/WPEView: View ready 0
    V/WPE Glue: BrowserGlue.newWebView tid 4992
    V/WPE Glue: Browser::newPage
    V/WPE Glue: RendererFallback: clnt exts EGL_EXT_client_extensions EGL_KHR_platform_android EGL_ANGLE_platform_angle EGL_ANDROID_GLES_layers
    V/WPE Glue: RendererFallback: disp exts EGL_KHR_get_all_proc_addresses EGL_ANDROID_presentation_time EGL_KHR_swap_buffers_with_damage EGL_ANDROID_get_native_client_buffer EGL_ANDROID_front_buffer_auto_refresh EGL_ANDROID_get_frame_timestamps EGL_EXT_surface_SMPTE2086_metadata EGL_EXT_surface_CTA861_3_metadata EGL_KHR_image EGL_KHR_image_base EGL_KHR_gl_texture_2D_image EGL_KHR_fence_sync EGL_KHR_create_context EGL_ANDROID_image_native_buffer EGL_KHR_wait_sync EGL_ANDROID_recordable 
    V/WPE Glue: RendererFallback: 0xdf08e380 m_update.fd 57
    V/WPE Glue: Initializing Page
    V/WPE page0: WebKitWebView ready false
    D/WPE Browser: Load URL https://igalia.com
    D/WPE page0: Queue URL load https://igalia.com
    V/WPE page0: WebKitWebView ready true
    D/wpe-android: ** (process:4992): WARNING **: 09:26:19.927: Could not open /sys/class/dmi/id/chassis_type: Failed to open file “/sys/class/
    D/wpe-android: dmi/id/chassis_type”: Permission denied
    D/wpe-android: ** (process:4992): WARNING **: 09:26:19.928: Could not open /sys/firmware/acpi/pm_profile: Failed to open file “/sys/firmwar
    D/wpe-android: e/acpi/pm_profile”: Permission denied
    E/les.minibrowse: JNI ERROR (app bug): accessed stale Global 0xb71e04d2  (index 192012365 in a table of size 623)
    A/les.minibrowse: java_vm_ext.cc:570] JNI DETECTED ERROR IN APPLICATION: use of deleted global reference 0xb71e04d2
    A/les.minibrowse: java_vm_ext.cc:570]     from void com.wpe.wpe.BrowserGlue.init(com.wpe.wpe.BrowserGlue)
    D/wpe-android: ProcessLauncher::launchProcess() processType 1 pid 7
          jClass for com/wpe/wpe/BrowserGlue 0x15
          jMethodID for launchProcess 0x
    D/wpe-android: d16b6508
    W/Thread-3: type=1400 audit(0.0:11): avc: denied { read } for name="chassis_type" dev="sysfs" ino=291 scontext=u:r:untrusted_app:s0:c116,c256,c512,c768 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0 app=com.wpe.examples.minibrowser
    A/les.minibrowse: runtime.cc:630] Runtime aborting...
    A/les.minibrowse: runtime.cc:630] Dumping all threads without mutator lock held
    A/les.minibrowse: runtime.cc:630] All threads:
    A/les.minibrowse: runtime.cc:630] DALVIK THREADS (21):
    A/les.minibrowse: runtime.cc:630] "Thread-3" prio=5 tid=21 Runnable
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=0 dsCount=0 flags=0 obj=0x15b3c888 self=0xd3b23800
    A/les.minibrowse: runtime.cc:630]   | sysTid=5034 nice=0 cgrp=default sched=0/0 handle=0xb6c5b230
    A/les.minibrowse: runtime.cc:630]   | state=R schedstat=( 12936623 1067561 18 ) utm=1 stm=0 core=3 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xb6b58000-0xb6b5a000 stackSize=1040KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes= "abort lock" "mutator lock"(shared held)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00493b83  /apex/com.android.runtime/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool)+115)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 005b2012  /apex/com.android.runtime/lib/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+994)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 005acea1  /apex/com.android.runtime/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+65)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 005d2d11  /apex/com.android.runtime/lib/libart.so (art::DumpCheckpoint::Run(art::Thread*)+929)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 005cac46  /apex/com.android.runtime/lib/libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*)+486)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 005c9eac  /apex/com.android.runtime/lib/libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool)+2268)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 00579730  /apex/com.android.runtime/lib/libart.so (art::AbortState::DumpAllThreads(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, art::Thread*) const+448)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 00564d70  /apex/com.android.runtime/lib/libart.so (art::Runtime::Abort(char const*)+1536)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000249b3  /apex/com.android.runtime/lib/libartbase.so (_ZNSt3__110__function6__funcIPFvPKcENS_9allocatorIS5_EES4_EclEOS3_+35)
    A/les.minibrowse: runtime.cc:630]   native: #09 pc 0000bac7  /system/lib/libbase.so (android::base::LogMessage::~LogMessage()+727)
    A/les.minibrowse: runtime.cc:630]   native: #10 pc 003e53dd  /apex/com.android.runtime/lib/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1725)
    A/les.minibrowse: runtime.cc:630]   native: #11 pc 003e5698  /apex/com.android.runtime/lib/libart.so (art::JavaVMExt::JniAbortF(char const*, char const*, ...)+120)
    A/les.minibrowse: runtime.cc:630]   native: #12 pc 005b8f94  /apex/com.android.runtime/lib/libart.so (art::Thread::DecodeJObject(_jobject*) const+836)
    A/les.minibrowse: runtime.cc:630]   native: #13 pc 003d605d  /apex/com.android.runtime/lib/libart.so (art::(anonymous namespace)::ScopedCheck::CheckInstance(art::ScopedObjectAccess&, art::(anonymous namespace)::ScopedCheck::InstanceKind, _jobject*, bool)+157)
    A/les.minibrowse: runtime.cc:630]   native: #14 pc 003d5288  /apex/com.android.runtime/lib/libart.so (art::(anonymous namespace)::ScopedCheck::CheckPossibleHeapValue(art::ScopedObjectAccess&, char, art::(anonymous namespace)::JniValueType)+456)
    A/les.minibrowse: runtime.cc:630]   native: #15 pc 003d5378  /apex/com.android.runtime/lib/libart.so (art::(anonymous namespace)::ScopedCheck::CheckPossibleHeapValue(art::ScopedObjectAccess&, char, art::(anonymous namespace)::JniValueType)+696)
    A/les.minibrowse: runtime.cc:630]   native: #16 pc 003d4769  /apex/com.android.runtime/lib/libart.so (art::(anonymous namespace)::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::(anonymous namespace)::JniValueType*)+745)
    A/les.minibrowse: runtime.cc:630]   native: #17 pc 003d9a28  /apex/com.android.runtime/lib/libart.so (art::(anonymous namespace)::CheckJNI::CheckCallArgs(art::ScopedObjectAccess&, art::(anonymous namespace)::ScopedCheck&, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, art::InvokeType, art::(anonymous namespace)::VarArgs const*)+200)
    A/les.minibrowse: runtime.cc:630]   native: #18 pc 003d8c8b  /apex/com.android.runtime/lib/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, char*, art::Primitive::Type, art::InvokeType)+939)
    A/les.minibrowse: runtime.cc:630]   native: #19 pc 003c5439  /apex/com.android.runtime/lib/libart.so (art::(anonymous namespace)::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, char*)+73)
    A/les.minibrowse: runtime.cc:630]   native: #20 pc 0123945c  /data/app/com.wpe.examples.minibrowser-HC_uKIvqlkaK-YxLWOOtLg==/lib/x86/libWPEWebKit-1.0_3.so (???)
    A/les.minibrowse: runtime.cc:630]   native: #21 pc 0021c484  /data/app/com.wpe.examples.minibrowser-HC_uKIvqlkaK-YxLWOOtLg==/lib/x86/libWPEWebKit-1.0_3.so (???)
    A/les.minibrowse: runtime.cc:630]   at com.wpe.wpe.BrowserGlue.init(Native method)
    A/les.minibrowse: runtime.cc:630]   at com.wpe.wpe.Browser$UIProcessThread$1.run(Browser.java:269)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Thread.run(Thread.java:919)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "main" prio=5 tid=1 Native
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x7189d1f0 self=0xea237800
    A/les.minibrowse: runtime.cc:630]   | sysTid=4992 nice=-10 cgrp=default sched=0/0 handle=0xea8d4dc8
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 638850301 78904155 396 ) utm=57 stm=6 core=2 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xff2a0000-0xff2a2000 stackSize=8192KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/4992/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0066dde5  /apex/com.android.runtime/lib/libart.so (_ZN3artL12GoToRunnableEPNS_6ThreadE.llvm.18010120601690045221+549)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 0066db81  /apex/com.android.runtime/lib/libart.so (art::JniMethodEnd(unsigned int, art::Thread*)+33)
    A/les.minibrowse: runtime.cc:630]   at android.graphics.HardwareRenderer.nSyncAndDrawFrame(Native method)
    A/les.minibrowse: runtime.cc:630]   at android.graphics.HardwareRenderer.syncAndDrawFrame(HardwareRenderer.java:422)
    A/les.minibrowse: runtime.cc:630]   at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:670)
    A/les.minibrowse: runtime.cc:630]   at android.view.ViewRootImpl.draw(ViewRootImpl.java:3610)
    A/les.minibrowse: runtime.cc:630]   at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3418)
    A/les.minibrowse: runtime.cc:630]   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2755)
    A/les.minibrowse: runtime.cc:630]   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
    A/les.minibrowse: runtime.cc:630]   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
    A/les.minibrowse: runtime.cc:630]   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
    A/les.minibrowse: runtime.cc:630]   at android.view.Choreographer.doCallbacks(Choreographer.java:790)
    A/les.minibrowse: runtime.cc:630]   at android.view.Choreographer.doFrame(Choreographer.java:725)
    A/les.minibrowse: runtime.cc:630]   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
    A/les.minibrowse: runtime.cc:630]   at android.os.Handler.handleCallback(Handler.java:883)
    A/les.minibrowse: runtime.cc:630]   at android.os.Handler.dispatchMessage(Handler.java:100)
    A/les.minibrowse: runtime.cc:630]   at android.os.Looper.loop(Looper.java:214)
    A/les.minibrowse: runtime.cc:630]   at android.app.ActivityThread.main(ActivityThread.java:7356)
    A/les.minibrowse: runtime.cc:630]   at java.lang.reflect.Method.invoke(Native method)
    A/les.minibrowse: runtime.cc:630]   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    A/les.minibrowse: runtime.cc:630]   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Runtime worker thread 0" prio=5 tid=2 Native (still starting up)
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x0 self=0xd6f00000
    A/les.minibrowse: runtime.cc:630]   | sysTid=4999 nice=0 cgrp=default sched=0/0 handle=0xea427d90
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 430869 0 6 ) utm=0 stm=0 core=2 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xea419000-0xea41b000 stackSize=63KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/4999/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 005d4b55  /apex/com.android.runtime/lib/libart.so (art::ThreadPool::GetTask(art::Thread*)+261)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 005d3c83  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Run()+83)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 005d374f  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Callback(void*)+239)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Runtime worker thread 1" prio=5 tid=3 Native (still starting up)
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x0 self=0xea234e00
    A/les.minibrowse: runtime.cc:630]   | sysTid=5000 nice=0 cgrp=default sched=0/0 handle=0xe8484d90
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 323677 0 6 ) utm=0 stm=0 core=1 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xe8476000-0xe8478000 stackSize=63KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5000/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 005d4b55  /apex/com.android.runtime/lib/libart.so (art::ThreadPool::GetTask(art::Thread*)+261)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 005d3c83  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Run()+83)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 005d374f  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Callback(void*)+239)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Jit thread pool worker thread 0" prio=5 tid=4 Native
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x157c0030 self=0xd6f08c00
    A/les.minibrowse: runtime.cc:630]   | sysTid=4998 nice=0 cgrp=default sched=0/0 handle=0xd6e04d90
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 2487621 1130651 17 ) utm=0 stm=0 core=3 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xd6d06000-0xd6d08000 stackSize=1023KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/4998/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 005d4b55  /apex/com.android.runtime/lib/libart.so (art::ThreadPool::GetTask(art::Thread*)+261)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 005d3cb5  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Run()+133)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 005d374f  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Callback(void*)+239)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Runtime worker thread 2" prio=5 tid=5 Native (still starting up)
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x0 self=0xdf0d0c00
    A/les.minibrowse: runtime.cc:630]   | sysTid=5001 nice=0 cgrp=default sched=0/0 handle=0xdcf7fd90
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 146130 789704 5 ) utm=0 stm=0 core=3 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xdcf71000-0xdcf73000 stackSize=63KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5001/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 005d4b55  /apex/com.android.runtime/lib/libart.so (art::ThreadPool::GetTask(art::Thread*)+261)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 005d3c83  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Run()+83)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 005d374f  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Callback(void*)+239)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Signal Catcher" prio=5 tid=6 WaitingInMainSignalCatcherLoop
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15800020 self=0xd6f20800
    A/les.minibrowse: runtime.cc:630]   | sysTid=5003 nice=0 cgrp=default sched=0/0 handle=0xd6d00230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 2987254 1765810 4 ) utm=0 stm=0 core=3 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xd6c05000-0xd6c07000 stackSize=1008KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5003/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef9  [vdso] (__kernel_vsyscall+9)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00101671  /apex/com.android.runtime/lib/bionic/libc.so (__rt_sigtimedwait+33)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 000bb549  /apex/com.android.runtime/lib/bionic/libc.so (sigwait+73)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 0058bb99  /apex/com.android.runtime/lib/libart.so (art::SignalCatcher::WaitForSignal(art::Thread*, art::SignalSet&)+265)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0058a78f  /apex/com.android.runtime/lib/libart.so (art::SignalCatcher::Run(void*)+479)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Runtime worker thread 3" prio=5 tid=7 Native (still starting up)
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x0 self=0xd3a8e800
    A/les.minibrowse: runtime.cc:630]   | sysTid=5002 nice=0 cgrp=default sched=0/0 handle=0xdcd08d90
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 480649 87159 11 ) utm=0 stm=0 core=1 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xdccfa000-0xdccfc000 stackSize=63KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5002/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 005d4b55  /apex/com.android.runtime/lib/libart.so (art::ThreadPool::GetTask(art::Thread*)+261)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 005d3c83  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Run()+83)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 005d374f  /apex/com.android.runtime/lib/libart.so (art::ThreadPoolWorker::Callback(void*)+239)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "HeapTaskDaemon" prio=5 tid=8 WaitingForTaskProcessor
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x148a6610 self=0xea239400
    A/les.minibrowse: runtime.cc:630]   | sysTid=5005 nice=4 cgrp=default sched=0/0 handle=0xc0bce230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 493430 724275 3 ) utm=0 stm=0 core=1 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xc0acb000-0xc0acd000 stackSize=1040KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5005/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef9  [vdso] (__kernel_vsyscall+9)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150c88  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::TimedWait(art::Thread*, long long, int)+152)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 002ce203  /apex/com.android.runtime/lib/libart.so (art::gc::TaskProcessor::GetTask(art::Thread*)+339)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 002cec34  /apex/com.android.runtime/lib/libart.so (art::gc::TaskProcessor::RunAllTasks(art::Thread*)+84)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 004a3a45  /apex/com.android.runtime/lib/libart.so (art::VMRuntime_runHeapTasks(_JNIEnv*, _jobject*)+53)
    A/les.minibrowse: runtime.cc:630]   at dalvik.system.VMRuntime.runHeapTasks(Native method)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$HeapTaskDaemon.runInternal(Daemons.java:523)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$Daemon.run(Daemons.java:137)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Thread.run(Thread.java:919)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "ReferenceQueueDaemon" prio=5 tid=9 Waiting
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x148a66a0 self=0xd3a97400
    A/les.minibrowse: runtime.cc:630]   | sysTid=5006 nice=4 cgrp=default sched=0/0 handle=0xc0ac5230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 184018 3539257 9 ) utm=0 stm=0 core=3 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xc09c2000-0xc09c4000 stackSize=1040KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5006/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0048e4a6  /apex/com.android.runtime/lib/libart.so (art::Monitor::Wait(art::Thread*, long long, int, bool, art::ThreadState)+646)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 004903b4  /apex/com.android.runtime/lib/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long long, int, bool, art::ThreadState)+292)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 004b0ff1  /apex/com.android.runtime/lib/libart.so (art::Object_waitJI(_JNIEnv*, _jobject*, long long, int)+97)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Object.wait(Native method)
    A/les.minibrowse: runtime.cc:630]   - waiting on <0x07f72de5> (a java.lang.Class<java.lang.ref.ReferenceQueue>)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Object.wait(Object.java:442)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Object.wait(Object.java:568)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:215)
    A/les.minibrowse: runtime.cc:630]   - locked <0x07f72de5> (a java.lang.Class<java.lang.ref.ReferenceQueue>)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$Daemon.run(Daemons.java:137)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Thread.run(Thread.java:919)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "FinalizerWatchdogDaemon" prio=5 tid=10 Waiting
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x148a67c0 self=0xd3a99000
    A/les.minibrowse: runtime.cc:630]   | sysTid=5008 nice=4 cgrp=default sched=0/0 handle=0xc08b3230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 407610 0 6 ) utm=0 stm=0 core=1 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xc07b0000-0xc07b2000 stackSize=1040KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5008/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0048e4a6  /apex/com.android.runtime/lib/libart.so (art::Monitor::Wait(art::Thread*, long long, int, bool, art::ThreadState)+646)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 004903b4  /apex/com.android.runtime/lib/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long long, int, bool, art::ThreadState)+292)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 004b0ff1  /apex/com.android.runtime/lib/libart.so (art::Object_waitJI(_JNIEnv*, _jobject*, long long, int)+97)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Object.wait(Native method)
    A/les.minibrowse: runtime.cc:630]   - waiting on <0x085880ba> (a java.lang.Daemons$FinalizerWatchdogDaemon)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Object.wait(Object.java:442)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Object.wait(Object.java:568)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded(Daemons.java:339)
    A/les.minibrowse: runtime.cc:630]   - locked <0x085880ba> (a java.lang.Daemons$FinalizerWatchdogDaemon)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:319)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$Daemon.run(Daemons.java:137)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Thread.run(Thread.java:919)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Binder:4992_1" prio=5 tid=11 Native
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15840020 self=0xd3a9ba00
    A/les.minibrowse: runtime.cc:630]   | sysTid=5009 nice=0 cgrp=default sched=0/0 handle=0xc06ac230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 3951136 7030222 10 ) utm=0 stm=0 core=1 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xc05b1000-0xc05b3000 stackSize=1008KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5009/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 001012ac  /apex/com.android.runtime/lib/bionic/libc.so (__ioctl+28)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 000b65bc  /apex/com.android.runtime/lib/bionic/libc.so (ioctl+60)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 000545f7  /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+391)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0005481a  /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+42)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 00055218  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+72)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 00082019  /system/lib/libbinder.so (android::PoolThread::threadLoop()+41)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 00014166  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+342)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000b660b  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+171)
    A/les.minibrowse: runtime.cc:630]   native: #09 pc 00013aa6  /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246)
    A/les.minibrowse: runtime.cc:630]   native: #10 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #11 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "ADB-JDWP Connection Control Thread" prio=5 tid=12 WaitingInMainDebuggerLoop
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x148a6580 self=0xd6f29400
    A/les.minibrowse: runtime.cc:630]   | sysTid=5004 nice=0 cgrp=default sched=0/0 handle=0xd6bff230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 1378076 16225469 8 ) utm=0 stm=0 core=0 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xd6b04000-0xd6b06000 stackSize=1008KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5004/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef9  [vdso] (__kernel_vsyscall+9)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 001013d6  /apex/com.android.runtime/lib/bionic/libc.so (__ppoll+38)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 000b89ea  /apex/com.android.runtime/lib/bionic/libc.so (poll+90)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 000d786f  /apex/com.android.runtime/lib/bionic/libc.so (__poll_chk+47)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0000835b  /apex/com.android.runtime/lib/libadbconnection.so (adbconnection::AdbConnectionState::RunPollLoop(art::Thread*)+1131)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 000063b0  /apex/com.android.runtime/lib/libadbconnection.so (adbconnection::CallbackFunction(void*)+1152)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "FinalizerDaemon" prio=5 tid=13 Waiting
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x148a6730 self=0xd3a98200
    A/les.minibrowse: runtime.cc:630]   | sysTid=5007 nice=4 cgrp=default sched=0/0 handle=0xc09bc230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 225754 4557297 5 ) utm=0 stm=0 core=0 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xc08b9000-0xc08bb000 stackSize=1040KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5007/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 00092328  /apex/com.android.runtime/lib/bionic/libc.so (syscall+40)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 00150802  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+114)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 00150783  /apex/com.android.runtime/lib/libart.so (art::ConditionVariable::Wait(art::Thread*)+35)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0048e4a6  /apex/com.android.runtime/lib/libart.so (art::Monitor::Wait(art::Thread*, long long, int, bool, art::ThreadState)+646)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 004903b4  /apex/com.android.runtime/lib/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long long, int, bool, art::ThreadState)+292)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 004b0ff1  /apex/com.android.runtime/lib/libart.so (art::Object_waitJI(_JNIEnv*, _jobject*, long long, int)+97)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Object.wait(Native method)
    A/les.minibrowse: runtime.cc:630]   - waiting on <0x0ec3ab6b> (a java.lang.Object)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Object.wait(Object.java:442)
    A/les.minibrowse: runtime.cc:630]   at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:190)
    A/les.minibrowse: runtime.cc:630]   - locked <0x0ec3ab6b> (a java.lang.Object)
    A/les.minibrowse: runtime.cc:630]   at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:211)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:271)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Daemons$Daemon.run(Daemons.java:137)
    A/les.minibrowse: runtime.cc:630]   at java.lang.Thread.run(Thread.java:919)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Binder:4992_2" prio=5 tid=14 Native
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15880020 self=0xd6f32000
    A/les.minibrowse: runtime.cc:630]   | sysTid=5010 nice=0 cgrp=default sched=0/0 handle=0xc05ab230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 8371750 13815285 14 ) utm=0 stm=0 core=0 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xc04b0000-0xc04b2000 stackSize=1008KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5010/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 001012ac  /apex/com.android.runtime/lib/bionic/libc.so (__ioctl+28)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 000b65bc  /apex/com.android.runtime/lib/bionic/libc.so (ioctl+60)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 000545f7  /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+391)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0005481a  /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+42)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 00055218  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+72)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 00082019  /system/lib/libbinder.so (android::PoolThread::threadLoop()+41)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 00014166  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+342)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000b660b  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+171)
    A/les.minibrowse: runtime.cc:630]   native: #09 pc 00013aa6  /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246)
    A/les.minibrowse: runtime.cc:630]   native: #10 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #11 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Binder:4992_3" prio=5 tid=15 Native
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x158c0020 self=0xd3ab6600
    A/les.minibrowse: runtime.cc:630]   | sysTid=5011 nice=0 cgrp=default sched=0/0 handle=0xc04aa230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 487847 1525365 4 ) utm=0 stm=0 core=0 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xc03af000-0xc03b1000 stackSize=1008KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5011/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 001012ac  /apex/com.android.runtime/lib/bionic/libc.so (__ioctl+28)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 000b65bc  /apex/com.android.runtime/lib/bionic/libc.so (ioctl+60)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 000545f7  /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+391)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0005481a  /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+42)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 00055218  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+72)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 00082019  /system/lib/libbinder.so (android::PoolThread::threadLoop()+41)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 00014166  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+342)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000b660b  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+171)
    A/les.minibrowse: runtime.cc:630]   native: #09 pc 00013aa6  /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246)
    A/les.minibrowse: runtime.cc:630]   native: #10 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #11 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Binder:4992_4" prio=5 tid=16 Native
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15900020 self=0xd6f3ac00
    A/les.minibrowse: runtime.cc:630]   | sysTid=5012 nice=0 cgrp=default sched=0/0 handle=0xc03a9230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 235898 7603 1 ) utm=0 stm=0 core=0 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xc02ae000-0xc02b0000 stackSize=1008KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5012/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef7  [vdso] (__kernel_vsyscall+7)
    A/les.minibrowse: runtime.cc:630]   native: #01 pc 001012ac  /apex/com.android.runtime/lib/bionic/libc.so (__ioctl+28)
    A/les.minibrowse: runtime.cc:630]   native: #02 pc 000b65bc  /apex/com.android.runtime/lib/bionic/libc.so (ioctl+60)
    A/les.minibrowse: runtime.cc:630]   native: #03 pc 000545f7  /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+391)
    A/les.minibrowse: runtime.cc:630]   native: #04 pc 0005481a  /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+42)
    A/les.minibrowse: runtime.cc:630]   native: #05 pc 00055218  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+72)
    A/les.minibrowse: runtime.cc:630]   native: #06 pc 00082019  /system/lib/libbinder.so (android::PoolThread::threadLoop()+41)
    A/les.minibrowse: runtime.cc:630]   native: #07 pc 00014166  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+342)
    A/les.minibrowse: runtime.cc:630]   native: #08 pc 000b660b  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+171)
    A/les.minibrowse: runtime.cc:630]   native: #09 pc 00013aa6  /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246)
    A/les.minibrowse: runtime.cc:630]   native: #10 pc 0011a8e5  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+53)
    A/les.minibrowse: runtime.cc:630]   native: #11 pc 000af6a7  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+71)
    A/les.minibrowse: runtime.cc:630]   (no managed stack frames)
    A/les.minibrowse: runtime.cc:630] 
    A/les.minibrowse: runtime.cc:630] "Profile Saver" prio=5 tid=17 Native
    A/les.minibrowse: runtime.cc:630]   | group="" sCount=1 dsCount=0 flags=1 obj=0x15980020 self=0xd3acb200
    A/les.minibrowse: runtime.cc:630]   | sysTid=5025 nice=9 cgrp=default sched=0/0 handle=0xbf38a230
    A/les.minibrowse: runtime.cc:630]   | state=S schedstat=( 208651 126001 2 ) utm=0 stm=0 core=3 HZ=100
    A/les.minibrowse: runtime.cc:630]   | stack=0xbf28f000-0xbf291000 stackSize=1008KB
    A/les.minibrowse: runtime.cc:630]   | held mutexes=
    A/les.minibrowse: runtime.cc:630]   kernel: (couldn't read /proc/self/task/5025/stack)
    A/les.minibrowse: runtime.cc:630]   native: #00 pc 00000ef9  [vdso] (__kernel_vsyscall+9)
        
        --------- beginning of crash
    A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 5034 (Thread-3), pid 4992 (les.minibrowser)
    D/WPE gfx.View0: HolderCallback::surfaceCreated()
    D/WPE gfx.View0: HolderCallback::surfaceChanged() format 4 (1440,2688)
    D/WPE gfx.View0: HolderCallback::surfaceRedrawNeeded()
    
    bug priority-high 
    opened by zhani 2
  • Injected bundle fails to load

    Injected bundle fails to load

    I see the following warning in the logcat.

    wpe-android: ** (WPEWebProcess:18307): WARNING **: 10:39:06.511: Error loading the injected bundle (/home/ferjm/dev/igalia/wpe-android/buil 03-01 10:39:06.511 18307 18358 D wpe-android: d/build/dist/android_arm64/lib/wpe-webkit-1.0/injected-bundle/libWPEInjectedBundle.so): dlopen failed: library "/home/ferjm/dev 03-01 10:39:06.511 18307 18358 D wpe-android: /igalia/wpe-android/build/build/dist/android_arm64/lib/wpe-webkit-1.0/injected-bundle/libWPEInjectedBundle.so" not found

    This can be easily fixed by allowing WPEAndroid to set the WEBKIT_INJECTED_BUNDLE_PATH env var, which is currently only available in developer mode. https://webkit-search.igalia.com/webkit/rev/337572eabdef05c71633fa5f879faf9d9e7b4cf2/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp#310

    bug 
    opened by ferjm 2
  • Implement process spawn hooks in Android layer

    Implement process spawn hooks in Android layer

    • Also do proper casts that are required for emulator to work
    • Change JNI version to 1.6
    • Use weak global ref when storing peer value because jenv and jobject refs are only valid during the call

    Depends on https://github.com/Igalia/cerbero/pull/13 Required for #13

    opened by zhani 1
  • bootstrap: Fix downloading prebuilt packages

    bootstrap: Fix downloading prebuilt packages

    Switch to a new location for prebuilt packages. While at it, remove the dependency on the requests module: the built-in urllib works well for the task. Bonus: report progress of downloads in the console.

    Fixes #49

    opened by aperezdc 1
  • fatal error: 'bits/wordsize.h' file not found (when compiling in Fedora)

    fatal error: 'bits/wordsize.h' file not found (when compiling in Fedora)

    In file included from ../Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:47:
    In file included from ../Source/WebCore/platform/graphics/cairo/CairoUtilities.h:39:
    In file included from /home/mortimer/Projects/wpe/cerbero/build/dist/android_arm64/include/cairo/cairo-ft.h:47:
    In file included from /usr/include/freetype2/freetype/freetype.h:24:
    /usr/include/freetype2/freetype/config/ftconfig.h:4:10: fatal error: 'bits/wordsize.h' file not found
    #include <bits/wordsize.h>
    

    The problem seems to be that Cerbero is using the system Freetype instead of the sysroot one to build WPEWebKit. We'll probably need to do something similar to ferjm/[email protected] but for Freetype.

    opened by ferjm 1
  • Resize support

    Resize support

    It looks like the size is only queries during Page creation.

    m_width =  wpeView.getMeasuredWidth();
    m_height = wpeView.getMeasuredHeight();
    

    We should handle WPEView resizes too. In theory the surfaceChanged event is processed for the render area but the page needs to handle the new size too.

    enhancement priority-medium 
    opened by ferjm 1
  • Add runtime settings

    Add runtime settings

    Initial runtime settings API. This is an initial API which purpose is to introduce the API for future feature additions.

    To have better integration so architecture refactoring is needed to underlying codebase which will be done in #105

    Fixes #68 and #49

    opened by zhani 0
  • Agree on an Open Source license and apply it to the project

    Agree on an Open Source license and apply it to the project

    We should discuss what a good license for the project would be and apply it to the repository.

    Whatever we choose it should obviously be compatible with WebKit as well as with both the release channels and target devices we'd like WPE Android to run on.

    documentation priority-medium 
    opened by mariospr 0
  • Define contribution guidelines

    Define contribution guidelines

    We should perhaps write a Wiki page with some guidelines to contribute to this project such as the ones they have for WebKit [1] or Chromium [2], even though we might probably start a bit ligther.

    In particular we should at least define how the process of landing code should look like such as selecting or creating an issue, providing changes in a PR following a certain convention, how the review process would look like, how code should be landed (e.g. no PR without an issue associated, having either PRs or commits should include a link to the issue...), what the desired coding style is...

    Once these guidelines are in place it should be easier both for new people to provide contributions as for current developers to abide by the same rules (and/or evolve them if needed at the same time).

    [1] https://webkit.org/contributing-code/ [2] https://chromium.googlesource.com/chromium/src/+/main/docs/contributing.md

    documentation priority-high 
    opened by mariospr 1
  •  Rationalize Java classes using native code to correctly call instance methods when suitable and not only static functions.

    Rationalize Java classes using native code to correctly call instance methods when suitable and not only static functions.

    Rationalize Java classes using native code to correctly call instance methods when suitable and not only static functions. With this also hash maps for tracking page java and native instances can be removed

    enhancement priority-high 
    opened by zhani 0
  • Architecture redesign

    Architecture redesign

    Current architecture is hard to keep robust and scalable because of many not so flexible approaches in current code.

    For example: All java -> c++ calls are doing via one Browser singleton and glue entity. This entry points keeps growing in size when we implement new features.

    This task is to investigate better approaches and do design overhaul.

    • Fix native access model (relates to #104 )
    • Ensure thread safety and clean up threading model
    • More straightforward 1:1 relationship between java and c++
    • Reformat whole codebase using common code style and convetions
    enhancement priority-high 
    opened by zhani 0
Owner
Igalia
Open Source Consultancy
Igalia
Ultra-lightweight web browser based on Qt Ultralight webview, powered by Ultralight HTML renderer

Qt Ultralight Browser This is an ultra-lightweight web browser powered by the Ultralight web engine embedded in Qt 5 app as a custom webview widget -

niu tech 30 Jun 14, 2022
A webserver hosting a bank system for Minecraft, able to be used from web browser or from CC/OC if you're playing modded.

CCash A webserver hosting a bank system for Minecraft, able to be used from web browser or from CC/OC if you're playing modded. Description the curren

William Katz 24 Dec 10, 2021
A fork of Endless Sky for playing in a browser: try it at https://play-endless-sky.com/

Endless Web A fork of Endless Sky to make the game playable in a browser. Play at https://play-endless-web.com File issues for anything to do with the

Thomas Ballinger 13 Jun 8, 2022
A simple web browser written for learning purposes in C++

AWB: Abbix's web browser pls send help AWB is a simple web browser written for learning purposes in C++, it features a custom engine named orca render

null 9 Jul 8, 2021
Abaco: lame web browser for Plan 9

Abaco: lame web browser for Plan 9, eternally a work in progress.

Fazlul Shahriar 7 Mar 7, 2022
DOS Web browser for 8088 class machines

MicroWeb MicroWeb is a web browser for DOS! It is a 16-bit real mode application, designed to run on minimal hardware. Minimum requirements To run you

null 226 Jul 2, 2022
The offical repository of the nextbird browser (for the 13th Generation)

The Nextbird Browser Introduction for Nextbird Was ist Nextbird? Nextbird is ein open source Browser der sich zum Ziel gesetzt hat denn Firefox Browse

The Nextbird Project 1 Nov 9, 2021
QML web browser

Canonic | QML Web Browser Canonic is an experimental QML web browser developed in the Qt framework and licensed under GPL3. A live WebAssembly version

Canonic 66 Jun 24, 2022
Gurf: A Gerbil/Gambit Scheme Surf Web Browser

Gurf, a (G)erbil/Gambit Scheme S(urf) Browser I want a browser with a REPL that I can hack in Meta-Scheme. It has to be useful. It has to be hackable.

Drew Crampsie 1 Nov 30, 2021
Android and iOS SDK to display maps and geodata of swisstopo. Owner: simonroesch, Deputy: gjn

Open Swiss Maps SDK Android and iOS SDK to display maps and geodata of swisstopo Free map layers and geo data by swisstopo in your app Offer your mobi

geo.admin.ch 21 May 20, 2022
Dolphin is an emulator for running GameCube and Wii games on Windows, Linux, macOS, and recent Android devices.

Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.

Dolphin Emulator 8.8k Jul 2, 2022
Android-Login-Offline Simple login form in Java by Mahmoud Gaming

Android-Login-Offline Simple login form in Java by Mahmoud Gaming. I wanted to upload this project long time ago. This project is for experienced modd

Mahmoud Gaming 7 Mar 29, 2022
A VPN client for Android based on OpenVPN made with Jetpack Compose.

Gear VPN - Free, Secure & Open sourced VPN Tech Stack Jetpack Compose - Google's new UI toolkit for developing native Android apps. Navigator-Compose

Kaustubh Patange 62 Jun 25, 2022
Dolphin |MMJR| is a Gamecube/Wii Emulator for Android devices; based on Dolphin MMJ source code which is aimed at pure performance.

Dolphin |MMJR| An Android-only performance-focused Dolphin (Official) fork, continued from the Dolphin MMJ source code by Weihuoya. This version is me

null 215 Jun 25, 2022
RakNet is a cross platform, open source, C++ networking engine for game programmers.

RakNet 4.081 Copyright (c) 2014, Oculus VR, Inc. Package notes The Help directory contains index.html, which is full help documentation in HTML format

Facebook Archive 3.1k Jun 30, 2022
ZeroMQ core engine in C++, implements ZMTP/3.1

ZeroMQ Welcome The ZeroMQ lightweight messaging kernel is a library which extends the standard socket interfaces with features traditionally provided

The ZeroMQ project 7.8k Jun 27, 2022
RakNet is a cross platform, open source, C++ networking engine for game programmers.

RakNet 4.081 Copyright (c) 2014, Oculus VR, Inc. Package notes The Help directory contains index.html, which is full help documentation in HTML format

Facebook Archive 3.1k Jun 27, 2022
C++ Parallel Computing and Asynchronous Networking Engine

As Sogou`s C++ server engine, Sogou C++ Workflow supports almost all back-end C++ online services of Sogou, including all search services, cloud input method,online advertisements, etc., handling more than 10 billion requests every day

Sogou Open Source 8.4k Jun 24, 2022
macOS 12.0 Monterey SDK for Mach engine

macOS 12.0 Monterey SDK for Mach Engine This repository contains native system binary files required to build Mach Engine for macOS, from any host OS.

Hexops 5 Jun 23, 2022