Thank you! That helps a lot! On Thursday, August 31, 2017 at 3:36:53 PM UTC-4, Jakob Kummerow wrote: > > 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 <taoha...@gmail.com > <javascript:>> 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-u...@googlegroups.com <javascript:> >> 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 <javascript:>. >> 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.