mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-20 00:20:37 +00:00
Bug 1241249 - Add an SPS pseudo entry for JS stack capturing; r=shu
This commit adds SPS pseudo frame entries for `js::SavedStacks::saveCurrentStack` with the `AutoSPSEntry` RAII class.
This commit is contained in:
parent
5d7b00cf47
commit
22136ee183
@ -27,6 +27,7 @@
|
||||
#include "js/Vector.h"
|
||||
#include "vm/Debugger.h"
|
||||
#include "vm/SavedFrame.h"
|
||||
#include "vm/SPSProfiler.h"
|
||||
#include "vm/StringBuffer.h"
|
||||
#include "vm/Time.h"
|
||||
#include "vm/WrapperObject.h"
|
||||
@ -1010,6 +1011,7 @@ SavedStacks::saveCurrentStack(JSContext* cx, MutableHandleSavedFrame frame, unsi
|
||||
return true;
|
||||
}
|
||||
|
||||
AutoSPSEntry psuedoFrame(cx->runtime(), "js::SavedStacks::saveCurrentStack");
|
||||
FrameIter iter(cx, FrameIter::ALL_CONTEXTS, FrameIter::GO_THROUGH_SAVED);
|
||||
return insertFrames(cx, iter, frame, maxFrameCount);
|
||||
}
|
||||
|
69
tools/profiler/tests/test_saved_stacks.js
Normal file
69
tools/profiler/tests/test_saved_stacks.js
Normal file
@ -0,0 +1,69 @@
|
||||
// Test that we get `js::SavedStacks::saveCurrentStack` frames.
|
||||
|
||||
function run_test() {
|
||||
let p = Cc["@mozilla.org/tools/profiler;1"];
|
||||
// Just skip the test if the profiler component isn't present.
|
||||
if (!p)
|
||||
return;
|
||||
p = p.getService(Ci.nsIProfiler);
|
||||
if (!p)
|
||||
return;
|
||||
|
||||
const { saveStack } = Cu.getJSTestingFunctions();
|
||||
|
||||
const ms = 5;
|
||||
p.StartProfiler(100, ms, ["js"], 1);
|
||||
|
||||
let then = Date.now();
|
||||
while (Date.now() - then < 30000) {
|
||||
function a() {
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
saveStack();
|
||||
}
|
||||
|
||||
a();
|
||||
a();
|
||||
a();
|
||||
a();
|
||||
a();
|
||||
|
||||
function b() {
|
||||
a();
|
||||
}
|
||||
|
||||
b();
|
||||
b();
|
||||
b();
|
||||
b();
|
||||
b();
|
||||
}
|
||||
|
||||
var profile = p.getProfileData().threads[0];
|
||||
|
||||
do_check_neq(profile.samples.data.length, 0);
|
||||
|
||||
let found = false;
|
||||
for (let sample of profile.samples.data) {
|
||||
const stack = getInflatedStackLocations(profile, sample);
|
||||
for (let frame of stack) {
|
||||
if (frame.indexOf("js::SavedStacks::saveCurrentStack") >= 0) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
do_check_true(found);
|
||||
|
||||
p.StopProfiler();
|
||||
}
|
@ -16,3 +16,4 @@ skip-if = !debug
|
||||
[test_enterjit_osr_enabling.js]
|
||||
skip-if = !debug
|
||||
[test_asm.js]
|
||||
[test_saved_stacks.js]
|
||||
|
Loading…
x
Reference in New Issue
Block a user