1cb93a386Sopenharmony_ci// The increased timeout is especially needed with larger binaries 2cb93a386Sopenharmony_ci// like in the debug/gpu build 3cb93a386Sopenharmony_cijasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; 4cb93a386Sopenharmony_ci 5cb93a386Sopenharmony_cidescribe('Debugger\'s Playback Behavior', function() { 6cb93a386Sopenharmony_ci const container = document.createElement('div'); 7cb93a386Sopenharmony_ci document.body.appendChild(container); 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ci beforeEach(function() { 10cb93a386Sopenharmony_ci container.innerHTML = `<canvas id=debugger_view width=720 height=1280></canvas>`; 11cb93a386Sopenharmony_ci }); 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci afterEach(function() { 14cb93a386Sopenharmony_ci container.innerHTML = ''; 15cb93a386Sopenharmony_ci }); 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci it('can switch to the second frame of an animated skp', function(done) { 18cb93a386Sopenharmony_ci const filename = '/debugger/anim.mskp' 19cb93a386Sopenharmony_ci const fetchSkpPromise = fetch(filename); 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ci Promise.all([LoadDebugger, fetchSkpPromise]).then((values) => { 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_ci const response = values[1]; 24cb93a386Sopenharmony_ci if (!response.ok) { 25cb93a386Sopenharmony_ci throw new Error("HTTP error, status = " + response.status); 26cb93a386Sopenharmony_ci } 27cb93a386Sopenharmony_ci response.arrayBuffer().then((buffer) => { 28cb93a386Sopenharmony_ci catchException(done, () => { 29cb93a386Sopenharmony_ci const canvasElement = document.getElementById('debugger_view'); 30cb93a386Sopenharmony_ci const fileContents = new Uint8Array(buffer); 31cb93a386Sopenharmony_ci console.log('fetched '+filename); 32cb93a386Sopenharmony_ci const player = Debugger.SkpFilePlayer(fileContents); 33cb93a386Sopenharmony_ci const bounds = player.getBounds(); 34cb93a386Sopenharmony_ci canvasElement.width = bounds.fRight - bounds.fLeft; 35cb93a386Sopenharmony_ci canvasElement.height = bounds.fBottom - bounds.fTop; 36cb93a386Sopenharmony_ci expect(canvasElement.width).toBe(1080); 37cb93a386Sopenharmony_ci expect(canvasElement.height).toBe(1920); 38cb93a386Sopenharmony_ci const surface = Debugger.MakeWebGLCanvasSurface(canvasElement); 39cb93a386Sopenharmony_ci expect(surface).toBeTruthy(); 40cb93a386Sopenharmony_ci const numFrames = player.getFrameCount(); 41cb93a386Sopenharmony_ci expect(numFrames).toBe(10); 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci let cmd = JSON.parse(player.jsonCommandList(surface)); 44cb93a386Sopenharmony_ci expect(cmd).toBeTruthy(); 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci // Move to last command in first frame 47cb93a386Sopenharmony_ci player.drawTo(surface, cmd.commands.length); 48cb93a386Sopenharmony_ci surface.flush(); 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci // Move to frame two 51cb93a386Sopenharmony_ci player.changeFrame(1); 52cb93a386Sopenharmony_ci cmd = JSON.parse(player.jsonCommandList(surface)); 53cb93a386Sopenharmony_ci expect(cmd).toBeTruthy(); 54cb93a386Sopenharmony_ci // move to command 100 in frame 2 55cb93a386Sopenharmony_ci player.drawTo(surface, 100); 56cb93a386Sopenharmony_ci surface.flush(); 57cb93a386Sopenharmony_ci 58cb93a386Sopenharmony_ci console.log('drew picture to canvas element'); 59cb93a386Sopenharmony_ci surface.dispose(); 60cb93a386Sopenharmony_ci done(); 61cb93a386Sopenharmony_ci })(); 62cb93a386Sopenharmony_ci }); 63cb93a386Sopenharmony_ci }); 64cb93a386Sopenharmony_ci }); 65cb93a386Sopenharmony_ci}); 66