[fpc-devel] FPProfiler

Ondrej Pokorny lazarus at kluug.net
Mon Feb 19 12:17:19 CET 2018


On 19.02.2018 11:14, Sven Barth via fpc-devel wrote:
> Am 19.02.2018 11:01 schrieb "Ondrej Pokorny" <lazarus at kluug.net 
> <mailto:lazarus at kluug.net>>:
>
>     I agree with Simon here. It's a similar scenario like heaptrc. Why
>     not to add a compiler parameter to include profiling info? That
>     would be just great.
>
>
> It's not the same scenario as heaptrc is entirely working in the RTL 
> without any compiler extension (aside from the -gh parameter).

First of all - if you read my sentence again I said it is a */similar/* 
scenario and not the */same/* scenario.

BUT: to be completely exact a small compiler extension comes with -gh as 
well and that you cannot achieve with the RTL - if 
http://wiki.freepascal.org/heaptrc is not wrong: /Note: Do not add the 
heaptrc unit manually. The heaptrc unit needs to be loaded before 
lineinfo and only the compiler can do that./

So yes, -gh injects the heaptrc unit in front of lineinfo and the 
profiling compiler parameter injects profiling code into every compiled 
procedure/method. Don't tell me you don't see any similarities here :) 
And yes, even the word "same" can be seen as valid here, if you like 
word games :)

Second: FPProfiler works already now entirely in the RTL without any 
compiler extension. Your above statement just doesn't make sense.

> Profiling code however would require extensions to the compiler 
> whereby it would also need to handle exceptions correctly and such things.

Yes, I am again absolutely aware of this and I still believe it's 
possible and probably even not that hard to achieve. You just need to 
inject a try-finally block (= "handles exceptions correctly") around 
every procedure/function block:

procedure Test;
begin
   EnterProfiling('MyUnit.Test');
   try
     // <<< real code here
   finally
     LeaveProfiling('MyUnit.Test');
   end;
end;

Of course EnterProfiling and LeaveProfiling must be thread safe (every 
thread to be profiled separately) - and they even can be a part of the 
RTL, the same as heaptrc code is. EnterProfiling and LeaveProfiling must 
eat all intern exceptions - this is perfectly doable in the RTL.

All in all, in my eyes absolutely doable and a great and valid compiler 
extension. And again - very very similar scenario to heaptrc, if you 
don't like the word "same".

Ondrej
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20180219/6e556ee0/attachment.html>


More information about the fpc-devel mailing list