Open Bug 1391782 Opened 7 years ago Updated 2 years ago

Not enough JavaScript frames in some call stacks

Categories

(Core :: Gecko Profiler, defect, P3)

defect

Tracking

()

Tracking Status
firefox57 --- affected

People

(Reporter: mstange, Unassigned)

References

(Blocks 1 open bug)

Details

If you drag a tab, something calls getImageData on a canvas. The stack in the profiler looks like this: > [...] > mozilla::dom::CanvasRenderingContext2D::GetImageDataArray(JSContext*, int, int, unsigned int, unsigned int, JSObject**) > mozilla::dom::CanvasRenderingContext2D::GetImageData(JSContext*, double, double, double, double, mozilla::ErrorResult&) > mozilla::dom::CanvasRenderingContext2DBinding::getImageData(JSContext*, JS::Handle<JSObject*>, mozilla::dom::CanvasRenderingContext2D*, JSJitMethodCallArgs const&) > mozilla::dom::GenericBindingMethod(JSContext*, unsigned int, JS::Value*) > js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) > <name omitted> > js::ForwardingProxyHandler::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) const > js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) const > js::Proxy::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) > js::proxy_Call(JSContext*, unsigned int, JS::Value*) > js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) > Interpret(JSContext*, js::RunState&) > js::RunScript(JSContext*, js::RunState&) > JS -> next > js::RunScript > js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) > <name omitted> > js::CallSelfHostedFunction(JSContext*, JS::Handle<js::PropertyName*>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>) > AsyncFunctionResume(JSContext*, JS::Handle<js::PromiseObject*>, JS::Handle<JS::Value>, ResumeKind, JS::Handle<JS::Value>) > PromiseReactionJob(JSContext*, unsigned int, JS::Value*) > js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) > <name omitted> > JS::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) > mozilla::dom::PromiseJobCallback::Call(JSContext*, JS::Handle<JS::Value>, mozilla::ErrorResult&) > mozilla::PromiseJobRunnable::Run() > mozilla::dom::Promise::PerformMicroTaskCheckpoint() > mozilla::CycleCollectedJSContext::AfterProcessTask(unsigned int) > XPCJSContext::AfterProcessTask(unsigned int) > nsThread::ProcessNextEvent(bool, bool*) > [...] This stack contains lots of C++ functions, a few pseudo frames, and one (1) JS frame. The JS frame is for the self-hosted "next" function. There are at least two JS functions missing in this call stack: The one that calls next, and the one that calls getImageData. It looks like it would be the JS interpreter's job to push pseudo frames for these functions, and it doesn't do it.
Priority: -- → P3
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.