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 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
12 <script src="/components/platform/platform.js"></script>
14 <link rel="import" href="/components/polymer/polymer.html">
15 <link rel="import" href="/cc/picture.html">
16 <link rel="import" href="/cc/picture_debugger.html">
18 <script src="string_convert.js"></script>
20 picture-ops-list-view {
28 <select id="skp_file"></select>
31 <div class="view"></div>
37 function getPicture(skp64) {
38 if (!cc.PictureSnapshot.CanGetInfo()) {
39 console.error(cc.PictureSnapshot.HowToEnablePictureDebugging());
41 var infoBar = new tv.ui.InfoBar();
42 var view = document.querySelector('.view');
44 view.removeChild(debuggerEl);
45 debuggerEl = undefined;
47 view.appendChild(infoBar);
49 infoBar.message = cc.PictureSnapshot.HowToEnablePictureDebugging();
50 infoBar.visible = true;
54 var size = chrome.skiaBenchmarking.getInfo(skp64);
55 if (size === undefined)
56 throw new Error('Unable to get picture information');
58 return new cc.Picture(skp64,
59 tv.Rect.fromXYWH(0, 0, size.width, size.height),
60 tv.Rect.fromXYWH(0, 0, size.width, size.height));
63 function utf8_to_b64( str ) {
64 return window.btoa(unescape(encodeURIComponent( str )));
67 function loadSkp(filename, onSkpLoaded) {
68 getAsync(filename, function(arr) {
69 var view = new Uint8Array(arr);
70 var data = base64EncArr(view, 1);
71 onSkpLoaded(filename, data);
74 function YloadSkp(filename, onSkpLoaded) {
75 getAsync(filename, function(data) {
76 var data64 = utf8_to_b64(data);
77 onSkpLoaded(filename, data64);
81 function getAsync(url, callback, opt_responseType) {
82 var req = new XMLHttpRequest();
84 req.responseType = opt_responseType;
85 req.open('GET', url, true);
86 req.onreadystatechange = function(aEvt) {
87 if (req.readyState === 4) {
88 window.setTimeout(function() {
89 if (req.status === 200) {
90 if (opt_responseType === undefined)
91 callback(req.responseText);
93 callback(req.response);
95 console.log('Failed to load ' + url);
103 function createViewFromSkp(filename, skp) {
104 var p = getPicture(skp);
107 debuggerEl.picture = p;
110 function onSelectionChange() {
111 var select = document.querySelector('#skp_file');
112 window.location.hash = '#' + select[select.selectedIndex].value;
115 function onHashChange() {
116 var file = window.location.hash.substr(1);
117 var select = document.querySelector('#skp_file');
118 if (select[select.selectedIndex].value != file) {
119 for (var i = 0; i < select.children.length; i++) {
120 if (select.children[i].value == file) {
121 select.selectedIndex = i;
129 function cleanFilename(file) {
130 function upcase(letter) {
131 return ' ' + letter.toUpperCase();
133 return file.replace(/_/g, ' ')
134 .replace(/\.[^\.]*$/, '')
135 .replace(/ ([a-z])/g, upcase)
136 .replace(/^[a-z]/, upcase);
140 var file = window.location.hash.substr(1);
141 var filename = '/skp_data/' + file;
142 loadSkp(filename, createViewFromSkp);
146 debuggerEl = new cc.PictureDebugger()
147 document.querySelector('.view').appendChild(debuggerEl);
149 getAsync('/json/examples/skp', function(data) {
150 var select = document.querySelector('#skp_file');
151 var files = JSON.parse(data);
153 for (var i = 0; i < files.length; ++i) {
154 var opt = document.createElement('option');
155 opt.value = files[i];
156 opt.textContent = cleanFilename(files[i]);
157 select.appendChild(opt);
159 select.selectedIndex = 0;
160 select.onchange = onSelectionChange;
162 if (!window.location.hash) {
163 // This will trigger an onHashChange so no need to reload directly.
164 window.location.hash = '#' + select[select.selectedIndex].value;
171 window.addEventListener('hashchange', onHashChange);
172 window.addEventListener('load', onLoad);