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

Side by Side Diff: third_party/WebKit/Source/devtools/scripts/extract_module/extract_module.js

Issue 2626173002: DevTools: Extract HeapSnapshotCommon.js into HeapSnapshotModel module (Closed)
Patch Set: add module.json for modules 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 unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/profiler/module.json ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 'use strict'; 4 'use strict';
5 const fs = require('fs'); 5 const fs = require('fs');
6 const path = require('path'); 6 const path = require('path');
7 7
8 const utils = require('../utils'); 8 const utils = require('../utils');
9 9
10 const FRONTEND_PATH = path.resolve(__dirname, '..', '..', 'front_end'); 10 const FRONTEND_PATH = path.resolve(__dirname, '..', '..', 'front_end');
11 const BUILD_GN_PATH = path.resolve(__dirname, '..', '..', 'BUILD.gn'); 11 const BUILD_GN_PATH = path.resolve(__dirname, '..', '..', 'BUILD.gn');
12 const SPECIAL_CASE_NAMESPACES_PATH = path.resolve(__dirname, '..', 'special_case _namespaces.json'); 12 const SPECIAL_CASE_NAMESPACES_PATH = path.resolve(__dirname, '..', 'special_case _namespaces.json');
13 13
14 const APPLICATION_DESCRIPTORS = [ 14 const APPLICATION_DESCRIPTORS = [
15 'inspector.json', 15 'inspector.json',
16 'toolbox.json',
16 'unit_test_runner.json', 17 'unit_test_runner.json',
18 'formatter_worker.json',
19 'heap_snapshot_worker.json',
20 'utility_shared_worker.json',
17 ]; 21 ];
18 22
19 // Replace based on specified transformation 23 // Replace based on specified transformation
20 const MODULES_TO_REMOVE = ['components_lazy', 'ui_lazy']; 24 const MODULES_TO_REMOVE = [];
21 25
22 const JS_FILES_MAPPING = [ 26 const JS_FILES_MAPPING = [
23 {file: 'components_lazy/CookiesTable.js', new: 'cookie_table'}, 27 {file: 'profiler/HeapSnapshotModel.js', new: 'heap_snapshot_model'},
24 {file: 'ui/BezierEditor.js', new: 'inline_editor'}, 28 // {file: 'module/file.js', existing: 'module'}
25 {file: 'ui/BezierUI.js', new: 'inline_editor'},
26 {file: 'ui/ColorSwatch.js', new: 'inline_editor'},
27 {file: 'ui/CSSShadowEditor.js', new: 'inline_editor'},
28 {file: 'ui/SwatchPopoverHelper.js', new: 'inline_editor'},
29 {file: 'components/Spectrum.js', new: 'color_picker'},
30
31 // Cannot extract dom_ui because of cyclic dependency with components
32 // {file: 'components/DOMPresentationUtils.js', new: 'dom_ui'},
33 {file: 'components/ExecutionContextSelector.js', existing: 'main'},
34 {file: 'components_lazy/FilmStripModel.js', existing: 'sdk'},
35 {file: 'components_lazy/FilmStripView.js', existing: 'perf_ui'},
36 {file: 'components/ShortcutsScreen.js', existing: 'ui'},
37 {file: 'ui_lazy/DataGrid.js', new: 'data_grid'},
38 {file: 'ui_lazy/ViewportDataGrid.js', new: 'data_grid'},
39 {file: 'ui_lazy/SortableDataGrid.js', new: 'data_grid'},
40 {file: 'ui_lazy/ShowMoreDataGridNode.js', new: 'data_grid'},
41 {file: 'ui_lazy/ChartViewport.js', existing: 'perf_ui'},
42 {file: 'ui_lazy/FlameChart.js', existing: 'perf_ui'},
43 {file: 'ui_lazy/OverviewGrid.js', existing: 'perf_ui'},
44 {file: 'ui_lazy/PieChart.js', existing: 'perf_ui'},
45 {file: 'ui_lazy/TimelineGrid.js', existing: 'perf_ui'},
46 {file: 'ui_lazy/TimelineOverviewPane.js', existing: 'perf_ui'},
47 ]; 29 ];
48 30
49 const MODULE_MAPPING = { 31 const MODULE_MAPPING = {
50 cookie_table: { 32 heap_snapshot_model: {
51 dependencies: ['ui', 'sdk', 'data_grid'], 33 dependencies: [],
52 dependents: ['resources', 'network'], 34 dependents: ['heap_snapshot_worker', 'profiler'],
53 applications: ['inspector.json'], 35 applications: ['inspector.json'], // need to manually add to heap snapshot w orker b/c it's autostart
54 autostart: false,
55 },
56 inline_editor: {
57 dependencies: ['ui'],
58 dependents: ['sources', 'elements', 'resources'],
59 applications: ['inspector.json', 'unit_test_runner.json'],
60 autostart: false,
61 },
62 color_picker: {
63 dependencies: ['ui', 'sdk'],
64 dependents: ['sources', 'elements'],
65 applications: ['inspector.json'],
66 autostart: false,
67 },
68 data_grid: {
69 dependencies: ['ui'],
70 dependents: ['network', 'profiler', 'resources', 'console', 'timeline'],
71 applications: ['inspector.json', 'unit_test_runner.json'],
72 autostart: false, 36 autostart: false,
73 }, 37 },
74 }; 38 };
75 39
76 const NEW_DEPENDENCIES_BY_EXISTING_MODULES = { 40 const NEW_DEPENDENCIES_BY_EXISTING_MODULES = {
77 resources: ['components'], 41 // resources: ['components'],
78 }; 42 };
79 43
80 const REMOVE_DEPENDENCIES_BY_EXISTING_MODULES = { 44 const REMOVE_DEPENDENCIES_BY_EXISTING_MODULES = {
81 }; 45 };
82 46
83 const DEPENDENCIES_BY_MODULE = Object.keys(MODULE_MAPPING).reduce((acc, module) => { 47 const DEPENDENCIES_BY_MODULE = Object.keys(MODULE_MAPPING).reduce((acc, module) => {
84 acc[module] = MODULE_MAPPING[module].dependencies; 48 acc[module] = MODULE_MAPPING[module].dependencies;
85 return acc; 49 return acc;
86 }, {}); 50 }, {});
87 51
(...skipping 17 matching lines...) Expand all
105 const targetToOriginalFilesMap = JS_FILES_MAPPING.reduce((acc, f) => { 69 const targetToOriginalFilesMap = JS_FILES_MAPPING.reduce((acc, f) => {
106 let components = f.file.split('/'); 70 let components = f.file.split('/');
107 components[0] = f.new || f.existing; 71 components[0] = f.new || f.existing;
108 acc.set(components.join('/'), f.file); 72 acc.set(components.join('/'), f.file);
109 return acc; 73 return acc;
110 }, new Map()); 74 }, new Map());
111 75
112 const cssFilesMapping = findCSSFiles(); 76 const cssFilesMapping = findCSSFiles();
113 const identifiersByFile = calculateIdentifiers(); 77 const identifiersByFile = calculateIdentifiers();
114 const identifierMap = mapIdentifiers(identifiersByFile, cssFilesMapping); 78 const identifierMap = mapIdentifiers(identifiersByFile, cssFilesMapping);
79 console.log('identifierMap', identifierMap);
115 const extensionMap = removeFromExistingModuleDescriptors(modules, identifierMa p, cssFilesMapping); 80 const extensionMap = removeFromExistingModuleDescriptors(modules, identifierMa p, cssFilesMapping);
116 81
117 // Find out which files are moving extensions 82 // Find out which files are moving extensions
118 for (let e of extensionMap.keys()) { 83 for (let e of extensionMap.keys()) {
119 for (let [f, identifiers] of identifiersByFile) { 84 for (let [f, identifiers] of identifiersByFile) {
120 if (identifiers.includes(e)) 85 if (identifiers.includes(e))
121 console.log(`extension: ${e} in file: ${f}`); 86 console.log(`extension: ${e} in file: ${f}`);
122 } 87 }
123 } 88 }
124 89
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 linesToInsert: newNonAutostartModules, 227 linesToInsert: newNonAutostartModules,
263 }); 228 });
264 229
265 for (let pair of partialPathMapping.entries()) 230 for (let pair of partialPathMapping.entries())
266 newContent = newContent.replace(pair[0], pair[1]); 231 newContent = newContent.replace(pair[0], pair[1]);
267 232
268 newContent = addContentToLinesInSortedOrder({ 233 newContent = addContentToLinesInSortedOrder({
269 content: newContent, 234 content: newContent,
270 startLine: 'all_devtools_files = [', 235 startLine: 'all_devtools_files = [',
271 endLine: ']', 236 endLine: ']',
272 linesToInsert: newSourcesToAdd, 237 linesToInsert: newSourcesToAdd.concat([...newModuleSet].map(module => `"fron t_end/${module}/module.json",`)),
273 }); 238 });
274 239
275 fs.writeFileSync(BUILD_GN_PATH, newContent); 240 fs.writeFileSync(BUILD_GN_PATH, newContent);
276 241
277 function calculatePartialPathMapping() { 242 function calculatePartialPathMapping() {
278 let partialPathMapping = new Map(); 243 let partialPathMapping = new Map();
279 for (let fileObj of JS_FILES_MAPPING) { 244 for (let fileObj of JS_FILES_MAPPING) {
280 let components = fileObj.file.split('/'); 245 let components = fileObj.file.split('/');
281 let sourceModule = components[0]; 246 let sourceModule = components[0];
282 let targetModule = fileObj.existing || fileObj.new; 247 let targetModule = fileObj.existing || fileObj.new;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 filesToTargetModule.set(fileObj.file, fileObj.existing || fileObj.new); 295 filesToTargetModule.set(fileObj.file, fileObj.existing || fileObj.new);
331 296
332 297
333 const map = new Map(); 298 const map = new Map();
334 for (let [file, identifiers] of identifiersByFile) { 299 for (let [file, identifiers] of identifiersByFile) {
335 let targetModule = filesToTargetModule.get(file); 300 let targetModule = filesToTargetModule.get(file);
336 for (let identifier of identifiers) { 301 for (let identifier of identifiers) {
337 let components = identifier.split('.'); 302 let components = identifier.split('.');
338 components[0] = mapModuleToNamespace(targetModule); 303 components[0] = mapModuleToNamespace(targetModule);
339 let newIdentifier = components.join('.'); 304 let newIdentifier = components.join('.');
305 // one-off
306 if (targetModule === 'heap_snapshot_model' && components[1] === 'HeapSnaps hotCommon') {
307 newIdentifier = [components[0]].concat(components.slice(2)).join('.');
308 if (newIdentifier === 'HeapSnapshotModel') {
309 identifier = 'Profiler.HeapSnapshotCommon = {};\n\n';
310 newIdentifier = '';
311 }
312 }
340 map.set(identifier, newIdentifier); 313 map.set(identifier, newIdentifier);
341 } 314 }
342 } 315 }
343 for (let [jsFile, cssFiles] of cssFilesMapping) { 316 for (let [jsFile, cssFiles] of cssFilesMapping) {
344 let fileObj = JS_FILES_MAPPING.filter(f => f.file === jsFile)[0]; 317 let fileObj = JS_FILES_MAPPING.filter(f => f.file === jsFile)[0];
345 let sourceModule = fileObj.file.split('/')[0]; 318 let sourceModule = fileObj.file.split('/')[0];
346 let targetModule = fileObj.existing || fileObj.new; 319 let targetModule = fileObj.existing || fileObj.new;
347 for (let cssFile of cssFiles) { 320 for (let cssFile of cssFiles) {
348 let key = `${sourceModule}/${cssFile}`; 321 let key = `${sourceModule}/${cssFile}`;
349 let value = `${targetModule}/${cssFile}`; 322 let value = `${targetModule}/${cssFile}`;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 } 361 }
389 362
390 function write(filePath) { 363 function write(filePath) {
391 let content = fs.readFileSync(filePath).toString(); 364 let content = fs.readFileSync(filePath).toString();
392 let newContent = content; 365 let newContent = content;
393 for (let key of identifierMap.keys()) { 366 for (let key of identifierMap.keys()) {
394 let originalIdentifier = key; 367 let originalIdentifier = key;
395 let newIdentifier = identifierMap.get(key); 368 let newIdentifier = identifierMap.get(key);
396 newContent = newContent.replaceAll(originalIdentifier, newIdentifier); 369 newContent = newContent.replaceAll(originalIdentifier, newIdentifier);
397 } 370 }
398 // one-off
399 if (filePath.includes('LayoutTests/http/tests/inspector-unit/filtered-item-s election-dialog-filtering.js'))
400 newContent = newContent.replaceAll('ui_lazy', 'quick_open');
401 if (filePath.includes('LayoutTests/inspector/components/cookies-table.html') )
402 newContent = newContent.replaceAll('components_lazy', 'cookie_table');
403 if (filePath.includes('LayoutTests/inspector/components/datagrid-autosize.ht ml'))
404 newContent = newContent.replaceAll('ui_lazy', 'data_grid');
405 if (filePath.includes('LayoutTests/inspector/components/datagrid-test.js'))
406 newContent = newContent.replaceAll('ui_lazy', 'data_grid');
407 371
408 if (content !== newContent) 372 if (content !== newContent)
409 fs.writeFileSync(filePath, newContent); 373 fs.writeFileSync(filePath, newContent);
410 } 374 }
411 } 375 }
412 376
413 function removeFromExistingModuleDescriptors(modules, identifierMap, cssFilesMap ping) { 377 function removeFromExistingModuleDescriptors(modules, identifierMap, cssFilesMap ping) {
414 let extensionMap = new Map(); 378 let extensionMap = new Map();
415 let moduleFileMap = new Map(); 379 let moduleFileMap = new Map();
416 380
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 if (dependents.includes(existingModule)) 612 if (dependents.includes(existingModule))
649 newDeps.push(newModule); 613 newDeps.push(newModule);
650 } 614 }
651 return newDeps; 615 return newDeps;
652 } 616 }
653 } 617 }
654 618
655 function updateApplicationDescriptor(descriptorFileName, newModuleSet) { 619 function updateApplicationDescriptor(descriptorFileName, newModuleSet) {
656 let descriptorPath = path.join(FRONTEND_PATH, descriptorFileName); 620 let descriptorPath = path.join(FRONTEND_PATH, descriptorFileName);
657 let newModules = [...newModuleSet].filter(m => APPLICATIONS_BY_MODULE[m].inclu des(descriptorFileName)); 621 let newModules = [...newModuleSet].filter(m => APPLICATIONS_BY_MODULE[m].inclu des(descriptorFileName));
622 if (newModules.length === 0)
623 return;
658 let includeNewModules = (acc, line) => { 624 let includeNewModules = (acc, line) => {
659 if (line.includes('{') && line.endsWith('}')) { 625 if (line.includes('{') && line.endsWith('}')) {
660 line += ','; 626 line += ',';
661 acc.push(line); 627 acc.push(line);
662 return acc.concat(newModules.map((m, i) => { 628 return acc.concat(newModules.map((m, i) => {
663 // Need spacing to preserve indentation 629 // Need spacing to preserve indentation
664 let string; 630 let string;
665 if (MODULE_MAPPING[m].autostart) 631 if (MODULE_MAPPING[m].autostart)
666 string = ` { "name": "${m}", "type": "autostart"}`; 632 string = ` { "name": "${m}", "type": "autostart"}`;
667 else 633 else
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 return string.split("") 673 return string.split("")
708 .map(function (char) { 674 .map(function (char) {
709 var charCode = char.charCodeAt(0); 675 var charCode = char.charCodeAt(0);
710 return charCode > 127 ? unicodeCharEscape(charCode) : char; 676 return charCode > 127 ? unicodeCharEscape(charCode) : char;
711 }) 677 })
712 .join(""); 678 .join("");
713 } 679 }
714 680
715 if (require.main === module) 681 if (require.main === module)
716 extractModule(); 682 extractModule();
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/profiler/module.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698