@@ -792,7 +792,7 @@ class TreemapViewer {
792792 * @param {LH.Treemap.Node } node
793793 */
794794 getNodeCompressionRatio ( node ) {
795- if ( node . encodedBytes ) {
795+ if ( node . encodedBytes !== undefined ) {
796796 return node . encodedBytes / node . resourceBytes ;
797797 }
798798
@@ -801,7 +801,7 @@ class TreemapViewer {
801801 return depthOneNode . encodedBytes / depthOneNode . resourceBytes ;
802802 }
803803
804- return 1 ;
804+ return null ;
805805 }
806806
807807 /**
@@ -844,11 +844,23 @@ class TreemapViewer {
844844
845845 if ( ! sizes ) {
846846 const compressionRatio = this . getNodeCompressionRatio ( node ) ;
847+
848+ // script-treemap-data nodes have a value for encodedBytes when it comes
849+ // directly from a network record. But nodes from a source map bundle don't
850+ // have that, so in that case estimate it from the compression ratio of the
851+ // depth 1 node.
852+ let encodedBytes ;
853+ if ( node . encodedBytes !== undefined ) {
854+ encodedBytes = node . encodedBytes ;
855+ } else if ( compressionRatio !== null ) {
856+ encodedBytes = node . resourceBytes * compressionRatio ;
857+ }
858+
847859 sizes = {
848- size : this . getNodeDisplaySize ( node , compressionRatio ) ?? 0 ,
860+ size : this . getNodeDisplaySize ( node , compressionRatio ?? 1 ) ?? 0 ,
849861 resourceBytes : node . resourceBytes ,
850- encodedBytes : node . encodedBytes ,
851- unusedBytes : this . getNodeUnusedBytes ( node , compressionRatio ) ,
862+ encodedBytes,
863+ unusedBytes : this . getNodeUnusedBytes ( node , compressionRatio ?? 1 ) ,
852864 } ;
853865 this . nodeToSizesMap . set ( node , sizes ) ;
854866 }
0 commit comments