| // Copyright (C) 2018 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| /** |
| * Configuration file for lite-server. Contains configuration for auto rerunning |
| * ninja on file change. |
| */ |
| 'use strict'; |
| |
| const { spawn } = require('child_process'); |
| const path = require('path'); |
| |
| // Print without added new line. |
| const print = data => process.stdout.write(data); |
| const printErr = data => process.stderr.write(data); |
| |
| const ninjaOutDir = process.env.OUT_DIR; |
| const uiOutDir = path.join(ninjaOutDir, 'ui'); |
| const perfettoRoot = process.env.ROOT_DIR; |
| const ninjaPath = path.join(perfettoRoot, 'tools', 'ninja'); |
| let ninjaRunning = false; |
| |
| function rebasePath(relative_path) { |
| return path.join(perfettoRoot, relative_path); |
| } |
| |
| module.exports = function(bs) { |
| return { |
| files: [ |
| { |
| match: [ |
| "ui/**", |
| "src/trace_processor/**", |
| "protos/**", |
| ].map(rebasePath), |
| fn: function(event, file) { |
| console.log(`Change detected on ${file}`); |
| if (ninjaRunning) { |
| console.log("Already have a ninja build running. Doing nothing."); |
| return; |
| } |
| |
| ninjaRunning = true; |
| |
| console.log(`Executing: ninja -C ${ninjaOutDir} ui`); |
| const ninja = spawn(ninjaPath, ['-C', ninjaOutDir, 'ui']); |
| ninja.stdout.on('data', data => print(data.toString())); |
| ninja.stderr.on('data', data => printErr(data.toString())); |
| |
| // We can be smarter and load just the file we need. Need to |
| // resolve to the dist/location of the file in that case. |
| // For now, we're reloading the whole page. |
| ninja.on('exit', () => { |
| ninjaRunning = false; |
| bs.reload(); |
| }); |
| }, |
| options: { |
| ignored: [ |
| "ui/dist/", |
| "ui/.git/", |
| "ui/node_modules/", |
| ].map(rebasePath), |
| ignoreInitial: true, |
| } |
| } |
| ], |
| server: { |
| baseDir: uiOutDir, |
| }, |
| }; |
| }; |