The thing is, if the debugger is not active, entering the debugger loads a new debug context every time. You would have to re-disable the mirror cache every time. Is that what you want?
Yang On Tue, Jun 3, 2014 at 1:22 PM, Yury Semikhatsky <[email protected]> wrote: > > > > On Tue, Jun 3, 2014 at 1:37 PM, Yang Guo <[email protected]> wrote: > >> So, could we simply skip the cache if the debugger is not entered? I >> would then set a flag on the global object of the debug context after >> entering the debugger, which guards caching. Leaving the debugger would >> clear the cache and clear the flag. >> > We don't need to tie this to the debugger entrance, we just need a global > flag for disabling mirror cache. We would set that flag in DebuggerScript.js > initialization code. > > > >> Since blink never enters the debugger, the mirror cache is not active. I >> would then remove the ClearMirrorCache call when getting scripts. >> > Blink does enter the debugger in some cases, e.g. when doing evals on > pause but we still don't need the cache in those cases. > > >> >> > > >> WDYT? >> >> Yang >> >> >> On Tue, Jun 3, 2014 at 11:29 AM, <[email protected]> wrote: >> >>> On 2014/06/03 08:12:46, Yang wrote: >>> >>>> https://codereview.chromium.org/296953005/diff/40001/src/ >>>> debug-debugger.js >>>> File src/debug-debugger.js (right): >>>> >>> >>> >>> https://codereview.chromium.org/296953005/diff/40001/src/ >>> debug-debugger.js#newcode491 >>> >>>> src/debug-debugger.js:491: return %DebugGetLoadedScripts(); >>>> On 2014/06/03 08:07:21, yurys wrote: >>>> > This change looks wrong to me. By design of V8 debugging protocol >>>> mirror >>>> >>> cache >>> >>>> > should be kept while we are staying on a breakpoint so that the >>>> client could >>>> > access corresponding object by its mirror id. After this change, >>>> however, >>>> >>> the >>> >>>> > cache will be cleared on any call to GetLoadedScripts() and the >>>> remote id >>>> >>> will >>> >>>> > become invalid. >>>> > >>>> > In case of blink the problem is that we create mirror objects not >>>> only when >>>> >>> we >>> >>>> > stay on a breakpoint and I'm not sure we clear them properly. Also we >>>> don't >>>> use >>>> > id->mirror map in blink and I believe a right way to fix this would >>>> be to >>>> > disable mirror cache in blink completely. WDYT? >>>> >>> >>> Not sure I understand. Which code path does blink use to get loaded >>>> scripts? >>>> >>> >>> Blink adds a bunch of convenience methods into the debug context all of >>> which >>> are defined in DebuggerScript.js [1] and they leverage mirror >>> infrastructure to >>> inspected user objects (one important difference compared to v8 debugger >>> as I >>> said is that we never need to resolve id into morror object so the cache >>> is >>> useless in case of Blink). To collect current scripts >>> PageScriptDebugServer.cpp >>> calls [2] DebuggerScript.getScripts() which in turn calls >>> Debug.scripts() [3] >>> but all of this happens without entering debugger as simple function >>> call using >>> v8 api. As we don't enter debugger in that case ClearMirrorCache may >>> never be >>> called. This might be a bug in this particular case and we should use >>> v8::Debug::Call for invoking DebuggerScript.getScripts() to make sure >>> EnterDebugger is called and mirror cache is cleared after the call. But >>> in >>> general to avoid bugs like this we could skip mirror cache for the >>> mirrors >>> created by Blink. >>> >>> [1] >>> https://code.google.com/p/chromium/codesearch#chromium/ >>> src/third_party/WebKit/Source/bindings/v8/DebuggerScript.js >>> [2] >>> https://code.google.com/p/chromium/codesearch#chromium/ >>> src/third_party/WebKit/Source/bindings/v8/PageScriptDebugServer.cpp&q= >>> PageScriptDebugServer.cpp&sq=package:chromium&type=cs&l=132 >>> [3] >>> https://code.google.com/p/chromium/codesearch#chromium/ >>> src/third_party/WebKit/Source/bindings/v8/DebuggerScript.js& >>> q=getScripts&sq=package:chromium&type=cs&l=132 >>> >>> https://codereview.chromium.org/296953005/ >>> >> >> > -- -- 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.
