A v8::Function maps to a v8::internal::JSFunction, which has a code() property. That's either the existing compiled code, or a stub that will trigger (re-)compilation based on the script() in the JSFunction's shared_function_info(). It will be retrieved and called by the JSEntryStub.
You might want to put your instrumentation into Invoke(...) in execution.cc. On Thu, Aug 31, 2017 at 11:56 AM, Hanyun Tao <taohany...@gmail.com> wrote: > Hi Jakob, > > Thank you for answering my questions! > > I would like to modify V8's internals to support such functionality. But > before I start I would like to learn a little more about how chromium > interact with V8 to process JavaScript event. > > By reading the source code, I believe that the WebKit rendering engine > will call *v8::Function::Call* in api.cc, and after that the V8 engine > will execute the Javascript code. Am I correct? > > If this is how things going to work, could you please point out where in > this process, V8 compiles the code, or "read" the compiled code correspond > to the JavaScript? > > Thank you! > > On Wednesday, August 30, 2017 at 8:39:00 PM UTC-4, Jakob Kummerow wrote: >> >> Object addresses are not exposed either. You would have to build such >> instrumentation into V8's internals. >> >> On Tue, Aug 29, 2017 at 12:32 PM, Hanyun Tao <taoha...@gmail.com> wrote: >> >>> Thank you Jakob! >>> >>> I can understand why it is hidden from external access. But would it be >>> possible for the user to get access to the instruction addresses of the >>> compiled code? >>> >>> We are studying the cache performance of JavaScript execution and we >>> want to know if it is possible to prefetch the instructions in the next >>> event handlers into the cache before it is executed based on the >>> information collected in the v8 engine. >>> >>> Best regards, >>> >>> On Tuesday, August 29, 2017 at 12:29:33 PM UTC-4, Jakob Kummerow wrote: >>>> >>>> No, compiled code is an internal implementation detail and as such is >>>> hidden from JavaScript and other external access. If there ever is a way >>>> for users to get to compiled code, then it's a (probably severe security) >>>> bug and we would like to hear about it! :-) >>>> >>>> On Mon, Aug 28, 2017 at 9:03 PM, Hanyun Tao <taoha...@gmail.com> wrote: >>>> >>>>> Hi Jakob, >>>>> >>>>> Thanks again! >>>>> >>>>> According to what you have said, v8 compiles the event handlers are >>>>> installed(compiled?) before it is executed. If it is true, then I believe >>>>> v8 will store the compiled code somewhere in the system. >>>>> Would it be possible for the user to get access to the compiled code? >>>>> >>>>> Best regards, >>>>> >>>>> On Monday, August 28, 2017 at 1:29:29 PM UTC-4, Jakob Kummerow wrote: >>>>>> >>>>>> The main API entry point for compilation is >>>>>> v8::ScriptCompiler::Compile(). >>>>>> >>>>>> I don't think event handling itself triggers compilation; but I'm not >>>>>> an expert on that part of the system. AFAIK event handlers are installed >>>>>> during page load (or more precisely: DOM element creation); they may >>>>>> still >>>>>> be compiled on-demand on first use but that's not controlled via the V8 >>>>>> API. >>>>>> >>>>>> On Mon, Aug 28, 2017 at 9:06 AM, Hanyun Tao <taoha...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Hi Jakob, >>>>>>> >>>>>>> Thank you for replying! >>>>>>> >>>>>>> To be more specific, I'm looking for the point (function) that >>>>>>> initiate the compilation process. >>>>>>> >>>>>>> In my understanding, when handling an "event", the renderer process >>>>>>> in the browser will figure out the JavaScript related to the event, and >>>>>>> ask >>>>>>> the V8 engine to execute it by calling some api function. >>>>>>> >>>>>>> Inside those api function, there should be a point where V8 initiate >>>>>>> the compilation process, and that is what I'm looking for. >>>>>>> >>>>>>> Best regards, >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Sunday, August 27, 2017 at 7:58:37 PM UTC-4, Jakob Kummerow wrote: >>>>>>>> >>>>>>>> Hi Hanyun, >>>>>>>> >>>>>>>> V8 is fairly complicated, and pretty much all it does is to compile >>>>>>>> and execute JavaScript. Do you have a more specific question? >>>>>>>> >>>>>>>> If you just want a starting point for reading code: maybe >>>>>>>> "CompileTopLevel" in src/compiler.cc would be a reasonable choice. >>>>>>>> >>>>>>>> On Sun, Aug 27, 2017 at 1:06 PM, Hanyun Tao <taoha...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi all, >>>>>>>>> >>>>>>>>> I'm trying to understand how V8 engine compiles and execute >>>>>>>>> JavaScript events. I used GDB to track the function call path when >>>>>>>>> handling >>>>>>>>> an event and it look like this. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> #0 v8::internal::Logger::TimerEvent (this=<optimized out>, >>>>>>>>> se=<optimized out>, name=<optimized out>) at ../../v8/src/log.cc:866 >>>>>>>>> >>>>>>>>> >>>>>>>>> #1 0x00007f0cfcb23b39 in TimerEventScope (this=<optimized out>, >>>>>>>>> isolate=<optimized out>) at ../../v8/src/log.h:354 >>>>>>>>> >>>>>>>>> >>>>>>>>> #2 v8::Function::Call (this=<optimized out>, context=..., >>>>>>>>> recv=..., argc=<optimized out>, argv=<optimized out>) at >>>>>>>>> ../../v8/src/api.cc:5094 >>>>>>>>> >>>>>>>>> >>>>>>>>> #3 0x00007f0cf18daa0b in blink::V8ScriptRunner::callFunction >>>>>>>>> (function=..., context=0x201b099829d0, receiver=..., argc=1, >>>>>>>>> args=0x7fffe9e1cea0, >>>>>>>>> isolate=0x2def318c6020) at ../../third_party/WebKit/Source/ >>>>>>>>> bindings/core/v8/V8ScriptRunner.cpp:658 >>>>>>>>> >>>>>>>>> >>>>>>>>> #4 0x00007f0cf18a1c26 in >>>>>>>>> blink::V8EventListener::callListenerFunction >>>>>>>>> (this=0xe9381bfbea0, scriptState=0x37fa7244c710, jsEvent=..., event= >>>>>>>>> 0x36f97e2ba60) at ../../third_party/WebKit/Source/bindings/ >>>>>>>>> core/v8/V8EventListener.cpp:112 >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> #5 0x00007f0cf1887b16 in >>>>>>>>> blink::V8AbstractEventListener::invokeEventHandler >>>>>>>>> (this=0xe9381bfbea0, scriptState=0x37fa7244c710, >>>>>>>>> event=0x36f97e2ba60, jsEvent=...) at ../../third_party/WebKit/ >>>>>>>>> Source/bindings/core/v8/V8AbstractEventListener.cpp:142 >>>>>>>>> >>>>>>>>> >>>>>>>>> #6 0x00007f0cf188787f in blink::V8AbstractEventListener::handleEvent >>>>>>>>> (this=0xe9381bfbea0, scriptState=0x37fa7244c710, event=0x36f97e2ba60) >>>>>>>>> at ../../third_party/WebKit/Source/bindings/core/v8/ >>>>>>>>> V8AbstractEventListener.cpp:101 >>>>>>>>> >>>>>>>>> >>>>>>>>> #7 0x00007f0cf1887689 in blink::V8AbstractEventListener::handleEvent >>>>>>>>> (this=0xe9381bfbea0, executionContext=0x201b099829d0, >>>>>>>>> event=0x36f97e2ba60) >>>>>>>>> at ../../third_party/WebKit/Source/bindings/core/v8/ >>>>>>>>> V8AbstractEventListener.cpp:89 >>>>>>>>> >>>>>>>>> >>>>>>>>> #8 0x00007f0cf211c596 in blink::EventTarget::fireEventListeners >>>>>>>>> (this=0x201b09982858, event=0x36f97e2ba60, d=0xe9381be9500, entry=...) >>>>>>>>> at ../../third_party/WebKit/Source/core/events/EventTarget.cpp >>>>>>>>> :700 >>>>>>>>> >>>>>>>>> >>>>>>>>> #9 0x00007f0cf211b7cb in blink::EventTarget::fireEventListeners >>>>>>>>> (this=0x201b09982858, event=0x36f97e2ba60) >>>>>>>>> at ../../third_party/WebKit/Source/core/events/EventTarget.cpp >>>>>>>>> :56 >>>>>>>>> >>>>>>>>> >>>>>>>>> I tried to read the source code to find out where does V8 compiles >>>>>>>>> the JavaScript, but unfortunately, I could not find it. >>>>>>>>> >>>>>>>>> It would be really helpful if someone can explain the process to >>>>>>>>> me, or let me know which files(functions) I should read. >>>>>>>>> >>>>>>>>> Best regards, >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- >>>>>>>>> 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-users+u...@googlegroups.com. >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>> -- >>>>>>> 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-users+u...@googlegroups.com. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> -- >>>>> -- >>>>> 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-users+u...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>> -- >>> 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-users+u...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > -- > 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. > For more options, visit https://groups.google.com/d/optout. > -- -- 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. For more options, visit https://groups.google.com/d/optout.