Hi,

yes, I think that should catch the creation of every new closure.

Yang

On Mon, Dec 28, 2015 at 4:56 AM WENZHI CUI <[email protected]> wrote:

> Hi Yang,
>   Sorry to disturb you again.
>
>   I worked around the hash problem by only instrumenting the NewClosure
> runtime function. If I understand correctly, all JS unctions defined in a
> *.js file is considered as a closure so they should be created by
> NewClosure runtime (after I disable the FastNewClosureStub). Also, there
> are some functions not created by NewClosure runtime, they seem to be some
> sort of internal functions.
>
>   In general, I only care about the functions defined in *.js file instead
> of others. So I am wondering if my instrumentation is complete?
>
> Thanks,
> Wenzhi Cui
>
> On Monday, December 21, 2015 at 5:57:24 PM UTC+8, Yang Guo wrote:
>
>> 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.
>

-- 
-- 
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