Hi Darin,

I do embed v8 on android on a regular basis.
Unlike you, I run v8 bound to gl thread, and as a rule of thumb for 
performance reasons always on a different than the main thread. 
I need to, at least, run `v8::platform::PumpMessageLoop(&platform, 
isolate_);` to have promises executed. 
In my case, this is executed consistently once every gl thread tick, 60 
times a sec.

Your webassembly example, throws this btw: "TypeError: 
WebAssembly.instantiate(): Imports argument must be present and must be an 
object"

Hope that helps.


El viernes, 17 de enero de 2020, 16:29:12 (UTC+1), Darin Dimitrov escribió:
>
> 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> 
>> 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
>>> 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/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
>>
>>
>> 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/31500e16-9ad0-485b-b042-f83d57674679%40googlegroups.com.

Reply via email to