Embedded Crosswalk increase allocated memory on Android

2.9k views Asked by At

I have a several web application that I want to be able to run through a webview in a native android application. I am currently embedding a crosswalk browser and loading the applications in that. It works great for some of the web applications but as the size of the web application increases I get errors that crash my android application.

Things I have tried:

  • android:largeHeap="true" - helped I was able to run larger web applications.
  • android:hardwareAccelerated="true" - helped I got better performance.
  • xwalk-command-line='--ignore-gpu-blacklist' in assets/xwalk-commandline - also helps

There are still some web applications (created through unity) that required me to allocate about 1Gb when I was creating them for desktop testing. I am will be using this android app on the newest phones and would be ok with such a high memory usage.

It works if I try to open this application on a desktop browser so that is what leads me to believe that it is a memory allocation issue. I am using crosswalk 17 which has webGL enabled and the smaller applications run webgl just fine.

I have a few questions:

  1. Is there a way to force the crosswalk embedded browser to allocate 1GB of memory for itself. (I know this is going to crush my device and is probably not great but please indulge me)
  2. Can I expand my application's memory usage beyond largeHeap. If so how? And do I need to do so to enable such large web applications?
  3. Are there any issues that I am missing that are possibly masking the real issues here.
  4. I know this type of application would only ever run on the newest kinds of phones. what are the repercussions for an application that has such a high memory usage?
  5. Are there any other avenues I should explore to enable me to run large web applications within an android app?

Here are the answers to the FAQs of stack overflow users :)

Xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.mycompany.myproject.webapplicationActivity">


    <org.xwalk.core.XWalkView
        android:id="@+id/xwalkWebView"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#000000"
        />    
</RelativeLayout>

Activity onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webapplicationActivity);

    xWalkWebView=(XWalkView)findViewById(R.id.xwalkWebView);

    // turn on debugging
    XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
    xWalkWebView.setKeepScreenOn(true);
    xWalkWebView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
    String urlToBeLoaded = "http://www.google.com";

    Bundle bundle = getIntent().getExtras();
    if (savedInstanceState == null) {
        Bundle extras = getIntent().getExtras();
        if(extras == null) {
            Log.i(TAG,"error in reading extras");
        } else {
            urlToBeLoaded = extras.getString("url");
        }
    }
    xWalkWebView.load(urlToBeLoaded, null);

Permissions

*Crosswalk requires a lot of these and I am using the remainder. But maybe there is a conflict there.

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

ADB logcat

GL  : validate_display:255 error 3008 (EGL_BAD_DISPLAY)
02-17 18:11:55.862 23023 23023 W art     : Attempt to remove non-JNI local reference, dumping thread
02-17 18:11:55.903  4335  4448 I ActivityManager: Displayed com.mycompany.myProject/.GamePlayActivity: +464ms
02-17 18:11:55.904 23023 23023 W cr.BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 23023
02-17 18:11:55.904 22463 22463 I Keyboard.Facilitator: onFinishInput()
02-17 18:11:55.931 23023 23023 E chromium: [ERROR:layer_tree_host_impl.cc(2121)] Forcing zero-copy tile initialization as worker context is missing
02-17 18:11:55.980  4335  4448 I WindowManager: Screen frozen for +541ms due to Window{f87dd7b u0 com.mycompany.myProject/com.mycompany.myProject.GamePlayActivity}
02-17 18:11:57.987  4335  4448 I art     : Starting a blocking GC Explicit
02-17 18:11:58.205  4335  4448 I art     : Explicit concurrent mark sweep GC freed 12393(780KB) AllocSpace objects, 5(100KB) LOS objects, 23% free, 52MB/68MB, paused 1.298ms total 216.765ms
02-17 18:11:58.206  4335 15896 W InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@3b6394f attribute=null, token = android.os.BinderProxy@d44f10a
02-17 18:11:58.726 23023 23023 I chromium: [INFO:CONSOLE(1)] "Decompressed Release/StuntRunner_WebGL.memgz in 254ms. You can remove this delay if you configure your web server to host files using gzip compression.", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:11:59.103 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:11:59.663 23023 23023 I chromium: [INFO:CONSOLE(1)] "Decompressed Release/StuntRunner_WebGL.jsgz in 853ms. You can remove this delay if you configure your web server to host files using gzip compression.", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:11:59.985 23023 23023 I chromium: [INFO:CONSOLE(1)] "optimizing out Math.fround calls", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:12:00.103 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:01.104 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:02.105 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:03.105 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:03.174  4335 22386 D NetlinkSocketObserver: NeighborEvent{elapsedMs=775340136, 192.168.1.1, [100D7F6DFA6E], RTM_NEWNEIGH, NUD_REACHABLE}
02-17 18:12:04.106 22037 22037 W Atfwd_Sendcmd: AtCmdFwd service not published, waiting... retryCnt : 5
02-17 18:12:10.387  4335  6452 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ], android.os.BinderProxy@82c1e86)
02-17 18:12:10.392  4335  6549 I ActivityManager: Process com.instagram.android (pid 14465) has died
02-17 18:12:10.409  4335  5621 D ConnectivityService: releasing NetworkRequest NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 18:12:10.504  4335  5621 E ConnectivityService: RemoteException caught trying to send a callback msg for NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 18:12:10.781 23023 23263 F libc    : Fatal signal 4 (SIGILL), code 1, fault addr 0xd3781358 in tid 23263 (Chrome_InProcRe)
02-17 18:12:10.886  3293  3293 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
02-17 18:12:10.887  3293  3293 F DEBUG   : Build fingerprint: 'google/angler/angler:6.0.1/MMB29P/2473553:user/release-keys'
02-17 18:12:10.887  3293  3293 F DEBUG   : Revision: '0'
02-17 18:12:10.887  3293  3293 F DEBUG   : ABI: 'arm'
02-17 18:12:10.887  3293  3293 F DEBUG   : pid: 23023, tid: 23263, name: Chrome_InProcRe  >>> com.mycompany.myProject <<<
02-17 18:12:10.887  3293  3293 F DEBUG   : signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0xd3781358
02-17 18:12:10.933  3293  3293 F DEBUG   :     r0 d5366044  r1 40005000  r2 0855d000  r3 02182000
02-17 18:12:10.933  3293  3293 F DEBUG   :     r4 d5366044  r5 40000000  r6 00000000  r7 00000000
02-17 18:12:10.933  3293  3293 F DEBUG   :     r8 40005000  r9 d66d4050  sl 40000000  fp d66bee10
02-17 18:12:10.934  3293  3293 F DEBUG   :     ip f70ff624  sp d66bed40  lr d3dfa5e1  pc d3781358  cpsr 80030030
02-17 18:12:10.938  3293  3293 F DEBUG   : 
02-17 18:12:10.938  3293  3293 F DEBUG   : backtrace:
02-17 18:12:10.926  3293  3293 W debuggerd: type=1400 audit(0.0:9681): avc: denied { read } for name="kgsl-3d0" dev="tmpfs" ino=1150 scontext=u:r:debuggerd:s0 tcontext=u:object_r:gpu_device:s0 tclass=chr_file permissive=0
02-17 18:12:10.938  3293  3293 F DEBUG   :     #00 pc 001e3358  /data/app/com.mycompany.myProject-1/lib/arm/libxwalkcore.so
02-17 18:12:10.938  3293  3293 F DEBUG   :     #01 pc 0085c5dd  /data/app/com.mycompany.myProject-1/lib/arm/libxwalkcore.so
02-17 18:12:11.276  3293  3293 W debuggerd: type=1400 audit(0.0:9682): avc: denied { read } for name="kgsl-3d0" dev="tmpfs" ino=1150 scontext=u:r:debuggerd:s0 tcontext=u:object_r:gpu_device:s0 tclass=chr_file permissive=0
02-17 18:12:11.817  4335 23497 W ActivityManager:   Force finishing activity com.mycompany.myProject/.GamePlayActivity
02-17 18:12:11.818  3293  3293 F DEBUG   : 
02-17 18:12:11.818  3293  3293 F DEBUG   : Tombstone written to: /data/tombstones/tombstone_05
02-17 18:12:11.818  3293  3293 E DEBUG   : AM write failed: Broken pipe
02-17 18:12:11.890  4335 22149 I OpenGLRenderer: Initialized EGL, version 1.4
02-17 18:12:11.987  4335  5717 D GraphicsStats: Buffer count: 4
02-17 18:12:11.989  4335  5980 I WindowState: WIN DEATH: Window{def3a97 u0 com.mycompany.myProject/com.mycompany.myProject.LibraryActivity}
02-17 18:12:11.994  4335  5709 I WindowState: WIN DEATH: Window{9ffe3af u0 com.mycompany.myProject/com.mycompany.myProject.LoginActivity}
02-17 18:12:11.996  4335  4351 I WindowState: WIN DEATH: Window{ee84425 u0 com.mycompany.myProject/com.mycompany.myProject.GameDescriptionActivity}
02-17 18:12:11.999  4335  7252 I WindowState: WIN DEATH: Window{a09b55b u0 SurfaceView}
02-17 18:12:12.001  4335  5717 I WindowState: WIN DEATH: Window{f87dd7b u0 com.mycompany.myProject/com.mycompany.myProject.GamePlayActivity}
02-17 18:12:12.022  3309  3309 I Zygote  : Process 23023 exited due to signal (4)
02-17 18:12:12.024  4335 28075 I ActivityManager: Process com.mycompany.myProject (pid 23023) has died
02-17 18:12:12.073  4335 28075 I ActivityManager: Start proc 23507:com.mycompany.myProject/u0a179 for activity com.mycompany.myProject/.GameDescriptionActivity
02-17 18:12:12.076 23507 23507 I art     : Late-enabling -Xcheck:jni

Thank you in advance!

1

There are 1 answers

0
ahmmed On

I had a problem like that. I thought this problem came with ads like adsense or some went wrong with JavaScript

Try

 xwalk Release 'org.xwalk:xwalk_core_library:21.51.546.7'

I hope that helps you