Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4409)

Unified Diff: chrome/test/data/third_party/spaceport/js/sprites/renderers/DomContext.js

Issue 10134041: Add test data for spaceport benchmark. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/third_party/spaceport/js/sprites/renderers/DomContext.js
diff --git a/chrome/test/data/third_party/spaceport/js/sprites/renderers/DomContext.js b/chrome/test/data/third_party/spaceport/js/sprites/renderers/DomContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4a4d97998e457785ca5981587b278f1245c4acc
--- /dev/null
+++ b/chrome/test/data/third_party/spaceport/js/sprites/renderers/DomContext.js
@@ -0,0 +1,102 @@
+define([ 'util/ensureCallback' ], function (ensureCallback) {
+ function DomContext(sourceData, frameData, onLoad) {
+ var onLoadCalled = 0;
+ var onLoadExpected = 0;
+ var onLoadReady = false;
+
+ function checkOnLoad() {
+ if (onLoadReady) {
+ if (onLoadCalled === onLoadExpected) {
+ onLoad();
+ }
+ }
+ }
+
+ var sourcePool = [ ];
+ var elementPool = [ ];
+ var elements = [ ];
+ var i, j;
+
+ for (i = 0; i < frameData.length; ++i) {
+ var objectTransforms = frameData[i];
+ var frameElements = [ ];
+ var sourceElements = [ ];
+
+ for (j = 0; j < objectTransforms.length; ++j) {
+ var element;
+ var img = sourceData.getImage(i);
+ var index = sourcePool.indexOf(img);
+
+ if (index >= 0) {
+ // Image is available in the pool; take it
+ element = elementPool.splice(index, 1)[0];
+ sourcePool.splice(index, 1);
+ } else {
+ // Image not in the pool; add it
+ element = img.cloneNode(true);
+ element.style.position = 'absolute';
+ element.style.left = '0';
+ element.style.top = '0';
+
+ if (element instanceof Image) {
+ onLoadExpected += 1;
+ element.onload = function () {
+ onLoadCalled += 1;
+ checkOnLoad();
+ };
+ element.src = element.src;
+ }
+ }
+
+ sourceElements.push(img);
+ frameElements.push(element);
+ }
+
+ sourcePool.push.apply(sourcePool, sourceElements);
+ elementPool.push.apply(elementPool, frameElements);
+ elements.push(frameElements);
+ }
+
+ onLoadReady = true;
+ checkOnLoad();
+
+ this.elements = elements;
+ this.activeElements = null;
+
+ this.transformData = null;
+ }
+
+ DomContext.prototype.unload = function unload() {
+ this.activeElements.forEach(function (el) {
+ if (el.parentNode) {
+ el.parentNode.removeChild(el);
+ }
+ });
+
+ this.activeElements = null;
+ };
+
+ DomContext.prototype.renderFrame = function renderFrame(frameIndex) {
+ var transforms = this.transformData[frameIndex];
+ var elements = this.elements[frameIndex];
+
+ this.processElements(elements, transforms);
+
+ // Elements no longer displayed must be removed from the DOM
+ var activeElements = this.activeElements;
+ if (activeElements) {
+ var count = activeElements.length;
+ var i;
+ for (i = 0; i < count; ++i) {
+ var element = activeElements[i];
+ if (element.parentNode && elements.indexOf(element) < 0) {
+ element.parentNode.removeChild(element);
+ }
+ }
+ }
+
+ this.activeElements = elements;
+ };
+
+ return DomContext;
+});

Powered by Google App Engine
This is Rietveld 408576698