Subject: Re: bug#77961: 31.0.50; Rendering HTML email is very slow since commit #eab14d68b2e72b9a6b8b0cc67c9667c2bfbed4f5

From: Eli Zaretskii <[email-masked]>
Date: Tue, 22 Apr 2025 15:57:58 +0300

> From: Gerd Möllmann <[email-masked]>
> Cc: Iñigo Serna <[email-masked]>,  Eli Zaretskii
>  <[email-masked]>,
>   [email-masked]
> Date: Tue, 22 Apr 2025 10:02:58 +0200
> 
> Could you please also check with this diff?
> 
> diff --git a/src/dispnew.c b/src/dispnew.c
> index 24bf975ef9f..40df078aea6 100644
> --- a/src/dispnew.c
> +++ b/src/dispnew.c
> @@ -504,13 +504,16 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y
>  
>  	  while (row < end)
>  	    {
> -	      row->glyphs[LEFT_MARGIN_AREA]
> -		= xnrealloc (row->glyphs[LEFT_MARGIN_AREA],
> -			     dim.width, sizeof (struct glyph));
> -	      /* We actually need to clear only the 'frame' member, but
> -                 it's easier to clear everything.  */
> -	      memset (row->glyphs[LEFT_MARGIN_AREA], 0,
> -		      dim.width * sizeof (struct glyph));
> +	      if (dim.width > matrix->matrix_w || new_rows)
> +		{
> +		  row->glyphs[LEFT_MARGIN_AREA]
> +		    = xnrealloc (row->glyphs[LEFT_MARGIN_AREA],
> +				 dim.width, sizeof (struct glyph));
> +		  /* We actually need to clear only the 'frame' member, but
> +		     it's easier to clear everything.  */
> +		  memset (row->glyphs[LEFT_MARGIN_AREA], 0,
> +			  dim.width * sizeof (struct glyph));
> +		}

This means a very large matrix will not be downsized when possible.
Is that a good idea?  Maybe try replacing '>' with '!=' and see if it
also solves the problem?