I am trying to collect function execution data using the CpuProfiler class.

I ran the following test (taken from here 
https://github.com/v8/v8/blob/master/test/cctest/test-cpu-profiler.cc#L677):

const char* src =
    "function loop(timeout) {\n" 
    "  this.mmm = 0;\n" 
    "  var start = Date.now();\n" 
    "  do {\n" 
    "    var n = 1000;\n" 
    "    while(n > 1) {\n" 
    "      n--;\n" 
    "      this.mmm += n * n * n;\n" 
    "    }\n" 
    "  } while (Date.now() - start < timeout);\n" 
    "}\n" 
    "function delay() { loop(10); }\n" 
    "function bar() { delay(); }\n" 
    "function baz() { delay(); }\n" 
    "function foo() {\n" 
    "  delay();\n" 
    "  bar();\n" 
    "  delay();\n" 
    "  baz();\n" 
    "}\n" 
    "function start(duration) {\n" 
    "  var start = Date.now();\n" 
    "  do {\n" 
    "    foo();\n" 
    "  } while (Date.now() - start < duration);\n" 
    "}\n"; 

Script::Compile(context, v8::String::NewFromUtf8(isolate, src).
ToLocalChecked()).ToLocalChecked()->Run(context).ToLocalChecked(); 
Local<v8::Function> startFunc = context->Global()->Get(context, v8::String::
NewFromUtf8(isolate, "start").ToLocalChecked()).ToLocalChecked().As<v8::
Function>(); 

Local<v8::String> title = v8::String::NewFromUtf8(isolate, "my_trace").
ToLocalChecked(); 
CpuProfiler* profiler = CpuProfiler::New(isolate); 
profiler->StartProfiling(title, false); 

Local<Value> result; 
Local<Value> args[] = { Number::New(isolate, 200) }; 
assert(startFunc->Call(context, context->Global(), 1, args).ToLocal(&result
)); 

const CpuProfile* profile = profiler->StopProfiling(title); 
const CpuProfileNode* root = profile->GetTopDownRoot(); 
int count = root->GetChildrenCount(); 
for (int i = 0; i < count; ++i) { 
    const CpuProfileNode* child = root->GetChild(i); 
    v8::String::Utf8Value str(isolate, child->GetFunctionName()); 
    const char* funcName = *str; 
    printf("%s\n", funcName); 
}



The root CpuProfileNode contains only a single child element called 
"(program)".

If I execute the same code on Android, I correctly get the following child 
functions: "(program)", "start" and "(garbage collector)".

Do you have any idea what might be wrong with the CpuProfiler class in v8 
in jitless mode? Is CpuProfiler the correct class to use to collect 
function execution times or is there some newer method?

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/798f9464-88a1-464f-8fb8-6aa223ce5e57%40googlegroups.com.

Reply via email to