Dev/Docu/ru/Profiler.odc

DevProfiler

DEFINITION DevProfiler;

 PROCEDURE SetProfileList;
 PROCEDURE SetModuleList (list: ARRAY OF CHAR);
 PROCEDURE Start;
 PROCEDURE Stop;
 PROCEDURE ShowProfile;
 PROCEDURE Reset;
 
 PROCEDURE Execute;
 
 PROCEDURE StartGuard (VAR par: Dialog.Par);
 PROCEDURE StopGuard (VAR par: Dialog.Par);

END DevProfiler.


DevProfiler - это статистический профилировщик для программ на Компонентном Паскале. Профилировщик измеряет, как много процессорного времени проходит в отдельных процедурах программы. Статистический профилировщик определяет через регулярные промежутки времени (управляемые прерываниями), в какой процедуре какого модуля программа в настоящий момент выполняется. Эти измерения сохраняются и могут потом использоваться при показе профиля.
Профили могут быть взяты для всех модулей, или для выделенного списка конкретных интересующих модулей. Профилировка может быть начата и остановлена интерактивно, или через программный интерфейс. Последнее часто делает возможным более точное измерение.

Возможное меню:

MENUS
	 "Set Profile List" "" "DevProfiler.SetProfileList" "DevProfiler.StartGuard"
	 "Start Profiler" "" "DevProfiler.Start" "DevProfiler.StartGuard"
	 "Stop Profiler" "" "DevProfiler.Stop; DevProfiler.ShowProfile" "DevProfiler.StopGuard"
	 "Execute" "" "DevProfiler.Execute" "TextCmds.SelectionGuard"
END

Программный пример
Следующий пример показывает, как можно использовать программный интерфейс профилировщика. Здесь профилируется компиляция модуля, то есть, команда DevCompiler.Compile.

	 PROCEDURE ProfiledCompile*;
		VAR res: INTEGER;
	BEGIN
		DevProfiler.SetModuleList("DevCPM DevCPS DevCPT DevCPB DevCPP DevHostCPL 
	DevHostCPC DevHostCPV");
		DevProfiler.Start;
		Dialog.Call("DevCompiler.Compile", "", res);
		DevProfiler.Stop;
		DevProfiler.ShowProfile;
		DevProfiler.Reset
	 END ProfiledCompile;

Эта процедура порождает нечто подобное следующему выводу:

	Module	% per module
	Procedure		% per procedure

DevCPT	37
	InsertImport		Џ7
	Find		Џ4
	InName		Џ4
	InStruct		Џ4
	FPrintName		Џ3
	FPrintSign		Џ1
	IdFPrint		Џ1
	FPrintObj		Џ1

DevCPM	16
	ReadNum		Џ4
	Get		Џ3
	FPrint		Џ2
	SymRCh		Џ2
	SymRInt		Џ2

DevHostCPL	10
	GenByte		Џ1
	GenCExt		Џ1
	GenMove		Џ1

DevHostCPC	Џ7
	GetReg		Џ1
	Free		Џ1

DevCPS	Џ7
	Identifier		Џ4
	Get		Џ1

DevCPB	Џ6

DevCPP	Џ6
	selector		Џ1

DevHostCPV	Џ5
	Check		Џ1

samples:	782	100%
	in profiled modules		306		39%
	other		476		61%


В этом примере около 37% замеренного периода времени было проведено в различных процедурах модуля DevCPT. Только процедура InsertImport отняла около 7% времени. Заметим, что процедуры, которые используют менее чем 1% времени, не показываются, поэтому сумма всех процедур DevCPT не составляет 37%.
Некоторое время может проводиться в неизмеренных модулях, или вообще не в модулях Компонентного Паскаля, а, например, в реализации файловой системы базовой операционной системы. По этим причинам, а также поскольку модули, использующие менее 1% времени, не показываются, сумма по всем модулям не составит 100%.


PROCEDURE SetProfileList
Эта процедура берет список выделенных имен модулей и регистрирует его. Список модулей будет профилироваться при вызове Start. Если нет выделения, будут профилироваться все модули из списка.

PROCEDURE SetModuleList (list: ARRAY OF CHAR)
Похожа на SetProfileList, но с явным параметром вместо неявного параметра - выделения. Эта процедура полезна, когда профилировщик вызывается из программы, а не интерактивно.

PROCEDURE Start
Начинает профилировку.

PROCEDURE Stop
Прекращает профилировку.

PROCEDURE ShowProfile
Показывает самый последний измеренный профиль в новом окне.

PROCEDURE Reset
Освобождает память, использованную профилировщиком, включая последний измеренный профиль и список модулей.

PROCEDURE Execute
Похожа на DevDebug.Execute. Время выполнения (в милисекундах) записывается в рабочий журнал.