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.

Reply via email to