[TIMOB-18517] Windows: Investigate cross-platform require implementation in GlobalObject
GitHub Issue | n/a |
---|---|
Type | Story |
Priority | Medium |
Status | Open |
Resolution | Unresolved |
Affected Version/s | n/a |
Fix Version/s | n/a |
Components | Windows |
Labels | n/a |
Reporter | Gary Mathews |
Assignee | Unknown |
Created | 2015-02-05T15:25:24.000+0000 |
Updated | 2018-02-28T19:54:48.000+0000 |
Description
From https://github.com/appcelerator/titanium_mobile_windows/pull/110#discussion_r24169482
It looks to me like we could implement GlobalObject and require entirely cross-platform, but it'd have to defer to using Ti.Filesystem API. Right now that requires us to jump into JS to do so:
JSValue Titanium_property = get_context().get_global_object().GetProperty("Titanium");
JSObject Titanium = static_cast<JSObject>(Titanium_property);
JSValue FS_property = Titanium.GetProperty("Filesystem");
JSObject FS = static_cast<JSObject>(FS_property);
JSValue File_property = FS.GetProperty("File");
JSObject File = static_cast<JSObject>(File_property);
auto file = File.CallAsConstructor(path);
JSValue resolve_property = file.GetProperty("resolve");
JSObject resolve = static_cast<JSObject>(resolve_property);
return resolve();
We were reluctant to do so out of concern for performance/memory overhead of accessing the JS objects/properties/functions and then calling them (and marshaling the values back and forth between c++ types and JSValues).
What is the actual performance overhead involved here? Is it small enough that a cross-platform implementation is of high importance? Is there a way we can use pure C++ and still do this cross-platform (i.e. can we still get a reference/defer to the platform specific implementation of File when we need to)?
No comments