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

Unified Diff: third_party/WebKit/Source/devtools/scripts/visualize_deps/run_visualize.js

Issue 2629113003: DevTools: visualize dependencies using jquery.graphviz.svg (Closed)
Patch Set: remove d3 Created 3 years, 11 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
« no previous file with comments | « third_party/WebKit/Source/devtools/scripts/visualize_deps/jquery_svg.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/devtools/scripts/visualize_deps/run_visualize.js
diff --git a/third_party/WebKit/Source/devtools/scripts/visualize_deps/run_visualize.js b/third_party/WebKit/Source/devtools/scripts/visualize_deps/run_visualize.js
new file mode 100644
index 0000000000000000000000000000000000000000..acaeadf37d5d445cdd9e5d25655f3805f54b4001
--- /dev/null
+++ b/third_party/WebKit/Source/devtools/scripts/visualize_deps/run_visualize.js
@@ -0,0 +1,117 @@
+// Copyright 2016 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.
+
+"use strict";
+
+var childProcess = require("child_process");
+const fs = require('fs');
+var http = require("http");
+const path = require('path');
+var parseURL = require("url").parse;
+
+const utils = require('../utils');
+
+const FRONTEND_PATH = path.resolve(__dirname, '..', '..', 'front_end');
+const OUT_DIR_PATH = path.resolve(__dirname, 'out');
+const OUT_FILE_PATH = path.resolve(OUT_DIR_PATH, 'dependencies.dot');
+
+const SERVER_PORT = parseInt(process.env.PORT, 10) || 8001;
+
+function main() {
+ generateDot();
+ try {
+ childProcess.execSync(`dot -O -Tsvg ${OUT_FILE_PATH}`);
+ } catch (err) {
+ console.log(`Could not generate dot svg because: ${err}`);
+ console.log('Make sure you have graphviz installed (e.g. sudo apt install graphviz)');
+ return;
+ }
+ console.log('Generated dot file & svg');
+ startServer();
+ console.log(`Go to: http://localhost:${SERVER_PORT}/jquery_svg.html`);
+}
+
+function generateDot() {
+ if (!utils.isDir(OUT_DIR_PATH))
+ fs.mkdirSync(OUT_DIR_PATH);
+ const modules = new Set();
+ const moduleToDependencyList = ['digraph dependencies {'];
+ moduleToDependencyList.push('fixedsize = true;');
+ fs.readdirSync(FRONTEND_PATH).forEach(function(file) {
+ const moduleJSONPath = path.join(FRONTEND_PATH, file, 'module.json');
+ if (fs.statSync(path.join(FRONTEND_PATH, file)).isDirectory() &&
+ utils.isFile(moduleJSONPath)) {
+ const module = file;
+ if (module === 'audits2_worker')
+ return;
+ modules.add(module);
+ const moduleJSON = require(moduleJSONPath);
+ let moduleSize = 0;
+
+ let resources = (moduleJSON.scripts || []).concat((moduleJSON.resources || []));
+ for (let script of resources) {
+ if (fs.existsSync(path.join(FRONTEND_PATH, module, script))) {
+ moduleSize += fs.statSync(path.join(FRONTEND_PATH, module, script)).size;
+ }
+ }
+ moduleSize /= 200000;
+ moduleSize = Math.max(0.5, moduleSize);
+ let fontSize = Math.max(moduleSize * 14, 14);
+
+ moduleToDependencyList.push(`${module} [width=${moduleSize}, height=${moduleSize} fontsize=${fontSize}];`);
+
+ if (moduleJSON.dependencies) {
+ for (let d of moduleJSON.dependencies) {
+ moduleToDependencyList.push(` ${module} -> ${d}`);
+ }
+ }
+ }
+ });
+ moduleToDependencyList.push('}');
+ const content = moduleToDependencyList.join('\n');
+ fs.writeFileSync(OUT_FILE_PATH, content);
+}
+
+function startServer() {
+ http.createServer(requestHandler).listen(SERVER_PORT);
+
+ function requestHandler(request, response) {
+ var filePath = parseURL(request.url).pathname;
+ var absoluteFilePath = path.join(__dirname, filePath);
+ if (!path.resolve(absoluteFilePath).startsWith(__dirname)) {
+ console.log(`File requested is outside of folder: ${__dirname}`);
+ sendResponse(403, `403 - Access denied. File requested is outside of folder: ${__dirname}`);
+ return;
+ }
+
+ fs.exists(absoluteFilePath, fsExistsCallback);
+
+ function fsExistsCallback(fileExists) {
+ if (!fileExists) {
+ console.log(`Cannot find file ${absoluteFilePath}`);
+ sendResponse(404, "404 - File not found");
+ return;
+ }
+ fs.readFile(absoluteFilePath, "binary", readFileCallback);
+ }
+
+ function readFileCallback(err, file) {
+ if (err) {
+ console.log(`Unable to read local file ${absoluteFilePath}:`, err);
+ sendResponse(500, "500 - Internal Server Error");
+ return;
+ }
+ sendResponse(200, file);
+ }
+
+ function sendResponse(statusCode, data) {
+ response.writeHead(statusCode);
+ response.write(data, "binary");
+ response.end();
+ }
+ }
+}
+
+if (require.main === module)
+ main();
« no previous file with comments | « third_party/WebKit/Source/devtools/scripts/visualize_deps/jquery_svg.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698