Thank you, Leszek and Dan for the suggestions. I tried passing <https://gist.github.com/gunesacar/2daf6cca049b10c832536591f69b58a8#file-breakpoint_perf-js-L77> --no-enable-lazy-source-positions, but I still get full script parses for each hit breakpoint.
I put together the small repro <https://gist.github.com/gunesacar/2daf6cca049b10c832536591f69b58a8> that Dan suggested. It uses Puppeteer, although passing `headless=false` didn't change things either. The script will print instructions <https://gist.github.com/gunesacar/2daf6cca049b10c832536591f69b58a8#file-breakpoint_perf-js-L175-L177> to count the number of full parses in the logs. Let me know if I can make it easier for you to reproduce the issue. Thanks again, Gunes On Tue, Oct 6, 2020 at 10:23 AM Dan Elphick <[email protected]> wrote: > If it is down to lazy source positions, then what *should* happen is that > it would reparse each function at the point that you set the breakpoint as > otherwise it wouldn't know where to set it. In that case you would get 1000 > function reparses. It shouldn't need to reparse every function each time, > because a) it only needs the source positions for the function it's setting > the break point on and b) it doesn't need to parse the entire program to do > that. > > As Leszek says, disabling the feature via the flag would tell you if it's > responsible. > > The code in your gist is just the code to be debugged, but not the code > that sets the break points. A repro with just 10 functions should be > sufficient to show that it's doing 100 reparses and we can go from there. > > Thanks, > Dan > > On Tue, 6 Oct 2020 at 09:08, Leszek Swirski <[email protected]> wrote: > >> This might be lazy source positions forcing a reparse, have you tried >> running with --no-enable-lazy-source-positions? >> >> On Tue, Oct 6, 2020 at 3:23 AM Gunes Acar <[email protected]> wrote: >> >>> The missing screenshot of the trace can be seen at: Github: >>> https://gist.github.com/gunesacar/b8f82266e93fbfda2bf06c573af3caea#gistcomment-3478635 >>> >>> On Tuesday, October 6, 2020 at 3:15:53 AM UTC+2 Gunes Acar wrote: >>> >>>> Hi all, >>>> >>>> For an academic research project, we use Chrome Devtools Protocol to >>>> set breakpoints at function returns, and collect function call metadata >>>> (stack frames, arguments, timestamps) using a condition script(*). >>>> >>>> Although the condition script always returns `false` to avoid pausing >>>> the debugger, we still observe a significant overhead per "hit" breakpoint. >>>> >>>> To identify the root cause, we set up tracing and found that >>>> *V8.ParseProgram* is called for each "hit" breakpoint. We then logged >>>> function events using "*--js-flags=--log-function-events*", which >>>> showed that all functions in the debugged script is *fully parsed* >>>> (i.e., `function,full-parse,...` event) for each "hit" breakpoint. >>>> >>>> >>>> For example, assume the debugged script contains 10K function >>>> definitions, of which only a 100 is called. We observe ~10K*100=~1M >>>> function (full-)parse events in the logs, which slows down the process and >>>> makes it unfeasible on heavy websites. >>>> >>>> 1) Is it possible to prevent repeated parsing of the debugged script >>>> for each evaluated breakpoint? >>>> >>>> 2) Could there be an easier and faster way of logging all function >>>> calls with the associated stack frames and arguments? Pointers to the >>>> relevant code locations would be much appreciated if modifying Chrome/V8 >>>> source code is the only way to do that. >>>> The trace and test files can be found in this Gist >>>> <https://gist.github.com/gunesacar/b8f82266e93fbfda2bf06c573af3caea#file-trace-json> >>>> . >>>> >>>> Thanks so much and stay safe, >>>> Gunes >>>> >>>> PS: None of our breakpoints were actually hit, since the condition >>>> script always returns false. Also, the debugged scripts were not modified >>>> during the execution through `Debugger.setScriptSource` or by any other >>>> means >>>> >>>> *: Idea from the DuckDuckGo’s Tracker Radar Collector >>>> <https://github.com/duckduckgo/tracker-radar-collector/blob/98fa0f5a00016a2d10a43d86e16b38601f7ee387/collectors/APICalls/TrackerTracker.js#L76> >>>> >>>> >>>> -- >>> -- >>> 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]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/v8-dev/f3242ed8-a082-4b68-868b-1a18f9d98323n%40googlegroups.com >>> <https://groups.google.com/d/msgid/v8-dev/f3242ed8-a082-4b68-868b-1a18f9d98323n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> -- >> 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]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/v8-dev/CAGRskv8nby_co6K6%2Bxcyq-WKVvq4_SodGCczQAH_Wg_oTJ%2BBEg%40mail.gmail.com >> <https://groups.google.com/d/msgid/v8-dev/CAGRskv8nby_co6K6%2Bxcyq-WKVvq4_SodGCczQAH_Wg_oTJ%2BBEg%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > -- > 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]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/v8-dev/CALH_77sN_wbzqsJeDq82eyactH%3D0Xq%3DYdbfHD4T-Fr0YD%2Byiew%40mail.gmail.com > <https://groups.google.com/d/msgid/v8-dev/CALH_77sN_wbzqsJeDq82eyactH%3D0Xq%3DYdbfHD4T-Fr0YD%2Byiew%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- -- 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]. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-dev/CABb%3D4dUtagUNmWHuSTG1d1zTh92mbRs8P6MF4JLFNYWB8YGKnQ%40mail.gmail.com.
