On Tue, Jun 3, 2014 at 3:30 PM, Yang Guo <yang...@chromium.org> wrote:

> The thing is, if the debugger is not active, entering the debugger loads a
> new debug context every time.
>
We assume that the same debug context is reused as long as we have debug
event listener set in v8 and this matches with what I see in debug.cc [1].
Also we compile DebuggerScript.js once when devtools window opens and keep
a persistent handle on a global object from the debug context.

[1]
https://code.google.com/p/chromium/codesearch#chromium/src/v8/src/debug.cc&q=GetDebugContext&sq=package:chromium&type=cs&l=3134



> You would have to re-disable the mirror cache every time. Is that what you
> want?
>
Since we reuse one debug context during give debug session we will have to
set that flag only once when opening devtools. Of cause if the user
closes/reopens devtools a new debug context will be created and the flag
will be reset.


>
> Yang
>
>
> On Tue, Jun 3, 2014 at 1:22 PM, Yury Semikhatsky <yu...@chromium.org>
> wrote:
>
>>
>>
>>
>> On Tue, Jun 3, 2014 at 1:37 PM, Yang Guo <yang...@chromium.org> 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, <yu...@chromium.org> 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
v8-dev@googlegroups.com
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 v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to