blob: a0ce47245ed75d6aa9e2a00becd91a32740f045e [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2013 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/tracing/base/quad.html">
<link rel="import" href="/tracing/base/rect.html">
<link rel="import" href="/tracing/model/object_instance.html">
<script>
'use strict';
tr.exportTo('tr.e.cc', function() {
var convertedNameCache = {};
function convertNameToJSConvention(name) {
if (name in convertedNameCache)
return convertedNameCache[name];
if (name[0] == '_' ||
name[name.length - 1] == '_') {
convertedNameCache[name] = name;
return name;
}
var words = name.split('_');
if (words.length == 1) {
convertedNameCache[name] = words[0];
return words[0];
}
for (var i = 1; i < words.length; i++)
words[i] = words[i][0].toUpperCase() + words[i].substring(1);
convertedNameCache[name] = words.join('');
return convertedNameCache[name];
}
function convertObjectFieldNamesToJSConventions(object) {
tr.b.iterObjectFieldsRecursively(
object,
function(object, fieldName, fieldValue) {
delete object[fieldName];
object[newFieldName] = fieldValue;
return newFieldName;
});
}
function convertQuadSuffixedTypesToQuads(object) {
tr.b.iterObjectFieldsRecursively(
object,
function(object, fieldName, fieldValue) {
});
}
function convertObject(object) {
convertObjectFieldNamesToJSConventions(object);
convertQuadSuffixedTypesToQuads(object);
}
function moveRequiredFieldsFromArgsToToplevel(object, fields) {
for (var i = 0; i < fields.length; i++) {
var key = fields[i];
if (object.args[key] === undefined)
throw Error('Expected field ' + key + ' not found in args');
if (object[key] !== undefined)
throw Error('Field ' + key + ' already in object');
object[key] = object.args[key];
delete object.args[key];
}
}
function moveOptionalFieldsFromArgsToToplevel(object, fields) {
for (var i = 0; i < fields.length; i++) {
var key = fields[i];
if (object.args[key] === undefined)
continue;
if (object[key] !== undefined)
throw Error('Field ' + key + ' already in object');
object[key] = object.args[key];
delete object.args[key];
}
}
function preInitializeObject(object) {
preInitializeObjectInner(object.args, false);
}
function preInitializeObjectInner(object, hasRecursed) {
if (!(object instanceof Object))
return;
if (object instanceof Array) {
for (var i = 0; i < object.length; i++)
preInitializeObjectInner(object[i], true);
return;
}
if (hasRecursed &&
(object instanceof tr.model.ObjectSnapshot ||
object instanceof tr.model.ObjectInstance))
return;
for (var key in object) {
var newKey = convertNameToJSConvention(key);
if (newKey != key) {
var value = object[key];
delete object[key];
object[newKey] = value;
key = newKey;
}
// Convert objects with keys ending with Quad to tr.b.Quad type.
if (/Quad$/.test(key) && !(object[key] instanceof tr.b.Quad)) {
var q;
try {
q = tr.b.Quad.from8Array(object[key]);
} catch (e) {
console.log(e);
}
object[key] = q;
continue;
}
// Convert objects with keys ending with Rect to tr.b.Rect type.
if (/Rect$/.test(key) && !(object[key] instanceof tr.b.Rect)) {
var r;
try {
r = tr.b.Rect.fromArray(object[key]);
} catch (e) {
console.log(e);
}
object[key] = r;
}
preInitializeObjectInner(object[key], true);
}
}
return {
preInitializeObject: preInitializeObject,
convertNameToJSConvention: convertNameToJSConvention,
moveRequiredFieldsFromArgsToToplevel: moveRequiredFieldsFromArgsToToplevel,
moveOptionalFieldsFromArgsToToplevel: moveOptionalFieldsFromArgsToToplevel,
};
});
</script>