From 62709dc69a77328bd817aab107880d9f20dc0430 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Tue, 22 Nov 2011 16:22:17 +0000 Subject: [PATCH] customdrawnws: A small fix for XCreateImage and adds a profiler: The profiler shows that XPutImage is so slow as to be unusable git-svn-id: trunk@33697 - --- .../customdrawn/customdrawnproc.pas | 11 +++++++++++ .../customdrawn/customdrawnwsforms.pp | 2 ++ .../customdrawn/customdrawnwsforms_x11.inc | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/lcl/interfaces/customdrawn/customdrawnproc.pas b/lcl/interfaces/customdrawn/customdrawnproc.pas index 12b5118016..a69ab9b3a7 100644 --- a/lcl/interfaces/customdrawn/customdrawnproc.pas +++ b/lcl/interfaces/customdrawn/customdrawnproc.pas @@ -14,6 +14,7 @@ uses GraphType, Controls, LCLMessageGlue, WSControls, LCLType, LCLProc; procedure UpdateControlLazImageAndCanvas(var AImage: TLazIntfImage; var ACanvas: TLazCanvas; AWidth, AHeight: Integer); +function DateTimeToMilliseconds(aDateTime: TDateTime): Int64; implementation @@ -47,5 +48,15 @@ begin {$ENDIF} end; +function DateTimeToMilliseconds(aDateTime: TDateTime): Int64; +var + TimeStamp: TTimeStamp; +begin + {Call DateTimeToTimeStamp to convert DateTime to TimeStamp:} + TimeStamp:= DateTimeToTimeStamp (aDateTime); + {Multiply and add to complete the conversion:} + Result:= TimeStamp.Time; +end; + end. diff --git a/lcl/interfaces/customdrawn/customdrawnwsforms.pp b/lcl/interfaces/customdrawn/customdrawnwsforms.pp index 203220bd9f..0ae27be5de 100644 --- a/lcl/interfaces/customdrawn/customdrawnwsforms.pp +++ b/lcl/interfaces/customdrawn/customdrawnwsforms.pp @@ -35,6 +35,8 @@ uses {$ifdef CD_Windows}Windows, WinProc,{$endif} {$ifdef CD_Cocoa}MacOSAll, CocoaAll, CocoaPrivate, CocoaUtils,{$endif} {$ifdef CD_X11}X, XLib, XUtil, XAtom, x11proc,{unitxft, Xft font support}{$endif} + // LazUtils + lazutf8sysutils, // LCL Controls, LCLType, Forms, LCLProc, GraphType, IntfGraphics, lazcanvas, // Widgetset diff --git a/lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc b/lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc index b304e2f2de..85e50ee0ee 100644 --- a/lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc +++ b/lcl/interfaces/customdrawn/customdrawnwsforms_x11.inc @@ -241,7 +241,13 @@ class procedure TCDWSCustomForm.DrawRawImageToGC(ARawImage: TRawImage; ADestWindowInfo: TX11WindowInfo; ADestX, ADestY, ADestWidth, ADestHeight: Integer); var Image: XLib.PXImage; + {$IFDEF VerboseCDPaintProfiler} + lTimeStart: TDateTime; + {$ENDIF} begin + {$IFDEF VerboseCDPaintProfiler} + lTimeStart := NowUTC(); + {$ENDIF} (* {$IFDEF VerboseFPGUI} WriteLn('>: DoDrawImageRect'); {$ENDIF}*) @@ -285,6 +291,9 @@ begin // FreeMem(Image^.data); // Image^.data := nil; // XDestroyImage(Image); + {$IFDEF VerboseCDPaintProfiler} + DebugLn(Format('[TCDWSCustomForm.DrawRawImageToGC] Paint duration: %d ms', [DateTimeToMilliseconds(NowUTC() - lTimeStart)])); + {$ENDIF} end; class procedure TCDWSCustomForm.EvPaint(const AWinControl: TWinControl; AWindowInfo: TX11WindowInfo); @@ -293,7 +302,13 @@ var lWidth, lHeight: Integer; lBitmap, lMask: HBITMAP; lRawImage: TRawImage; + {$IFDEF VerboseCDPaintProfiler} + lTimeStart: TDateTime; + {$ENDIF} begin + {$IFDEF VerboseCDPaintProfiler} + lTimeStart := NowUTC(); + {$ENDIF} {$IFDEF VerboseCDWindow} DebugLn(Format('[TCDWSCustomForm.EvPaint] AWindowInfo: %x', [PtrInt(AWindowInfo)])); {$ENDIF} @@ -336,6 +351,10 @@ begin // Now render it into the control AWindowInfo.Image.GetRawImage(lRawImage); DrawRawImageToGC(lRawImage, AWindowInfo, 0, 0, lWidth, lHeight); + + {$IFDEF VerboseCDPaintProfiler} + DebugLn(Format('[TCDWSCustomForm.EvPaint] Paint duration: %d ms', [DateTimeToMilliseconds(NowUTC() - lTimeStart)])); + {$ENDIF} end; {------------------------------------------------------------------------------