1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 tvcm.require('tvcm.quad');
8 tvcm.require('tvcm.rect');
9 tvcm.require('tracing.trace_model.object_instance');
11 tvcm.exportTo('cc', function() {
12 var convertedNameCache = {};
13 function convertNameToJSConvention(name) {
14 if (name in convertedNameCache)
15 return convertedNameCache[name];
18 name[name.length - 1] == '_') {
19 convertedNameCache[name] = name;
23 var words = name.split('_');
24 if (words.length == 1) {
25 convertedNameCache[name] = words[0];
29 for (var i = 1; i < words.length; i++)
30 words[i] = words[i][0].toUpperCase() + words[i].substring(1);
32 convertedNameCache[name] = words.join('');
33 return convertedNameCache[name];
36 function convertObjectFieldNamesToJSConventions(object) {
37 tvcm.iterObjectFieldsRecursively(
39 function(object, fieldName, fieldValue) {
40 delete object[fieldName];
41 object[newFieldName] = fieldValue;
46 function convertQuadSuffixedTypesToQuads(object) {
47 tvcm.iterObjectFieldsRecursively(
49 function(object, fieldName, fieldValue) {
53 function convertObject(object) {
54 convertObjectFieldNamesToJSConventions(object);
55 convertQuadSuffixedTypesToQuads(object);
58 function moveRequiredFieldsFromArgsToToplevel(object, fields) {
59 for (var i = 0; i < fields.length; i++) {
61 if (object.args[key] === undefined)
62 throw Error('Expected field ' + key + ' not found in args');
63 if (object[key] !== undefined)
64 throw Error('Field ' + key + ' already in object');
65 object[key] = object.args[key];
66 delete object.args[key];
70 function moveOptionalFieldsFromArgsToToplevel(object, fields) {
71 for (var i = 0; i < fields.length; i++) {
73 if (object.args[key] === undefined)
75 if (object[key] !== undefined)
76 throw Error('Field ' + key + ' already in object');
77 object[key] = object.args[key];
78 delete object.args[key];
82 function preInitializeObject(object) {
83 preInitializeObjectInner(object.args, false);
86 function preInitializeObjectInner(object, hasRecursed) {
87 if (!(object instanceof Object))
90 if (object instanceof Array) {
91 for (var i = 0; i < object.length; i++)
92 preInitializeObjectInner(object[i], true);
97 (object instanceof tracing.trace_model.ObjectSnapshot ||
98 object instanceof tracing.trace_model.ObjectInstance))
101 for (var key in object) {
102 var newKey = convertNameToJSConvention(key);
104 var value = object[key];
106 object[newKey] = value;
110 // Convert objects with keys ending with Quad to tvcm.Quad type.
111 if (/Quad$/.test(key) && !(object[key] instanceof tvcm.Quad)) {
114 q = tvcm.Quad.from8Array(object[key]);
122 // Convert objects with keys ending with Rect to tvcm.Rect type.
123 if (/Rect$/.test(key) && !(object[key] instanceof tvcm.Rect)) {
126 r = tvcm.Rect.fromArray(object[key]);
133 preInitializeObjectInner(object[key], true);
138 preInitializeObject: preInitializeObject,
139 convertNameToJSConvention: convertNameToJSConvention,
140 moveRequiredFieldsFromArgsToToplevel: moveRequiredFieldsFromArgsToToplevel,
141 moveOptionalFieldsFromArgsToToplevel: moveOptionalFieldsFromArgsToToplevel