mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-17 11:05:58 +00:00
113 lines
2.6 KiB
JavaScript
113 lines
2.6 KiB
JavaScript
|
/* profiler window: currently unused */
|
||
|
|
||
|
var profilelist;
|
||
|
|
||
|
var pcdata = {};
|
||
|
var prof_reads, prof_writes;
|
||
|
|
||
|
function scrollProfileView(_ed) {
|
||
|
_ed.on('scroll', function(ed, changeobj) {
|
||
|
if (profilelist) {
|
||
|
profilelist.container.scrollTop = ed.getScrollInfo().top;
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function updateProfileWindow() {
|
||
|
if (profilelist && sourcefile) {
|
||
|
$("#profileview").find('[data-index]').each(function(i,e) {
|
||
|
var div = $(e);
|
||
|
var lineno = div.attr('data-index') | 0;
|
||
|
var newtext = getProfileLine(lineno+1);
|
||
|
if (newtext) {
|
||
|
var oldtext = div.text();
|
||
|
if (oldtext != newtext)
|
||
|
div.text(newtext);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function createProfileWindow() {
|
||
|
profilelist = new VirtualList({
|
||
|
w:$("#emulator").width(),
|
||
|
h:$("#emulator").height(),
|
||
|
itemHeight: getVisibleEditorLineHeight(),
|
||
|
totalRows: getVisibleSourceFile().lineCount(),
|
||
|
generatorFn: function(row) {
|
||
|
var div = document.createElement("div");
|
||
|
div.appendChild(document.createTextNode("."));
|
||
|
return div;
|
||
|
}
|
||
|
});
|
||
|
$("#profileview").empty().append(profilelist.container);
|
||
|
updateProfileWindow();
|
||
|
}
|
||
|
|
||
|
function resetProfiler() {
|
||
|
prof_reads = [];
|
||
|
prof_writes = [];
|
||
|
pcdata = [];
|
||
|
dumplines = null;
|
||
|
}
|
||
|
|
||
|
function profileWindowCallback(a,v) {
|
||
|
if (platform.getPC) {
|
||
|
var pc = platform.getPC();
|
||
|
var pcd = pcdata[pc];
|
||
|
if (!pcd) {
|
||
|
pcd = pcdata[pc] = {nv:1};
|
||
|
}
|
||
|
if (a != pc) {
|
||
|
if (v >= 0) {
|
||
|
pcd.lastwa = a;
|
||
|
pcd.lastwv = v;
|
||
|
} else {
|
||
|
pcd.lastra = a;
|
||
|
pcd.lastrv = platform.readAddress(a);
|
||
|
}
|
||
|
} else {
|
||
|
pcd.nv++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getProfileLine(line) {
|
||
|
var srcfile = getVisibleSourceFile();
|
||
|
var offset = srcfile.line2offset[line];
|
||
|
var offset2 = srcfile.line2offset[line+1];
|
||
|
if (!(offset2 > offset)) offset2 = offset+1;
|
||
|
var s = '';
|
||
|
var nv = 0;
|
||
|
while (offset < offset2) {
|
||
|
var pcd = pcdata[offset];
|
||
|
if (pcd) {
|
||
|
nv += pcd.nv;
|
||
|
if (pcd.lastra >= 0) {
|
||
|
s += " rd [" + hex(pcd.lastra,4) + "] == " + hex(pcd.lastrv,2);
|
||
|
}
|
||
|
if (pcd.lastwa >= 0) {
|
||
|
s += " wr " + hex(pcd.lastwv,2) + " -> [" + hex(pcd.lastwa,4) + "]";
|
||
|
}
|
||
|
}
|
||
|
offset++;
|
||
|
}
|
||
|
return nv ? (lpad(nv+"",8) + s) : '.';
|
||
|
}
|
||
|
|
||
|
function toggleProfileWindow() {
|
||
|
if ($("#memoryview").is(':visible')) toggleMemoryWindow();
|
||
|
if ($("#profileview").is(':visible')) {
|
||
|
profilelist = null;
|
||
|
platform.getProbe().deactivate();
|
||
|
$("#emulator").show();
|
||
|
$("#profileview").hide();
|
||
|
} else {
|
||
|
createProfileWindow();
|
||
|
platform.getProbe().activate(profileWindowCallback);
|
||
|
$("#emulator").hide();
|
||
|
$("#profileview").show();
|
||
|
}
|
||
|
}
|
||
|
|