On 12-09-19 5:08 PM, Steve Fink wrote:
On 09/19/2012 06:33 AM, Ehsan Akhgari wrote:
On 12-09-19 1:01 AM, L. David Baron wrote:
On Wednesday 2012-09-19 00:04 -0400, Ehsan Akhgari wrote:
A while ago (I think more than a couple of years ago now), Vlad
implemented FunctionTimer which is a facility to time how much each
function exactly takes to run.  Then, I went ahead and instrumented
a whole bunch of code which was triggered throughout our startup
path to get a sense of what things are expensive there and what we
can do about that.  That code is hidden behind the NS_FUNCTION_TIMER
build-time flag, turned on by passing --enable-functiontimer.

Is any of the instrumentation worth turning into instrumentation for
the new profiler (SAMPLE_LABEL_* macros)?

I can go through the list and file bugs if I find anything
particularly useful.

Otherwise sounds fine to me (though there could be somebody using it
who wants it to stay).

I just confirmed that at least, nsGlobalWindow.cpp will not build with
--enable-functiontimer, and the fact that nobody has complained about
that before is a strong indication that nobody is using this code.

I was still building with this relatively recently, though I haven't
actually used it in at least a year and it's possible all of those
builds were JS shell-only which wouldn't be affected. I had my own UI
that used the functiontimer output, but I never bothered landing it and
now that we have JS call information in the profiler, there's no reason
to make any attempt to keep it alive.

Yeah I don't think js shell builds would be affected. And let's use the past tense to refer to FunctionTimer from now on! It is dead on inbound. :-)

At a theoretical level, instrumentation like functiontimer enables
things that sampling cannot. For example, you can accurately count
memory allocated within the activation of a function call (or other
metrics like cache misses, branch mispredicts, context switches, etc.).
But the new profiler uses both sampling and instrumentation (the latter
via SAMPLE_LABEL_*? I don't know the details.) I suspect I'm not saying
anything that everyone doesn't already know.

The sample labels will not provide instrumenting profiling. What happens is that the sample labels build up a stack, and every time that we pause the target thread when taking a sample, we walk that pseudo stack and record it. This is what we use on platforms that we cannot currently unwind the C++ stack, including mobile/b2g and aurora/beta/release (where we don't build with frame pointers), and should be mostly thought of as a replacement or addition to the native stack.

Cheers,
Ehsan

_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to