I suggest we measure performance of each approach taking into account that
the code will be executed pretty often when timeline agent is on. Also the
call into v8::Debug will make the debug context live 'forever' which would
add additional memory overhead.

Yury

2010/2/4 Søren Gjesse <[email protected]>

> Hi Ilya,
>
> The following code should illustrate how to use the function mirror to get
> the source line. To run it you can add it to the end of the GetMirror test
> in test/cctest/test-debug.cc and run tools/test.py cctest/test-debug/
> GetMirror.
>
>   v8::ScriptOrigin origin =
>       v8::ScriptOrigin(v8::String::New("test"));
>   v8::Script::Compile(script, &origin)->Run();
>   v8::Local<v8::Function> f =
>       v8::Local<v8::Function>::Cast(env
> ->Global()->Get(v8::String::New("f")));
>   v8::Local<v8::Function> g =
>       v8::Local<v8::Function>::Cast(env
> ->Global()->Get(v8::String::New("g")));
>
>   v8::Handle<v8::Value> mirror_f = v8::Debug::GetMirror(f);
>   v8::Handle<v8::Value> mirror_g = v8::Debug::GetMirror(g);
>
>   v8::Handle<v8::Function> function_info = v8::Handle<v8::Function>::Cast(
>       v8::Script::New(
>           v8::String::New(
>               "function functionInfo(mirror) {"
>               "  return mirror.sourceLocation().line;"
>               "}"
>               ""
>               "functionInfo;"))->Run());
>   result = function_info->Call(env->Global(), 1, &mirror_f);
>   CHECK_EQ(0, result->Int32Value());
>   result = function_info->Call(env->Global(), 1, &mirror_g);
>   CHECK_EQ(3, result->Int32Value());
>
> I suggest you return a JavaScript object which contains all the information
> needed that is something like
>
>   function functionInfo(mirror) {
>     return { script: script().name(), line: mirror.sourceLocation().line }
>   }
>
> Look in src/mirror-delay.js to see what information is available for object
> mirrors.
>
> /Søren
>
> On Wed, Feb 3, 2010 at 12:12, Søren Gjesse <[email protected]> wrote:
>
>> I think looking at performance is the right thing to do. Please try to use
>> the GetMirror API in the code in V8Proxy.cpp, before adding devtools
>> specific functions to the V8 debugger API. Remember that you can compile the
>> JavaScript function taking the FunctionMirror object once. If using the
>> mirror has a performance overhead then maybe providing more direct access to
>> the script/line for a function on the FunctionMirror could solve the
>> problem.
>>
>> If more features are needed in the debugger API I think the API should be
>> more general, like providing a full mirror like API.
>>
>> Regards,
>> Søren
>>
>>
>> On Tue, Feb 2, 2010 at 18:26, Ilya Tikhonovsky <[email protected]>wrote:
>>
>>> Hi,
>>>
>>> Please see preliminary patch for third step.
>>>
>>> https://bugs.webkit.org/show_bug.cgi?id=33995
>>>
>>> as far as that portion of code will be called a number of times I think
>>> it would be nice to have a performance metrics for these possible
>>> implementations.
>>> Yury: Where I can implement this perf test?
>>> Søren: in context of timeline implementation it does not necessary to
>>> have the position it the row because we only select the corresponding source
>>> line,
>>> but probably it will be useful for some other use cases.
>>> The only situation when the position is really useful is an obfuscated
>>> code.
>>>
>>>
>>>  <https://bugs.webkit.org/show_bug.cgi?id=33995>
>>> Regards,
>>> Tim.
>>>
>>>
>>>
>>> On Tue, Feb 2, 2010 at 6:55 AM, <[email protected]> wrote:
>>>
>>>> On 2010/02/02 00:41:55, loislo wrote:
>>>>
>>>>> A patch for v8 for extending Timeline panel's functionality.
>>>>>
>>>> Could you upload the patch where this new method is going to be used so
>>>> that
>>>> it's easier to  evaluate whether the new API method is necessary?
>>>>
>>>>
>>>>
>>>> http://codereview.chromium.org/565007
>>>>
>>>
>>>
>>
>

-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to