Thanks Clemens. I would be very happy if someone more familiar could provide some insight.
Any pointers in the Google Chrome source code for Android would also be helpful. I suppose they have already faced this problem and implemented it properly. On Thursday, January 16, 2020 at 3:41:22 PM UTC+2, Clemens Backes wrote: > > On Thu, Jan 16, 2020 at 2:23 PM Darin Dimitrov <darin....@gmail.com > <javascript:>> wrote: > >> Thanks Clemens. >> >> This works fine but it blocks the main thread. What would be the best >> approach to handle this in an Android app? Would writing a custom platform >> help in this case? >> > > I don't know about Android development, and I am not a platform expert, so > maybe others can chime in. > I guess that your own platform implementation would help because you would > get notified of new tasks that get scheduled. > > On Wednesday, January 15, 2020 at 5:12:39 PM UTC+2, Clemens Hammacher >> wrote: >>> >>> Hi Darin, >>> >>> WebAssembly.instantiate works asynchronously, so you have to keep your >>> program running for a while to wait for the asynchronous result, and keep >>> pumping the message loop and running microtasks to actually execute the >>> compilation tasks and promise resolution tasks that get added from the >>> background. >>> >> >>> >>> This is probably not the most elegant solution, but it works: >>> [...] >>> script->Run(context).ToLocal(&result); >>> // Keep running for 10 seconds, pumping the message loop and running >>> // microtasks. >>> auto start = std::chrono::system_clock::now(); >>> do { >>> v8::platform::PumpMessageLoop(platform.get(), isolate); >>> isolate->RunMicrotasks(); >>> } while (std::chrono::duration_cast<std::chrono::seconds>( >>> std::chrono::system_clock::now() - start) >>> .count() < 10); >>> >>> Hope that helps, >>> Clemens >>> >>> >>> On Wed, Jan 15, 2020 at 9:15 AM Darin Dimitrov <darin....@gmail.com> >>> wrote: >>> >>>> I have embedded V8 (7.8.279.19) inside my Android application and tried >>>> executing a script that compiles a WebAssembly module. >>>> >>>> Unfortunately the promise returned by the "WebAssembly.compile" method >>>> is never completed (neither the "then" or the "catch" methods are >>>> invoked). >>>> The same happens with the "WebAssembly.instantiate" method: >>>> >>>> std::unique_ptr<v8::Platform> platform = v8::platform:: >>>> NewDefaultPlatform(); >>>> v8::V8::InitializePlatform(platform.get()); >>>> v8::V8::Initialize(); >>>> >>>> v8::Isolate::CreateParams create_params; >>>> create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator:: >>>> NewDefaultAllocator(); >>>> v8::Isolate* isolate = v8::Isolate::New(create_params); >>>> v8::Isolate::Scope isolate_scope(isolate); >>>> v8::HandleScope scope(isolate); >>>> auto global_template = v8::ObjectTemplate::New(isolate); >>>> global_template->Set(v8::String::NewFromUtf8(isolate, "log", v8:: >>>> NewStringType::kNormal).ToLocalChecked(), v8::FunctionTemplate::New( >>>> isolate, [](const v8::FunctionCallbackInfo<v8::Value>& info) { >>>> v8::Isolate* isolate = info.GetIsolate(); >>>> v8::String::Utf8Value utf(isolate, info[0].As<v8::String>()); >>>> __android_log_print(ANDROID_LOG_DEBUG, "V8Native", "%s",*utf); >>>> })); >>>> >>>> v8::Local<v8::Context> context = v8::Context::New(isolate, nullptr, >>>> global_template); >>>> v8::Context::Scope context_scope(context); >>>> const char* csource = R"( >>>> let bytes = new Uint8Array([ >>>> 0,97,115,109,1,0,0,0,1,8,2,96,1,127,0,96,0,0,2,8,1,2,106, >>>> 115,1,95,0,0,3,2,1,1,8,1,1,10,9,1,7,0,65,185,10,16,0,11 >>>> ]); >>>> log('before the call'); >>>> WebAssembly >>>> .instantiate(bytes) >>>> .then(obj => log('success')) >>>> .catch(err => log('log')); >>>> )"; >>>> v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, csource >>>> , v8::NewStringType::kNormal).ToLocalChecked(); >>>> v8::Local<v8::Script> script = v8::Script::Compile(context, source). >>>> ToLocalChecked(); >>>> v8::Local<v8::Value> result; >>>> script->Run(context).ToLocal(&result); >>>> >>>> >>>> >>>> Do you have any idea what I might be missing here? The same javascript >>>> code works fine in the desktop browser. >>>> >>>> -- >>>> -- >>>> v8-users mailing list >>>> v8-u...@googlegroups.com >>>> http://groups.google.com/group/v8-users >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "v8-users" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to v8-u...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/v8-users/4c766e82-892c-45f5-984a-aa9dd87f8138%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/v8-users/4c766e82-892c-45f5-984a-aa9dd87f8138%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> >>> >>> -- >>> >>> Clemens Backes >>> >>> Software Engineer >>> >>> clem...@google.com >>> >>> >>> Google Germany GmbH >>> >>> Erika-Mann-Straße 33 >>> >>> 80636 München >>> >>> Geschäftsführer: Paul Manicle, Halimah DeLaine Prado >>> >>> Registergericht und -nummer: Hamburg, HRB 86891 >>> >>> Sitz der Gesellschaft: Hamburg >>> >>> Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise erhalten >>> haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter, >>> löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen, >>> dass die E-Mail an die falsche Person gesendet wurde. >>> >>> >>> This e-mail is confidential. If you received this communication by >>> mistake, please don't forward it to anyone else, please erase all copies >>> and attachments, and please let me know that it has gone to the wrong >>> person. >>> >>> -- >> -- >> v8-users mailing list >> v8-u...@googlegroups.com <javascript:> >> http://groups.google.com/group/v8-users >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to v8-u...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/v8-users/94c52b07-5b54-4e61-9fc2-4f2afecf2096%40googlegroups.com >> >> <https://groups.google.com/d/msgid/v8-users/94c52b07-5b54-4e61-9fc2-4f2afecf2096%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > > -- > > Clemens Backes > > Software Engineer > > clem...@google.com <javascript:> > > > Google Germany GmbH > > Erika-Mann-Straße 33 > > 80636 München > > Geschäftsführer: Paul Manicle, Halimah DeLaine Prado > > Registergericht und -nummer: Hamburg, HRB 86891 > > Sitz der Gesellschaft: Hamburg > > Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise erhalten > haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter, > löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen, > dass die E-Mail an die falsche Person gesendet wurde. > > > This e-mail is confidential. If you received this communication by > mistake, please don't forward it to anyone else, please erase all copies > and attachments, and please let me know that it has gone to the wrong > person. > > > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-users/5aeef66b-582a-4d7a-a060-7810d002523f%40googlegroups.com.