Bug 1298541: Tracelogger: Part 4: Enable jit-tests/tests/tracelogger/drainTraceLogger.js again, r=bbouvier

This commit is contained in:
Hannes Verschore 2016-09-02 18:19:27 +02:00
parent 12fecc2922
commit 78bda3423e
4 changed files with 41 additions and 26 deletions

View File

@ -2,7 +2,7 @@ function TestDrainTraceLoggerInvariants(obj) {
var scripts = 0;
var stops = 0;
for (var i = 0; i < objs.length; i++) {
if (objs[i].logType == "Scripts") {
if (objs[i].logType == "Script") {
scripts++;
assertEq("fileName" in objs[i], true);
assertEq("lineNumber" in objs[i], true);
@ -13,11 +13,13 @@ function TestDrainTraceLoggerInvariants(obj) {
assertEq(true, false);
}
}
assertEq(scripts, stops);
assertEq(scripts, stops + 1);
// "+ 1" because we get a start for drainTraceLogger.js:1, but not the stop.
}
function GetMaxScriptDepth(obj) {
var max_depth = 0;
var depth = 0;
for (var i = 0; i < objs.length; i++) {
if (objs[i].logType == "Stop")
depth--;
@ -38,42 +40,39 @@ function foo2() {
}
var du = new Debugger();
if (typeof du.drainTraceLoggerTraces == "function") {
print(1);
if (typeof du.drainTraceLoggerScriptCalls == "function") {
// Test normal setup.
du = new Debugger();
du.setupTraceLoggerForTraces();
du.setupTraceLoggerScriptCalls();
du.startTraceLogger();
du.endTraceLogger();
var objs = du.drainTraceLoggerTraces();
var objs = du.drainTraceLoggerScriptCalls();
TestDrainTraceLoggerInvariants(objs);
var empty_depth = GetMaxScriptDepth(objs);
var empty_length = objs.length;
// Test basic script.
for (var i=0; i<20; i++)
foo1();
du = new Debugger();
du.setupTraceLoggerTraces();
du.setupTraceLoggerScriptCalls();
du.startTraceLogger();
foo1();
du.endTraceLogger();
var objs = du.drainTraceLoggerTraces();
var objs = du.drainTraceLoggerScriptCalls();
TestDrainTraceLoggerInvariants(objs);
assertEq(empty_depth + 2 == GetMaxScriptDepth(objs));
assertEq(empty_length + 4 == GetMaxScriptDepth(objs));
assertEq(3, GetMaxScriptDepth(objs), "drainTraceLogger.js:0 + foo1 + foo2");
assertEq(5, objs.length, "drainTraceLogger.js:0 + foo1 + foo2 + stop + stop");
// Test basic script.
for (var i=0; i<20; i++)
foo1();
du = new Debugger();
du.setupTraceLoggerForTraces();
du.setupTraceLoggerScriptCalls();
du.startTraceLogger();
for (var i=0; i<100; i++) {
@ -81,8 +80,9 @@ print(1);
}
du.endTraceLogger();
var objs = du.drainTraceLoggerTraces();
var objs = du.drainTraceLoggerScriptCalls();
TestDrainTraceLoggerInvariants(objs);
assertEq(empty_depth + 2 == GetMaxScriptDepth(objs));
assertEq(empty_length + 4*100 == GetMaxScriptDepth(objs));
assertEq(3, GetMaxScriptDepth(objs), "drainTraceLogger.js:0 + foo1 + foo2");
assertEq(4*100 + 1, objs.length);
assertEq(1 + 4*100, objs.length, "drainTraceLogger.js:0 + 4 * ( foo1 + foo2 + stop + stop )");
}

View File

@ -650,6 +650,17 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg)
JS_INIT_CLIST(&breakpoints);
JS_INIT_CLIST(&onNewGlobalObjectWatchersLink);
#ifdef JS_TRACE_LOGGING
TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime());
if (logger) {
#ifdef NIGHTLY_BUILD
logger->getIterationAndSize(&traceLoggerLastDrainedIteration, &traceLoggerLastDrainedSize);
#endif
logger->getIterationAndSize(&traceLoggerScriptedCallsLastDrainedIteration,
&traceLoggerScriptedCallsLastDrainedSize);
}
#endif
}
Debugger::~Debugger()

View File

@ -228,11 +228,15 @@ class TraceLoggerThread
start = events.data();
}
*lastIteration = iteration_;
*lastSize = events.size();
getIterationAndSize(lastIteration, lastSize);
return start;
}
void getIterationAndSize(uint32_t* iteration, uint32_t* size) const {
*iteration = iteration_;
*size = events.size();
}
// Extract the details filename, lineNumber and columnNumber out of a event
// containing script information.
void extractScriptDetails(uint32_t textId, const char** filename, size_t* filename_len,

View File

@ -178,19 +178,19 @@ class ContinuousSpace {
return data_;
}
uint32_t capacity() {
uint32_t capacity() const {
return capacity_;
}
uint32_t size() {
uint32_t size() const {
return size_;
}
bool empty() {
bool empty() const {
return size_ == 0;
}
uint32_t lastEntryId() {
uint32_t lastEntryId() const {
MOZ_ASSERT(!empty());
return size_ - 1;
}