mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-07-07 10:29:03 +00:00
141 lines
3.4 KiB
JavaScript
141 lines
3.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Tests if the performance tool can import profiler data when Profiler is v2
|
|
* and requires deflating, and has an extra thread that's a string. Not sure
|
|
* what causes this.
|
|
*/
|
|
var STRINGED_THREAD = (function () {
|
|
let thread = {};
|
|
|
|
thread.libs = [{
|
|
start: 123,
|
|
end: 456,
|
|
offset: 0,
|
|
name: "",
|
|
breakpadId: ""
|
|
}];
|
|
thread.meta = { version: 2, interval: 1, stackwalk: 0, processType: 1, startTime: 0 };
|
|
thread.threads = [{
|
|
name: "Plugin",
|
|
tid: 4197,
|
|
samples: [],
|
|
markers: [],
|
|
}];
|
|
|
|
return JSON.stringify(thread);
|
|
})();
|
|
|
|
var PROFILER_DATA = (function () {
|
|
let data = {};
|
|
let threads = data.threads = [];
|
|
let thread = {};
|
|
threads.push(thread);
|
|
threads.push(STRINGED_THREAD);
|
|
thread.name = "Content";
|
|
thread.samples = [{
|
|
time: 5,
|
|
frames: [
|
|
{ location: "(root)" },
|
|
{ location: "A" },
|
|
{ location: "B" },
|
|
{ location: "C" }
|
|
]
|
|
}, {
|
|
time: 5 + 6,
|
|
frames: [
|
|
{ location: "(root)" },
|
|
{ location: "A" },
|
|
{ location: "B" },
|
|
{ location: "D" }
|
|
]
|
|
}, {
|
|
time: 5 + 6 + 7,
|
|
frames: [
|
|
{ location: "(root)" },
|
|
{ location: "A" },
|
|
{ location: "E" },
|
|
{ location: "F" }
|
|
]
|
|
}, {
|
|
time: 20,
|
|
frames: [
|
|
{ location: "(root)" },
|
|
{ location: "A" },
|
|
{ location: "B" },
|
|
{ location: "C" },
|
|
{ location: "D" },
|
|
{ location: "E" },
|
|
{ location: "F" },
|
|
{ location: "G" }
|
|
]
|
|
}];
|
|
|
|
// Handled in other deflating tests
|
|
thread.markers = [];
|
|
|
|
let meta = data.meta = {};
|
|
meta.version = 2;
|
|
meta.interval = 1;
|
|
meta.stackwalk = 0;
|
|
meta.product = "Firefox";
|
|
return data;
|
|
})();
|
|
|
|
var test = Task.async(function*() {
|
|
let { target, panel, toolbox } = yield initPerformance(SIMPLE_URL);
|
|
let { $, EVENTS, PerformanceController, DetailsView, JsCallTreeView } = panel.panelWin;
|
|
|
|
let profilerData = {
|
|
profile: PROFILER_DATA,
|
|
duration: 10000,
|
|
configuration: {},
|
|
fileType: "Recorded Performance Data",
|
|
version: 2
|
|
};
|
|
|
|
let file = FileUtils.getFile("TmpD", ["tmpprofile.json"]);
|
|
file.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, parseInt("666", 8));
|
|
yield asyncCopy(profilerData, file);
|
|
|
|
// Import recording.
|
|
|
|
let calltreeRendered = once(JsCallTreeView, EVENTS.JS_CALL_TREE_RENDERED);
|
|
let imported = once(PerformanceController, EVENTS.RECORDING_IMPORTED);
|
|
yield PerformanceController.importRecording("", file);
|
|
|
|
yield imported;
|
|
ok(true, "The profiler data appears to have been successfully imported.");
|
|
|
|
yield calltreeRendered;
|
|
ok(true, "The imported data was re-rendered.");
|
|
|
|
yield teardown(panel);
|
|
finish();
|
|
});
|
|
|
|
function getUnicodeConverter() {
|
|
let className = "@mozilla.org/intl/scriptableunicodeconverter";
|
|
let converter = Cc[className].createInstance(Ci.nsIScriptableUnicodeConverter);
|
|
converter.charset = "UTF-8";
|
|
return converter;
|
|
}
|
|
|
|
function asyncCopy(data, file) {
|
|
let deferred = Promise.defer();
|
|
|
|
let string = JSON.stringify(data);
|
|
let inputStream = getUnicodeConverter().convertToInputStream(string);
|
|
let outputStream = FileUtils.openSafeFileOutputStream(file);
|
|
|
|
NetUtil.asyncCopy(inputStream, outputStream, status => {
|
|
if (!Components.isSuccessCode(status)) {
|
|
deferred.reject(new Error("Could not save data to file."));
|
|
}
|
|
deferred.resolve();
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|