improve and add statistics

This commit is contained in:
Tobias Koppers 2020-08-14 06:29:10 +02:00
parent b741dde35e
commit f9fe121fc8
5 changed files with 78 additions and 17 deletions

View File

@ -2063,6 +2063,8 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
}
codeGeneration(callback) {
let statModulesFromCache = 0;
let statModulesGenerated = 0;
const {
chunkGraph,
moduleGraph,
@ -2113,6 +2115,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
if (err) return callback(err);
let result;
if (!cachedResult) {
statModulesGenerated++;
try {
result = module.codeGeneration({
chunkGraph,
@ -2129,6 +2132,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
};
}
} else {
statModulesFromCache++;
result = cachedResult;
}
for (const runtime of runtimes) {
@ -2151,6 +2155,12 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
this.errors.push(error);
}
}
this.logger.log(
`${Math.round(
(100 * statModulesGenerated) /
(statModulesGenerated + statModulesFromCache)
)}% code generated (${statModulesGenerated} generated, ${statModulesFromCache} from cache)`
);
callback();
}
);
@ -2512,10 +2522,12 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
}
createModuleHashes() {
let statModulesHashed = 0;
const chunkGraph = this.chunkGraph;
const { hashFunction, hashDigest, hashDigestLength } = this.outputOptions;
for (const module of this.modules) {
for (const runtime of chunkGraph.getModuleRuntimes(module)) {
statModulesHashed++;
const moduleHash = createHash(hashFunction);
module.updateHash(moduleHash, {
chunkGraph,
@ -2532,6 +2544,11 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
);
}
}
this.logger.log(
`${statModulesHashed} modules hashed (${
Math.round((100 * statModulesHashed) / this.modules.size) / 100
} variants per module in average)`
);
}
createHash() {

View File

@ -33,6 +33,10 @@ class FlagDependencyExportsPlugin {
const logger = compilation.getLogger(
"webpack.FlagDependencyExportsPlugin"
);
let statRestoredFromCache = 0;
let statFlaggedUncached = 0;
let statNotCached = 0;
let statQueueItemsProcessed = 0;
/** @type {Queue<Module>} */
const queue = new Queue();
@ -46,6 +50,7 @@ class FlagDependencyExportsPlugin {
module.buildInfo.cacheable !== true ||
typeof module.buildInfo.hash !== "string"
) {
statFlaggedUncached++;
// Enqueue uncacheable module for determining the exports
queue.enqueue(module);
moduleGraph.getExportsInfo(module).setHasProvideInfo();
@ -58,10 +63,12 @@ class FlagDependencyExportsPlugin {
if (err) return callback(err);
if (result !== undefined) {
statRestoredFromCache++;
moduleGraph
.getExportsInfo(module)
.restoreProvided(result);
} else {
statNotCached++;
// Without cached info enqueue module for determining the exports
queue.enqueue(module);
moduleGraph.getExportsInfo(module).setHasProvideInfo();
@ -256,6 +263,8 @@ class FlagDependencyExportsPlugin {
while (queue.length > 0) {
module = queue.dequeue();
statQueueItemsProcessed++;
exportsInfo = moduleGraph.getExportsInfo(module);
if (!module.buildMeta || !module.buildMeta.exportsType) {
if (exportsInfo.otherExportsInfo.provided !== null) {
@ -283,6 +292,20 @@ class FlagDependencyExportsPlugin {
}
logger.timeEnd("figure out provided exports");
logger.log(
`${Math.round(
100 -
(100 * statRestoredFromCache) /
(statRestoredFromCache +
statNotCached +
statFlaggedUncached)
)}% of exports of modules have been determined (${statNotCached} not cached, ${statFlaggedUncached} flagged uncacheable, ${statRestoredFromCache} from cache, ${
statQueueItemsProcessed -
statNotCached -
statFlaggedUncached
} additional calculations due to dependencies)`
);
logger.time("store provided exports into cache");
asyncLib.each(
modulesToStore,

View File

@ -936,14 +936,14 @@ const visitModules = (
}
logger.log(
`Statistics: ${statProcessedQueueItems} queue items processed (${statProcessedBlocks} blocks)`
`${statProcessedQueueItems} queue items processed (${statProcessedBlocks} blocks)`
);
logger.log(`Statistics: ${statConnectedChunkGroups} chunk groups connected`);
logger.log(`${statConnectedChunkGroups} chunk groups connected`);
logger.log(
`Statistics: ${statProcessedChunkGroupsForMerging} chunk groups processed for merging (${statMergedAvailableModuleSets} module sets, ${statForkedAvailableModules} forked, ${statForkedAvailableModulesCount} + ${statForkedAvailableModulesCountPlus} modules forked, ${statForkedMergedModulesCount} + ${statForkedMergedModulesCountPlus} modules merged into fork, ${statForkedResultModulesCount} resulting modules)`
`${statProcessedChunkGroupsForMerging} chunk groups processed for merging (${statMergedAvailableModuleSets} module sets, ${statForkedAvailableModules} forked, ${statForkedAvailableModulesCount} + ${statForkedAvailableModulesCountPlus} modules forked, ${statForkedMergedModulesCount} + ${statForkedMergedModulesCountPlus} modules merged into fork, ${statForkedResultModulesCount} resulting modules)`
);
logger.log(
`Statistics: ${statChunkGroupInfoUpdated} chunk group info updated (${statChildChunkGroupsReconnected} already connected chunk groups reconnected)`
`${statChunkGroupInfoUpdated} chunk group info updated (${statChildChunkGroupsReconnected} already connected chunk groups reconnected)`
);
};

View File

@ -103,7 +103,7 @@ class ResolverCachePlugin {
compilation.hooks.finishModules.tap("ResolverCachePlugin", () => {
if (realResolves + cachedResolves > 0) {
const logger = compilation.getLogger("webpack.ResolverCachePlugin");
logger.debug(
logger.log(
`${Math.round(
(100 * realResolves) / (realResolves + cachedResolves)
)}% really resolved (${realResolves} real resolves with ${cacheInvalidResolves} cached but invalid, ${cachedResolves} cached valid, ${concurrentResolves} concurrent)`

View File

@ -1362,11 +1362,20 @@ Entrypoint <CLR=BOLD>main</CLR> = <CLR=32,BOLD>main.js</CLR>
<CLR=31,BOLD>DEBUG</CLR> <CLR=BOLD>LOG from ./node_modules/custom-loader/index.js Named Logger ./node_modules/custom-loader/index.js!./index.js</CLR>
Message with named logger
<CLR=BOLD>LOG from webpack.FlagDependencyExportsPlugin</CLR>
<CLR=BOLD>100% of exports of modules have been determined (1 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies)</CLR>
+ 3 hidden lines
<CLR=BOLD>LOG from webpack.Compilation</CLR>
<CLR=BOLD>1 modules hashed (1 variants per module in average)</CLR>
<CLR=BOLD>100% code generated (1 generated, 0 from cache)</CLR>
+ 19 hidden lines
<CLR=BOLD>LOG from webpack.buildChunkGraph</CLR>
<CLR=BOLD>Statistics: 2 queue items processed (1 blocks)</CLR>
<CLR=BOLD>Statistics: 0 chunk groups connected</CLR>
<CLR=BOLD>Statistics: 0 chunk groups processed for merging (0 module sets, 0 forked, 0 + 0 modules forked, 0 + 0 modules merged into fork, 0 resulting modules)</CLR>
<CLR=BOLD>Statistics: 0 chunk group info updated (0 already connected chunk groups reconnected)</CLR>
<CLR=BOLD>2 queue items processed (1 blocks)</CLR>
<CLR=BOLD>0 chunk groups connected</CLR>
<CLR=BOLD>0 chunk groups processed for merging (0 module sets, 0 forked, 0 + 0 modules forked, 0 + 0 modules merged into fork, 0 resulting modules)</CLR>
<CLR=BOLD>0 chunk group info updated (0 already connected chunk groups reconnected)</CLR>
+ 5 hidden lines
"
`;
@ -2148,11 +2157,20 @@ LOG from LogTestPlugin
End
+ 6 hidden lines
LOG from webpack.FlagDependencyExportsPlugin
100% of exports of modules have been determined (6 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies)
+ 3 hidden lines
LOG from webpack.Compilation
6 modules hashed (1 variants per module in average)
100% code generated (6 generated, 0 from cache)
+ 19 hidden lines
LOG from webpack.buildChunkGraph
Statistics: 15 queue items processed (9 blocks)
Statistics: 3 chunk groups connected
Statistics: 3 chunk groups processed for merging (3 module sets, 0 forked, 0 + 0 modules forked, 0 + 0 modules merged into fork, 0 resulting modules)
Statistics: 3 chunk group info updated (0 already connected chunk groups reconnected)
15 queue items processed (9 blocks)
3 chunk groups connected
3 chunk groups processed for merging (3 module sets, 0 forked, 0 + 0 modules forked, 0 + 0 modules merged into fork, 0 resulting modules)
3 chunk group info updated (0 already connected chunk groups reconnected)
+ 13 hidden lines
"
`;
@ -2409,6 +2427,7 @@ LOG from webpack.Compiler
LOG from webpack.FlagDependencyExportsPlugin
<t> restore cached provided exports: X ms
<t> figure out provided exports: X ms
100% of exports of modules have been determined (6 not cached, 0 flagged uncacheable, 0 from cache, 0 additional calculations due to dependencies)
<t> store provided exports into cache: X ms
LOG from webpack.InnerGraphPlugin
@ -2420,7 +2439,9 @@ LOG from webpack.Compilation
<t> optimize dependencies: X ms
<t> create chunks: X ms
<t> optimize: X ms
6 modules hashed (1 variants per module in average)
<t> module hashing: X ms
100% code generated (6 generated, 0 from cache)
<t> code generation: X ms
<t> runtime requirements: X ms
<t> hashing: initialize hash: X ms
@ -2453,10 +2474,10 @@ LOG from webpack.buildChunkGraph
<t> visitModules: merging available modules: X ms
<t> visitModules: check modules for revisit: X ms
<t> visitModules: visiting: X ms
Statistics: 15 queue items processed (9 blocks)
Statistics: 3 chunk groups connected
Statistics: 3 chunk groups processed for merging (3 module sets, 0 forked, 0 + 0 modules forked, 0 + 0 modules merged into fork, 0 resulting modules)
Statistics: 3 chunk group info updated (0 already connected chunk groups reconnected)
15 queue items processed (9 blocks)
3 chunk groups connected
3 chunk groups processed for merging (3 module sets, 0 forked, 0 + 0 modules forked, 0 + 0 modules merged into fork, 0 resulting modules)
3 chunk group info updated (0 already connected chunk groups reconnected)
<t> visitModules: X ms
<t> connectChunkGroups: X ms
<t> cleanup: X ms