提交 cd6ee093 编写于 作者: J Johannes Rieken

adopt new loader with 'onNodeCachedData', send telemetry for successful cached data generation

上级 29422ec6
...@@ -83,12 +83,10 @@ function main() { ...@@ -83,12 +83,10 @@ function main() {
window.MonacoEnvironment = {}; window.MonacoEnvironment = {};
const nodeCachedDataErrors = window.MonacoEnvironment.nodeCachedDataErrors = [];
require.config({ require.config({
baseUrl: rootUrl, baseUrl: rootUrl,
'vs/nls': nlsConfig, 'vs/nls': nlsConfig,
nodeCachedDataDir: configuration.nodeCachedDataDir, nodeCachedDataDir: configuration.nodeCachedDataDir,
onNodeCachedDataError: function (err) { nodeCachedDataErrors.push(err) },
nodeModules: [/*BUILD->INSERT_NODE_MODULES*/] nodeModules: [/*BUILD->INSERT_NODE_MODULES*/]
}); });
......
...@@ -253,15 +253,21 @@ var AMDLoader; ...@@ -253,15 +253,21 @@ var AMDLoader;
if (typeof options.nodeCachedDataWriteDelay !== 'number' || options.nodeCachedDataWriteDelay < 0) { if (typeof options.nodeCachedDataWriteDelay !== 'number' || options.nodeCachedDataWriteDelay < 0) {
options.nodeCachedDataWriteDelay = 1000 * 7; options.nodeCachedDataWriteDelay = 1000 * 7;
} }
if (typeof options.onNodeCachedDataError !== 'function') { if (typeof options.onNodeCachedData !== 'function') {
options.onNodeCachedDataError = function (err) { options.onNodeCachedData = function (err, data) {
if (err.errorCode === 'cachedDataRejected') { if (!err) {
// ignore
}
else if (err.errorCode === 'cachedDataRejected') {
console.warn('Rejected cached data from file: ' + err.path); console.warn('Rejected cached data from file: ' + err.path);
} }
else if (err.errorCode === 'unlink' || err.errorCode === 'writeFile') { else if (err.errorCode === 'unlink' || err.errorCode === 'writeFile') {
console.error('Problems writing cached data file: ' + err.path); console.error('Problems writing cached data file: ' + err.path);
console.error(err.detail); console.error(err.detail);
} }
else {
console.error(err);
}
}; };
} }
return options; return options;
...@@ -742,31 +748,40 @@ var AMDLoader; ...@@ -742,31 +748,40 @@ var AMDLoader;
var _this = this; var _this = this;
if (script.cachedDataRejected) { if (script.cachedDataRejected) {
// data rejected => delete cache file // data rejected => delete cache file
moduleManager.getConfig().getOptionsLiteral().onNodeCachedDataError({ moduleManager.getConfig().getOptionsLiteral().onNodeCachedData({
errorCode: 'cachedDataRejected', errorCode: 'cachedDataRejected',
path: cachedDataPath path: cachedDataPath
}); });
NodeScriptLoader._runSoon(function () { return _this._fs.unlink(cachedDataPath, function (err) { NodeScriptLoader._runSoon(function () {
if (err) { return _this._fs.unlink(cachedDataPath, function (err) {
moduleManager.getConfig().getOptionsLiteral().onNodeCachedDataError({ if (err) {
errorCode: 'unlink', moduleManager.getConfig().getOptionsLiteral().onNodeCachedData({
path: cachedDataPath, errorCode: 'unlink',
detail: err path: cachedDataPath,
}); detail: err
} });
}); }, moduleManager.getConfig().getOptionsLiteral().nodeCachedDataWriteDelay); }
});
}, moduleManager.getConfig().getOptionsLiteral().nodeCachedDataWriteDelay);
} }
else if (script.cachedDataProduced) { else if (script.cachedDataProduced) {
// data produced => tell outside world
moduleManager.getConfig().getOptionsLiteral().onNodeCachedData(undefined, {
path: cachedDataPath,
length: script.cachedData.length
});
// data produced => write cache file // data produced => write cache file
NodeScriptLoader._runSoon(function () { return _this._fs.writeFile(cachedDataPath, script.cachedData, function (err) { NodeScriptLoader._runSoon(function () {
if (err) { return _this._fs.writeFile(cachedDataPath, script.cachedData, function (err) {
moduleManager.getConfig().getOptionsLiteral().onNodeCachedDataError({ if (err) {
errorCode: 'writeFile', moduleManager.getConfig().getOptionsLiteral().onNodeCachedData({
path: cachedDataPath, errorCode: 'writeFile',
detail: err path: cachedDataPath,
}); detail: err
} });
}); }, moduleManager.getConfig().getOptionsLiteral().nodeCachedDataWriteDelay); }
});
}, moduleManager.getConfig().getOptionsLiteral().nodeCachedDataWriteDelay);
} }
}; };
NodeScriptLoader._runSoon = function (callback, minTimeout) { NodeScriptLoader._runSoon = function (callback, minTimeout) {
......
...@@ -163,13 +163,13 @@ function main() { ...@@ -163,13 +163,13 @@ function main() {
window.MonacoEnvironment = {}; window.MonacoEnvironment = {};
const nodeCachedDataErrors = window.MonacoEnvironment.nodeCachedDataErrors = []; const onNodeCachedData = window.MonacoEnvironment.onNodeCachedData = [];
require.config({ require.config({
baseUrl: rootUrl, baseUrl: rootUrl,
'vs/nls': nlsConfig, 'vs/nls': nlsConfig,
recordStats: !!configuration.performance, recordStats: !!configuration.performance,
nodeCachedDataDir: configuration.nodeCachedDataDir, nodeCachedDataDir: configuration.nodeCachedDataDir,
onNodeCachedDataError: function (err) { nodeCachedDataErrors.push(err) }, onNodeCachedData: function () { onNodeCachedData.push(arguments) },
nodeModules: [/*BUILD->INSERT_NODE_MODULES*/] nodeModules: [/*BUILD->INSERT_NODE_MODULES*/]
}); });
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { onUnexpectedError } from 'vs/base/common/errors'; import { onUnexpectedError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { join } from 'path'; import { join, basename } from 'path';
import { readdir, rimraf, stat } from 'vs/base/node/pfs'; import { readdir, rimraf, stat } from 'vs/base/node/pfs';
import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
...@@ -26,7 +26,7 @@ export class NodeCachedDataManager { ...@@ -26,7 +26,7 @@ export class NodeCachedDataManager {
this._telemetryService = telemetryService; this._telemetryService = telemetryService;
this._environmentService = environmentService; this._environmentService = environmentService;
this._handleCachedDataErrors(); this._handleCachedDataInfo();
this._manageCachedDataSoon(); this._manageCachedDataSoon();
} }
...@@ -34,20 +34,25 @@ export class NodeCachedDataManager { ...@@ -34,20 +34,25 @@ export class NodeCachedDataManager {
this._disposables = dispose(this._disposables); this._disposables = dispose(this._disposables);
} }
private _handleCachedDataErrors(): void { private _handleCachedDataInfo(): void {
const onNodeCachedDataError = (err) => { const onNodeCachedData = (err, data) => {
this._telemetryService.publicLog('nodeCachedData', { errorCode: err.errorCode, path: err.path }); console.log('onNodeCachedDatare', err, data);
if (err) {
this._telemetryService.publicLog('nodeCachedData', { errorCode: err.errorCode, path: basename(err.path) });
} else if (data) {
this._telemetryService.publicLog('nodeCachedDataProduced', { path: basename(data.path) });
}
}; };
// handle future and past errors // handle future and past errors
(<any>self).require.config({ onNodeCachedDataError }); (<any>self).require.config({ onNodeCachedData });
(<any[]>(<any>window).MonacoEnvironment.nodeCachedDataErrors).forEach(onNodeCachedDataError); delete (<any>window).MonacoEnvironment.onNodeCachedData;
delete (<any>window).MonacoEnvironment.nodeCachedDataErrors; (<any[]>(<any>window).MonacoEnvironment.onNodeCachedData).forEach(args => onNodeCachedData.apply(undefined, args));
// stop when being disposed // stop when being disposed
this._disposables.push({ this._disposables.push({
dispose() { dispose() {
(<any>self).require.config({ onNodeCachedDataError: undefined }, true); (<any>self).require.config({ onNodeCachedData: undefined }, true);
} }
}); });
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册