957bf97414
Bug: skia:9524 Change-Id: I8268d1652f55516e009e3cf68b3322f37aa08933 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/247636 Reviewed-by: Nathaniel Nifong <nifong@google.com>
148 lines
5.2 KiB
HTML
148 lines
5.2 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Debugger Demo</title>
|
|
<script src="bin/debugger.js"></script>
|
|
<script>
|
|
let index = 0;
|
|
let surface;
|
|
|
|
DebuggerInit({
|
|
locateFile: (file) => '/node_modules/debugger/bin/'+file,
|
|
}).ready().then((Debugger) => {
|
|
const player = new Debugger.SkpDebugPlayer();
|
|
|
|
// Define an event handler for the file input dialog
|
|
function readSkpFile(e){
|
|
// Did the change event result in the file-input element specifing a file? (user might have cancelled the dialog)
|
|
const file = e.target.files[0];
|
|
if (!file) {
|
|
return;
|
|
}
|
|
// create a callback for when the file finishes being read.
|
|
const reader = new FileReader();
|
|
reader.onload = function(e) {
|
|
// Convert e.target.result (an ArrayBuffer) into a typedarray,
|
|
// otherwise fileMem.set() below seems to have no effect.
|
|
const fileContents = new Uint8Array(e.target.result);
|
|
const size = fileContents.byteLength;
|
|
// Allocate memory in wasm to hold the skp file selected by the user.
|
|
const fileMemPtr = Debugger._malloc(size);
|
|
// Make a typed array view of that memory
|
|
let fileMem = new Uint8Array(Debugger.HEAPU8.buffer, fileMemPtr, size);
|
|
// Copy the file into it
|
|
fileMem.set(fileContents);
|
|
// Hand off pointer to wasm
|
|
player.loadSkp(fileMemPtr, size);
|
|
// From the loaded commands, Debugger now knows the bounds.
|
|
let bounds = player.getBounds();
|
|
// Resize our canvas to match
|
|
canvas = document.getElementById('debugger_view');
|
|
canvas.width = bounds.fRight - bounds.fLeft;
|
|
canvas.height = bounds.fBottom - bounds.fTop;
|
|
//Assume GPU selected initially
|
|
surface = Debugger.MakeWebGLCanvasSurface(canvas);
|
|
|
|
document.getElementById('command-count').innerHTML = player.getSize();
|
|
player.setClipVizColor(0);
|
|
};
|
|
reader.readAsArrayBuffer(file);
|
|
}
|
|
|
|
function playFile() {
|
|
interval = parseFloat(document.getElementById('interval').value);
|
|
let intervalID = setInterval(function() {
|
|
if (index < 789){
|
|
player.drawTo(surface, index);
|
|
surface.flush();
|
|
index++;
|
|
}
|
|
}, interval);
|
|
}
|
|
|
|
// Discard canvas when switching between cpu/gpu backend because it's bound to a context.
|
|
function replaceCanvas() {
|
|
canvas = document.getElementById('debugger_view');
|
|
let newCanvas = canvas.cloneNode(true);
|
|
let parent = canvas.parentNode;
|
|
parent.replaceChild(newCanvas, canvas);
|
|
}
|
|
|
|
document.getElementById('file-input')
|
|
.addEventListener('change', readSkpFile);
|
|
|
|
document.getElementById('play_button')
|
|
.addEventListener('click', playFile);
|
|
|
|
document.getElementById('overdraw')
|
|
.addEventListener('change', function(e) {
|
|
player.setOverdrawVis(e.target.checked);
|
|
});
|
|
|
|
document.getElementById('gpu_op_bounds')
|
|
.addEventListener('change', function(e) {
|
|
player.setGpuOpBounds(e.target.checked);
|
|
});
|
|
|
|
document.getElementById('clip_viz_color')
|
|
.addEventListener('change', function(e) {
|
|
// Remove the '#' from the hex color string.
|
|
// prepend an alpha value (0x50 or about 30%)
|
|
// then convert to an integer.
|
|
colorInt = parseInt("50"+e.target.value.substring(1),16);
|
|
player.setClipVizColor(colorInt);
|
|
});
|
|
|
|
document.getElementById('disable_clip_viz')
|
|
.addEventListener('click', function(e) {
|
|
// Setting the clip viz to transparent black makes it invisible.
|
|
player.setClipVizColor(0);
|
|
});
|
|
|
|
document.getElementById('get_json_command_list')
|
|
.addEventListener('click', function(e) {
|
|
result = player.jsonCommandList(surface);
|
|
console.log('getjsoncommandlist result '+result.substring(0,100)+'...');
|
|
commands = JSON.parse(result);
|
|
console.log('parsed json');
|
|
});
|
|
|
|
document.getElementById('backend_gpu')
|
|
.addEventListener('change', function(e) {
|
|
if (e.target.checked) {
|
|
replaceCanvas();
|
|
surface = Debugger.MakeWebGLCanvasSurface(document.getElementById('debugger_view'));
|
|
}
|
|
});
|
|
|
|
document.getElementById('backend_cpu')
|
|
.addEventListener('change', function(e) {
|
|
if (e.target.checked) {
|
|
replaceCanvas();
|
|
surface = Debugger.MakeSWCanvasSurface(document.getElementById('debugger_view'));
|
|
}
|
|
});
|
|
|
|
});
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<canvas id=debugger_view width=400 height=400></canvas>
|
|
<div style="float:right">
|
|
<input type="radio" name="backend" value="CPU" id="backend_cpu"> CPU
|
|
<input type="radio" name="backend" value="WebGL" id="backend_gpu" checked> WebGL<br>
|
|
<input type="file" id="file-input" /> | <span id="command-count">0</span> commands<br>
|
|
<input type="button" id="play_button" value="Play" />
|
|
command interval in ms
|
|
<input type="text" id="interval" value="20" /><br>
|
|
<input type="checkbox" id="overdraw" /> Overdraw vis<br>
|
|
<input type="checkbox" id="gpu_op_bounds" /> GPU Op bounds<br>
|
|
<input type="color" id="clip_viz_color" />Clip visualization color
|
|
<input type="button" id="disable_clip_viz" value="Disable" /><br>
|
|
<input type="button" id="get_json_command_list" value="Get JSON Command List" /><br>
|
|
<div>
|
|
<div style="float:clear"></div>
|
|
</body>
|
|
</html>
|