[SOLVED] Improved CPU cache usage at packages/fcl- image/src/pixtools.pp lazarus / 64-FPC development ---------------------------------------------------------------------- lagprogramming · 2023-04-14 09:24 packages/fcl-image/src/pixtools.pp has: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure FillRectangleColor (Canv:TFPCustomCanvas; x1,y1, x2,y2:integer; const color:TFPColor);var x,y : integer;begin  SortRect (x1,y1, x2,y2);  with Canv do    begin    for x := x1 to x2 do      for y := y1 to y2 do        DrawPixel(x,y,color);    end;end;Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure FillRectangleImage (Canv:TFPCustomCanvas; x1,y1, x2,y2:integer; const Image:TFPCustomImage);var x,y : integer;begin  with image do    for x := x1 to x2 do      for y := y1 to y2 do        Canv.DrawPixel(x,y, colors[x mod width, y mod height]);end;Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i procedure FillRectangleImageRel (Canv:TFPCustomCanvas; x1,y1, x2,y2:integer; const Image:TFPCustomImage);var x,y : integer;begin  with image do    for x := x1 to x2 do      for y := y1 to y2 do        Canv.DrawPixel(x,y, colors[(x-x1) mod width, (y-y1) mod height]);end; The following patch improves CPU cache usage by switching the x and y loops. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i diff --git a/packages/fcl-image/src/pixtools.pp b/packages/fcl- image/src/pixtools.ppindex b8baccb5bb..da0fbfe700 100644--- a/packages/fcl-image/src/pixtools.pp+++ b/packages/fcl- image/src/pixtools.pp@@ -73,8 +73,8 @@ procedure FillRectangleColor (Canv:TFPCustomCanvas; x1,y1, x2,y2:integer; const   SortRect (x1,y1, x2,y2);   with Canv do     begin-    for x := x1 to x2 do-      for y := y1 to y2 do+    for y := y1 to y2 do+      for x := x1 to x2 do       DrawPixel(x,y,color);     end; end;@@ -555,8 +555,8 @@ procedure FillRectangleImage (Canv:TFPCustomCanvas; x1,y1, x2,y2:integer; const var x,y : integer; begin   with image do-    for x := x1 to x2 do-      for y := y1 to y2 do+    for y := y1 to y2 do+      for x := x1 to x2 do         Canv.DrawPixel(x,y, colors[x mod width, y mod height]); end; @@ -564,8 +564,8 @@ procedure FillRectangleImageRel (Canv:TFPCustomCanvas; x1,y1, x2,y2:integer; con var x,y : integer; begin   with image do-    for x := x1 to x2 do-      for y := y1 to y2 do+    for y := y1 to y2 do+      for x := x1 to x2 do       Canv.DrawPixel(x,y, colors[(x-x1) mod width, (y-y1) mod height]); end; ---------------------------------------------------------------------- AlexTP · 2023-04-14 10:21 Posted to bugtracker, https://gitlab.com/freepascal.org/fpc/source/-/issues/40242