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