AminetAminet
Search:
84040 packages online
About
Recent
Browse
Search
Upload
Setup
Services

dev/debug/Profyler.lha

Mirror:Random
Showing:m68k-amigaosppc-amigaosppc-morphosi386-arosi386-amithlonppc-warpupppc-powerupgeneric
No screenshot available
Short:Software performance profiler for OS4
Author:Mike Steed
Uploader:72207 463 compuserve com (Mike Steed)
Type:dev/debug
Version:1.1
Requires:MUI >= 5; GCC
Architecture:ppc-amigaos >= 4.1.6
Date:2022-03-06
Download:http://aminet.net/dev/debug/Profyler.lha - View contents
Readme:http://aminet.net/dev/debug/Profyler.readme
Downloads:309

Note
====

Profyler is a tool for programmers only! You have to be able to compile a
program in order to use Profyler with it, so it is not useful for ordinary
users.


Introduction
============

Profyler is a software performance profiler -- or profiler for short -- for
AmigaOS 4. It allows the execution speed of the various functions that make
up a program to be measured, facilitating optimization of the program to
improve its performance.

More specifically, Profyler is a deterministic profiler, which adds code to
the program being profiled in order to implement the profiling functionality.
It uses the -finstrument-functions feature of the GCC compiler, which means
that it only works with C and C++ programs compiled with GCC. It also means
that a program must be compiled and then linked with LibProfyle in order to
be profiled; you can't profile a program that you can't compile.

There are two parts to Profyler: the Profyler program itself, which serves as
the user interface; and LibProfyle, a linkable library that provides the
profiling functionality. To profile a program you compile it and link it with
LibProfyle, then run it to generate the profile data in memory. You then run
Profyler to access the profile data and display it in a useful format.


Features
========

o Measures the following parameters for every executed function in a program,
  displaying them in a list browser:

  - The function's name (C++ names are demangled)
  - The source file and line number where the function is defined
  - The number of times the function has been executed
  - The total execution time of all calls to the function, *including* any
    other functions it calls
  - The above as a percentage of the total execution time of the program
  - The average execution time of the function per call, *including* any
    other functions it calls
  - The total execution time of all calls to the function, *excluding* any
    other functions it calls
  - The above as a percentage of the total execution time of the program
  - The average execution time of the function per call, *excluding* any
    other functions it calls

o All the usual list browser controls are available:

  - Can sort the list by any of the columns, in ascending or descending
    order
  - Can hide any of the columns if they are not of interest
  - Can drag and drop the columns to rearrange them

o Can profile up to nine different programs, with a different tab and list
  browser for each; allows profiling of programs that interact with each
  other

o Can save the profile data to a text file (or send it to a printer) for
  record keeping or for further review

o Can save the profile data to a CSV file for import to a spreadsheet or
  other program for additional processing

o Can disable profiling of parts of a function (including OS calls) that
  involve user interaction, so user response time doesn't affect profiling

o Can avoid profiling of specific functions; useful for very brief functions
  that get called a lot, where the overhead of the profiler can greatly slow
  the program

o Doesn't depend on any particular PowerPC variant or hardware, so should
  work with any Amiga model that supports OS4

o Automatically adapts to the EClock speed of the machine it's running on;
  the faster the EClock the finer the measurement resolution

o The profiling code is optimized to be as quick as possible; for many
  applications the slowdown due to profiling is barely noticeable

o Can profile single-threaded programs, linked libraries, and shared objects;
  in many cases no modification to the source code is required


Limitations
===========

o Can profile only the main thread of multi-threaded programs

o Cannot profile functions that are called from a different context, such
  as a callback hook or custom BOOPSI gadget (MUI's custom classes and
  notification hooks are fine, as they are called from the program's
  context)

o Cannot profile shared (Amiga-style) libraries or devices

o Some compiler optimizations -- such as inlined functions -- cause problems
  with profiling and need to be disabled

o Some program constructs -- such as longjmp() and exit() -- cause problems
  with profiling

o The profiling code noticeably increases the size of a program being
  profiled, and can significantly slow speed-sensitive programs


What's New in v. 1.1
====================

o A workaround has been added to compensate for a bug in Exec's ObtainDebug-
  Symbol call that prevented source file information (file name and line
  number) for each profiled function from being displayed

o Sorting the profiled functions by source file location used alphabetic
  sort order which caused, for example, line 9 to come after line 1000;
  they're now sorted alphabetically by file name, and then numerically by
  line number

o Added the file MyLib.so to the Test directory; it was inadvertently left
  out of the version 1.0 release, preventing the SOLibTest program from
  working


Requirements
============

o AmigaOS 4.1.6 (specifically, Exec version 53.41) or newer; Profyler and
  LibProfyle have been tested under OS 4.1.6 and OS 4.1.FE.2 on an X1000

o MUI 5 or newer; Profyler has been tested with recent versions of MUI 5

o GCC. LibProfyle should work with any version of GCC that supports the
  -finstrument-functions feature; it has been tested with GCC 4.2.4 and
  GCC 8.3.0, with both C and C++ code, and with both newlib and clib2


Source Code
===========

Profyler and LibProfyle are open source. The source code is included.



Contents of dev/debug/Profyler.lha
PERMISSION  UID  GID    PACKED    SIZE  RATIO METHOD CRC     STAMP     NAME
---------- ----------- ------- ------- ------ ---------- ------------ ----------
[unknown]                 9565   11420  83.8% -lh5- 73e6 Jan 15 18:04 Profyler.info
[unknown]                 7014   17992  39.0% -lh5- 4902 Feb 27  2000 Profyler/COPYING-GPL
[unknown]                 9635   26521  36.3% -lh5- 965f Jun  5  2021 Profyler/COPYING-LGPL
[unknown]                 9577   11420  83.9% -lh5- 87ba Jan 15 19:03 Profyler/LibProfyle.info
[unknown]                  423    1194  35.4% -lh5- bf83 Jan 13 17:06 Profyler/LibProfyle/Makefile
[unknown]                  610    2214  27.6% -lh5- ef41 Jan  4 00:21 Profyler/LibProfyle/noprofile.h
[unknown]                12287   45265  27.1% -lh5- fa08 Jan 10 23:49 Profyler/LibProfyle/Profyle.c
[unknown]                 1501    4669  32.1% -lh5- e617 Jan  4 00:02 Profyler/LibProfyle/profyle.h
[unknown]                 3500   10997  31.8% -lh5- f004 Jan  7 17:45 Profyler/LibProfyle/ProfyleData.h
[unknown]                44681  110692  40.4% -lh5- c2cf Mar  5 16:15 Profyler/Profyler
[unknown]                29750   85203  34.9% -lh5- 9dbc Mar  5 16:39 Profyler/Profyler.guide
[unknown]                 1980    2414  82.0% -lh5- 1e92 Jan 15 18:04 Profyler/Profyler.guide.info
[unknown]                 2691    4650  57.9% -lh5- 28c4 Jan 15 18:14 Profyler/Profyler.info
[unknown]                 9573   11420  83.8% -lh5- ba8e Jan 15 19:05 Profyler/Source.info
[unknown]                  593    1800  32.9% -lh5- a980 Jan 15 18:56 Profyler/Source/Makefile
[unknown]                12711   47510  26.8% -lh5- 81c1 Mar  1 22:33 Profyler/Source/ProfDB.c
[unknown]                 1103    3662  30.1% -lh5- 3b8c Jan  4 00:01 Profyler/Source/ProfDB.h
[unknown]                19239   81988  23.5% -lh5- b5fa Jan  8 20:09 Profyler/Source/ProfGUI.c
[unknown]                  869    3145  27.6% -lh5- 3883 Jan  4 00:01 Profyler/Source/ProfGUI.h
[unknown]                 7013   27340  25.7% -lh5- 7908 Jan  7 17:58 Profyler/Source/ProfIPC.c
[unknown]                  770    2866  26.9% -lh5- 921f Jan  4 00:00 Profyler/Source/ProfIPC.h
[unknown]                 8489   28870  29.4% -lh5- dfb1 Feb 26 19:26 Profyler/Source/Profyler.c
[unknown]                 3110   10990  28.3% -lh5- c623 Mar  5 16:14 Profyler/Source/Profyler.h
[unknown]                 9574   11420  83.8% -lh5- f5ad Mar  2 22:03 Profyler/Test.info
[unknown]               269159  699295  38.5% -lh5- 218d Jan 13 17:06 Profyler/Test/Exception
[unknown]                 2095    9443  22.2% -lh5- 602d Jan  4 00:15 Profyler/Test/Exception.cc
[unknown]                 8206   24022  34.2% -lh5- c801 Jan 13 17:06 Profyler/Test/LinkLibTest
[unknown]                 8161   23974  34.0% -lh5- b656 Jan 13 17:06 Profyler/Test/LinkLibTest2
[unknown]                 1205    4440  27.1% -lh5- 0bc0 Jan 15 19:01 Profyler/Test/Makefile
[unknown]                38867  113027  34.4% -lh5- dc5a Jan 13 17:06 Profyler/Test/MultiThread
[unknown]                 2603   10065  25.9% -lh5- 05b3 Jan  4 00:16 Profyler/Test/MultiThread.c
[unknown]                  513    2079  24.7% -lh5- 689c Jan  4 00:17 Profyler/Test/MyLib.h
[unknown]                 5031   20879  24.1% -lh5- 6248 Jan 22 18:52 Profyler/Test/MyLib.so
[unknown]                 1237    5008  24.7% -lh5- edb3 Jan  4 00:20 Profyler/Test/MyLibTest.c
[unknown]                  633    3628  17.4% -lh5- 08d6 Jan  4 00:17 Profyler/Test/MyLib_Hello.c
[unknown]                  778    4026  19.3% -lh5- a620 Jan  4 00:18 Profyler/Test/MyLib_MyPrintf.c
[unknown]                  643    3634  17.7% -lh5- 703f Jan  4 00:18 Profyler/Test/MyLib_World.c
[unknown]                19268   52521  36.7% -lh5- 2c58 Jan 13 17:06 Profyler/Test/Recursion
[unknown]                 1593    7130  22.3% -lh5- ae07 Jan  4 00:18 Profyler/Test/Recursion.c
[unknown]                 9718   25383  38.3% -lh5- adb3 Jan 13 17:06 Profyler/Test/SetJump
[unknown]                 2112    9490  22.3% -lh5- b5c5 Jan  4 00:19 Profyler/Test/SetJump.c
[unknown]                19522   53027  36.8% -lh5- 536a Jan 13 17:06 Profyler/Test/Simple
[unknown]                 1813    8897  20.4% -lh5- f095 Jan 10 18:14 Profyler/Test/Simple.c
[unknown]               262395  680286  38.6% -lh5- cead Jan 13 17:06 Profyler/Test/SimplePlus
[unknown]                 1865    8828  21.1% -lh5- a509 Jan 10 17:52 Profyler/Test/SimplePlus.cc
[unknown]                 8520   25643  33.2% -lh5- 86a6 Jan 13 17:06 Profyler/Test/SOLibTest
[unknown]                19184   52451  36.6% -lh5- 2907 Jan 13 17:06 Profyler/Test/Structor
[unknown]                 1467    6947  21.1% -lh5- 0211 Jan  4 00:19 Profyler/Test/Structor.c
[unknown]               267528  697150  38.4% -lh5- a30b Jan 13 17:06 Profyler/Test/StructorPlus
[unknown]                 1695    7593  22.3% -lh5- fb77 Jan  4 00:20 Profyler/Test/StructorPlus.cc
---------- ----------- ------- ------- ------ ---------- ------------ ----------
 Total        50 files 1162069 3124528  37.2%            Mar  7 03:39

Aminet © 1992-2023 Urban Müller and the Aminet team. Aminet contact address: <aminetaminet net>