4 Copyright (c) 2013 The Chromium Authors. All rights reserved.
5 Use of this source code is governed by a BSD-style license that can be
6 found in the LICENSE file.
9 <title>Skia Debugger</title>
10 <script src="/tvcm/__init__.js"></script>
11 <script src="string_convert.js"></script>
13 picture-ops-list-view {
21 <select id="skp_file"></select>
24 <div class="view"></div>
27 tvcm.require('cc.picture');
28 tvcm.require('cc.picture_debugger');
35 function getPicture(skp64) {
36 if (!cc.PictureSnapshot.CanGetInfo()) {
37 console.error(cc.PictureSnapshot.HowToEnablePictureDebugging());
39 var infoBar = new tvcm.ui.InfoBar();
40 var view = document.querySelector('.view');
42 view.removeChild(debuggerEl);
43 debuggerEl = undefined;
45 view.appendChild(infoBar);
47 infoBar.message = cc.PictureSnapshot.HowToEnablePictureDebugging();
48 infoBar.visible = true;
52 var size = chrome.skiaBenchmarking.getInfo(skp64);
53 if (size === undefined)
54 throw new Error('Unable to get picture information');
56 return new cc.Picture(skp64,
57 tvcm.Rect.fromXYWH(0, 0, size.width, size.height),
58 tvcm.Rect.fromXYWH(0, 0, size.width, size.height));
61 function utf8_to_b64( str ) {
62 return window.btoa(unescape(encodeURIComponent( str )));
65 function loadSkp(filename, onSkpLoaded) {
66 getAsync(filename, function(arr) {
67 var view = new Uint8Array(arr);
68 var data = base64EncArr(view, 1);
69 onSkpLoaded(filename, data);
72 function YloadSkp(filename, onSkpLoaded) {
73 getAsync(filename, function(data) {
74 var data64 = utf8_to_b64(data);
75 onSkpLoaded(filename, data64);
79 function getAsync(url, callback, opt_responseType) {
80 var req = new XMLHttpRequest();
82 req.responseType = opt_responseType;
83 req.open('GET', url, true);
84 req.onreadystatechange = function(aEvt) {
85 if (req.readyState === 4) {
86 window.setTimeout(function() {
87 if (req.status === 200) {
88 if (opt_responseType === undefined)
89 callback(req.responseText);
91 callback(req.response);
93 console.log('Failed to load ' + url);
101 function createViewFromSkp(filename, skp) {
102 var p = getPicture(skp);
105 debuggerEl.picture = p;
108 function onSelectionChange() {
109 var select = document.querySelector('#skp_file');
110 window.location.hash = '#' + select[select.selectedIndex].value;
113 function onHashChange() {
114 var file = window.location.hash.substr(1);
115 var select = document.querySelector('#skp_file');
116 if (select[select.selectedIndex].value != file) {
117 for (var i = 0; i < select.children.length; i++) {
118 if (select.children[i].value == file) {
119 select.selectedIndex = i;
127 function cleanFilename(file) {
128 function upcase(letter) {
129 return ' ' + letter.toUpperCase();
131 return file.replace(/_/g, ' ')
132 .replace(/\.[^\.]*$/, '')
133 .replace(/ ([a-z])/g, upcase)
134 .replace(/^[a-z]/, upcase);
138 var file = window.location.hash.substr(1);
139 var filename = '/skp_data/' + file;
140 loadSkp(filename, createViewFromSkp);
144 debuggerEl = new cc.PictureDebugger()
145 document.querySelector('.view').appendChild(debuggerEl);
147 getAsync('/json/examples/skp', function(data) {
148 var select = document.querySelector('#skp_file');
149 var files = JSON.parse(data);
151 for (var i = 0; i < files.length; ++i) {
152 var opt = document.createElement('option');
153 opt.value = files[i];
154 opt.textContent = cleanFilename(files[i]);
155 select.appendChild(opt);
157 select.selectedIndex = 0;
158 select.onchange = onSelectionChange;
160 if (!window.location.hash) {
161 // This will trigger an onHashChange so no need to reload directly.
162 window.location.hash = '#' + select[select.selectedIndex].value;
169 window.addEventListener('hashchange', onHashChange);
170 window.addEventListener('load', onLoad);