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

Unified Diff: tools/deep_memory_profiler/visualizer/profiler.js

Issue 23777005: Modified directory preparing for app engine for dmprof visualizer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Create shell file to copy flot files and upload project to googleplex Created 7 years, 3 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: tools/deep_memory_profiler/visualizer/profiler.js
diff --git a/tools/deep_memory_profiler/visualizer/profiler.js b/tools/deep_memory_profiler/visualizer/profiler.js
deleted file mode 100644
index 8e311aa3b6916c0cb7999635e785e0e32b2b44fc..0000000000000000000000000000000000000000
--- a/tools/deep_memory_profiler/visualizer/profiler.js
+++ /dev/null
@@ -1,291 +0,0 @@
-// Copyright 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.
-
-/**
- * This class provides data access interface for dump file profiler.
- * @constructor
- */
-var Profiler = function(jsonData) {
- this.jsonData_ = jsonData;
- // Initialize template with templates information.
- this.template_ = jsonData.templates['l2'];
- // Initialize selected category, and nothing selected at first.
- this.selected_ = null;
-
- // Trigger event.
- this.callbacks_ = {};
-};
-
-/**
- * Mimic Eventemitter in node. Add new listener for event.
- * @param {string} event
- * @param {Function} callback
- */
-Profiler.prototype.addListener = function(event, callback) {
- if (!this.callbacks_[event])
- this.callbacks_[event] = $.Callbacks();
- this.callbacks_[event].add(callback);
-};
-
-/**
- * This function will emit the event.
- * @param {string} event
- */
-Profiler.prototype.emit = function(event) {
- // Listeners should be able to receive arbitrary number of parameters.
- var eventArguments = Array.prototype.slice.call(arguments, 1);
-
- if (this.callbacks_[event])
- this.callbacks_[event].fire.apply(this, eventArguments);
-};
-
-/**
- * Remove listener from event.
- * @param {string} event
- * @param {Function} callback
- */
-Profiler.prototype.removeListener = function(event, callback) {
- if (this.callbacks_[event])
- this.callbacks_[event].remove(callback);
-};
-
-/**
- * Calcualte initial models according default template.
- */
-Profiler.prototype.reparse = function() {
- this.models_ = this.parseTemplate_();
- this.emit('changed', this.models_);
-};
-
-/**
- * To be called by view when new model being selected.
- * And then triggers all relative views to update.
- */
-Profiler.prototype.setSelected = function(id) {
- this.selected_ = id;
- this.emit('changed:selected', id);
-};
-
-/**
- * Get all models throughout the whole timeline of given id.
- * @param {string} id Model id.
- * @return {Array.<Object>} model array of given id.
- */
-Profiler.prototype.getModelsbyId = function(id) {
- function find(model) {
- if (model.id === id)
- return model;
- if ('children' in model)
- return model.children.reduce(function(previous, current) {
- var matched = find(current);
- if (matched)
- previous = matched;
- return previous;
- }, null);
- }
-
- return this.models_.reduce(function(previous, current) {
- var matched = find(current);
- if (matched)
- previous.push(matched);
- return previous;
- }, []);
-};
-
-/**
- * Get current sub of given model, return undefined if sub dont exist.
- * @param {string} id Model id.
- * @return {undefined|string} world-breakdown like 'vm-map'.
- */
-Profiler.prototype.getCurSubById = function(id) {
- // Root won't has breakdown.
- var path = id.split(',').splice(1);
- if (!path.length) return null;
-
- var tmpl = this.template_;
- var curSub = path.reduce(function(previous, current, index) {
- return previous[2][current];
- }, tmpl);
-
- // return
- return curSub && curSub[0] + ',' + curSub[1];
-};
-
-/**
- * Generate and then reparse new template when new sub was selected.
- * @param {string|null} sub World-breakdown like 'vm-map'.
- */
-Profiler.prototype.setSub = function(sub) {
- var selected = this.selected_;
- var path = selected.split(',');
- var key = path[path.length-1];
-
- // Add sub breakdown to template.
- var models = this.getModelsbyId(selected);
- var subTmpl = sub.split(',');
- subTmpl.push({});
- models[0].template[2][key] = subTmpl;
-
- // Recalculate new template.
- this.reparse();
-};
-
-/**
- * Calculate the model of certain snapshot.
- * @param {string} template Local template.
- * @param {Object} snapshot Current snapshot.
- * @param {Object} worldUnits Mapping of world units.
- * @param {Array.<number>} localUnits Array of local units.
- * @param {string} name Local node path.
- * @return {Object} Return model, total size and remaining units.
- * @private
- */
-Profiler.prototype.accumulate_ = function(
- template, snapshot, worldUnits, localUnits, name) {
- var self = this;
- var totalSize = 0;
- var worldName = template[0];
- var breakdownName = template[1];
- var categories = snapshot.worlds[worldName].breakdown[breakdownName];
- // Make deep copy of localUnits.
- var remainderUnits = localUnits.slice(0);
- var model = {
- name: name || worldName + '-' + breakdownName,
- children: []
- };
-
- Object.keys(categories).forEach(function(categoryName) {
- var category = categories[categoryName];
- if (category['hidden'] === true)
- return;
-
- // Filter units.
- var matchedUnits = intersection(category.units, localUnits);
- remainderUnits = difference(remainderUnits, matchedUnits);
-
- // Accumulate categories.
- var size = matchedUnits.reduce(function(previous, current) {
- return previous + worldUnits[worldName][current];
- }, 0);
- totalSize += size;
-
- // Handle subs options if exists.
- var child = null;
- if (!(categoryName in template[2])) {
- // Calculate child for current category.
- child = {
- name: categoryName,
- size: size
- };
- if ('subs' in category && category.subs.length) {
- child.subs = category.subs;
- child.template = template;
- }
-
- model.children.push(child);
- } else {
- // Calculate child recursively.
- var subTemplate = template[2][categoryName];
- var subWorldName = subTemplate[0];
- var retVal = null;
-
- if (subWorldName === worldName) {
- // If subs is in the same world, units should be filtered.
- retVal = self.accumulate_(subTemplate, snapshot, worldUnits,
- matchedUnits, categoryName);
- if ('subs' in category && category.subs.length) {
- retVal.model.subs = category.subs;
- retVal.model.template = template;
- }
- model.children.push(retVal.model);
- // Don't output remaining item without any unit.
- if (!retVal.remainderUnits.length)
- return;
-
- // Sum up remaining units size.
- var remainSize =
- retVal.remainderUnits.reduce(function(previous, current) {
- return previous + worldUnits[subWorldName][current];
- }, 0);
-
- model.children.push({
- name: categoryName + '-remaining',
- size: remainSize
- });
- } else {
- // If subs is in different world, use all units in that world.
- var subLocalUnits = Object.keys(worldUnits[subWorldName]);
- subLocalUnits = subLocalUnits.map(function(unitID) {
- return parseInt(unitID, 10);
- });
-
- retVal = self.accumulate_(subTemplate, snapshot, worldUnits,
- subLocalUnits, categoryName);
- if ('subs' in category && category.subs.length) {
- retVal.model.subs = category.subs;
- retVal.model.template = template;
- }
- model.children.push(retVal.model);
-
- if (size > retVal.totalSize) {
- model.children.push({
- name: categoryName + '-remaining',
- size: size - retVal.totalSize
- });
- } else {
- // Output WARNING when sub-breakdown size is larger.
- console.log('WARNING: size of sub-breakdown is larger');
- }
- }
- }
- });
-
- return {
- model: model,
- totalSize: totalSize,
- remainderUnits: remainderUnits
- };
-};
-
-/**
- * Parse template and calculate models of the whole timeline.
- * @return {Array.<Object>} Models of the whole timeline.
- * @private
- */
-Profiler.prototype.parseTemplate_ = function() {
- function calModelId(model, localPath) {
- // Create unique id for every model.
- model.id = localPath.length ?
- localPath.join() + ',' + model.name : model.name;
-
- if ('children' in model) {
- model.children.forEach(function(child, index) {
- var childPath = localPath.slice(0);
- childPath.push(model.name);
- calModelId(child, childPath);
- });
- }
- }
-
- var self = this;
-
- return self.jsonData_.snapshots.map(function(snapshot) {
- var worldUnits = {};
- for (var worldName in snapshot.worlds) {
- worldUnits[worldName] = {};
- var units = snapshot.worlds[worldName].units;
- for (var unitID in units)
- worldUnits[worldName][unitID] = units[unitID][0];
- }
- var localUnits = Object.keys(worldUnits[self.template_[0]]);
- localUnits = localUnits.map(function(unitID) {
- return parseInt(unitID, 10);
- });
-
- var retVal =
- self.accumulate_(self.template_, snapshot, worldUnits, localUnits);
- calModelId(retVal.model, []);
- return retVal.model;
- });
-};

Powered by Google App Engine
This is Rietveld 408576698