Hi Wenzhi,

I'll try to answer your questions inline.

On Sun, Dec 20, 2015 at 2:28 PM WENZHI CUI <[email protected]> wrote:

> Hi all,
>   Sorry if this post disturbs you, I have some specific questions about v8
> function events but I cannot find anything on google.
>
>   For some reason I want to instrument the JSFunction events (especially
> for closures), e.g., I want to instrument the creation/invocation events of
> JSFunction activities. I want to make v8 call some my own function if a
> JSFunction get allocated and accessed.
>
>   The high level idea is when a JSFunction is created on heap, I will
> create a persistent handle for it and put it in a hash table (currently I
> am using unordered_set). I will also make it weak so I can instrument the
> deallocation of this JSFunction object.
>
You would have to come up with a custom weakness implementation similar to
the external string table. The standard way for weakness through WeakCell
does not offer a finalizer callback.


>   I also modified runtime function traceEnter & traceExit so I can add my
> hooks for function invocation.
>
>   However, I do have two questions about this:
>   1. The way I instrument function creation is add a hook in
> Factory::NewFunction(...). Unfortunately some closures are created through
> FastNewClosureStub which will not call the factory methods. My work around
> is to force all closure are allocated through runtime function NewClosure
> but it seems a bad idea. I guess somewhere in the FastNewClosureStub will
> also call some heap allocation procedure which created a JSFunction object
> but I cannot find it. Does anyone know where is it?
>
I think, for the sake of tracing, not using the FastNewClosureStub is not
an issue. It's just a performance optimization after all.


>
>   2. I want to put the persistent handles in a hash table, but I have
> trouble find a useful hash function. I tried Local->GetIdentityHash() but
> it seems it will break my code somehow, especially when I call it in
> kTraceEnter, Here is my code:
>
> RUNTIME_FUNCTION(Runtime_TraceEnter) {
>     ...
>     JavaScriptFrameIterator it(isolate);
>     if (!it.done()) {
>       if (it.frame()->is_java_script()) {
>         JavaScriptFrame* frame = it.frame();
>         JSFunction* function = frame->function();
>         Handle<JSFunction> handle(function);
>                  Local<Function> local = Utils::ToLocal(handle);
>         local->GetIdentityHash(); // my program always crash is I call
> GetIdentityHash here
>       }
>     }
> }
>
> You don't have to go through the API to get to the identity hash. You can
use JSReceiver::GetOrCreateIdentityHash. You should hook up the crash to
gdb to see what's going on there.


>   Please let me know if you have any question or other concern. Thank you
> for reading my post.
>
> Thanks,
> Wenzhi Cui
>
> --
> --
> v8-dev mailing list
> [email protected]
> http://groups.google.com/group/v8-dev
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to