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:
Nick Fitzgerald 2016-01-20 11:32:00 +01:00
Родитель 5d7b00cf47
Коммит 22136ee183
3 изменённых файлов: 72 добавлений и 0 удалений

Просмотреть файл

@ -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);
}

Просмотреть файл

@ -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]