CachegrindVisualizer 0.1

Develar

Новичок
CachegrindVisualizer 0.1

CachegrindVisualizer — это кроссплатформенная программа для визуализации файлов в формате Callgrind, в частности, его подмножества используемого Cachegrind. Профайлер Xdebug является совместимым с Cachegrind. Программа написана с использованием Apollo — под Linux Apollo будет в 2008 году, а Mac OS X поддерживает уже сейчас, но мака у меня нет (поэтому скомпилировать под него не могу), так что на данный момент только Windows XP SP 2 или Vista (не протестировано).

CachegrindVisualizer строит граф в формате DOT, который с помощью Graphviz можно преобразовать в 18 других форматов (VRML не поддерживается), в том числе, в SVG — самое вкусное. Сам CachegrindVisualizer не визуализирует формат DOT, для просмотра графа как изображения вам необходимо самостоятельно преобразовать его в нужный вам формат. Для удобства работы рекомендую использовать просмотровщик — ничего лучше чем ZGRViewer под Windows я не нашел (только не используйте его для экспорта — он не поддерживает русский язык, используйте dot, эта программа входит в состав Graphviz). ZGRViewer далеко не идеал, но ничего лучшего я не нашел, времени на реализацию своего идеального у меня в ближайший месяц не будет.

Скачать:
0) Apollo Runtime
1) CachegrindVisualizer
2) Graphviz
3) ZGRViewer

Построение графа происходит автоматически после анализа, изменения настроек или выделения ветки дерева, дата построения отображается в статусной строке, сам граф располагается там же, где и исходный файл профилирования, с тем же именем, но с раширением dot. Граф можно строить как для всей системы в целом, так и для любой из ее подсистем — выделением соответствующей ветки дерева.
Настроить, какой каталог содержит файлы профилирования для использования его по умолчанию в диалоге "Открыть", нельзя — каталогом по умолчанию считается тот, откуда в последний раз брался файл. Настройки построения графа можно сохранять и загружать.
Имя вкладки это имя анализируемого файла с удалением "cachegrind.out.". Управлять вкладками пока нельзя — в следующей версии.

При анализе осуществляется корректировка записей о деструкторах — xdebug пишет их так, как оно есть и как оно зависит от внутренних механизмов PHP — но обычному смертному PHP-программисту этих подробностей знать не надо и CachegrindVisualizer в независимости от того, как была завершена программа — сама или ей помогли (например, exit) или был ли присвоен инстанцированный класс какой-либо переменной, размещает эти записи в ветке main, и, таким образом, у вас всегда дерево, а не лес.

Скорость (Pentium D 2.8, 3 ГБ ОЗУ):
256 КБ. Анализ: 63 мс. Построение графа: 31 мс.
58,2 МБ. Анализ: 13 с. Построение графа: 30 мс.

Спасибо StUV за предоставленный всеобъемлющий тестовый файл и хорошее настроение от просмотра получившегося в итоге человечка.

Пара вопросов:
Нужен ли цветной граф, такой как в KCachegrind?
Нужна ли возможность открыть 10 100 МБ файлов профилирования и при этом иметь всего лишь 300 МБ занятой оперативной памяти, а не 3 ГБ?
Нужно ли помимо графа строить и диаграммы — использование файлов, рейтинги (это, скорее всего, и так будет когда-нибудь, так как оно нужно и мне самому)?

Вопросы и предложения в Issues на http://code.google.com/p/cachegrindvisualizer/issues/list.

TODO:
* Кеширование результатов анализа для файлов более 1 МБ
* Управление вкладками

Пиктограммы для токенов были взяты из шаблона phpDocumentor earthli и доработаны для прозрачности (разделять на ветка/лист не стал — рябит в глазах). В отличие от WinCacheGrind встроенные классы PHP я считаю не функцией, то есть php::blitz->blitz будет иметь пиктограмму конструктора, а php::blitz->set пиктограмму метода. Пиктограмма для программы в розыске ;).

Кто работал во flex приложениях, учтите, что все использованные управляющие элементы доработаны для нормального использования: Tree и DataGrid знают о щелчке в пустом месте для снятия выделения; Tree, DataGrid и List поддерживают Ctrl + A; NumericStepper поддерживает колесо мыши и корректно устанавливает курсор ввода; TextInput поддерживает Ctrl + Z/Y.
Конвертация графа построенного в русской версии CachegrindVisualizer из PS в PDF стандартной программой dot невозможна из-из русских букв. Построение постраничного графа в данный момент не реализовано.

-~{}~ 11.06.07 13:06:

О, бог услышал молитвы и теперь можно материться в открытом баг-трекере Adobe. Вышла бета Apollo и теперь это кодовое имя изменено на Air. Надеюсь, оно не будет жрать 1,7 ГБ при загрузке 256 МБ файла. К вечеру будет CachegrindVisualizer 0.2 — должно работать шустрее и лучше.

>> Нужен ли цветной граф, такой как в KCachegrind
решил кодировать в HSV — не радуга, а HS в зависимости от time и callTime для стрелок.

-~{}~ 13.06.07 08:37:

http://code.google.com/p/cachegrindvisualizer/ 0.2

сжатие путем использования указателей - снижение объема занимаемой памяти (реализовал бы Derick Rethans Name Compression) и открытие файлов весом в несколько ГБ на выходных в 0.3
 

slach

Новичок
спасибо полезная тузла
а почему именно на Apollo???
дайте ссылку в топике, для тех кто не знает откуда качать runtime ;) а?
 

Develar

Новичок
>> а почему именно на Apollo???
Я веб-разработчик. Мне не лень выучить за пару недель новую технологию и освоиться с ней за пару месяцев, но кто будет переписывать уже написанный код? Apollo (благодаря баранам-маркетологам теперь это имя изменено на безликое бюрократическое Air) дает мне возможность писать многоцелевые универсальные компоненты, могущие работать как в обозревателе, так и в ОС.

>> дайте ссылку в топике, для тех кто не знает откуда качать runtime
http://labs.adobe.com/downloads/air.html

Ссылка дана в сообщении в разделе скачать под пунктом 0, найти вы можете ее также и на странице проекта - http://code.google.com/p/cachegrindvisualizer в блоке Links. Неявная установка будет только в финальном релизе Air — пока что простите за неудобство.

-~{}~ 14.06.07 14:10:

добавил к ссылкам на странице проекта их описание. Полноценные страницы документации Installation и Usage будут после версии 0.3.

-~{}~ 14.06.07 21:27:

0.2.1 ничего нового, только интерфейс.

* Поддержка Drag and Drop, — выделяете несколько файлов и тащите их в приложение: они все будут проанализированы.
* Можно открыть сразу несколько файлов.
* Локализация на лету (выбор локали постоянен, при новом запуске программы она будет такой же, какой и была при предыдущем запуске). Обратите внимание, что при этом все графы будут перестроены с учетом новой локали.
* Максимальное значение minNodeCost (минимальная стоимость узла) 99, а не 100.
* От пользователя скрыт тот факт, что программа сначала запускается, а потом разворачивает свое окно на весь экран — при запуске окно невидимо и только когда программа все сделает, окно становится видимым.
* Исправлена ошибка в NumericStepper — ввод с клавиатуры, а потом сразу же колесом мыши приводил к увеличению на 1 шаг предыдущего значения.
* Файловые диалоги заменены на нормальные (ранее было невозможно — теперь в AIR это есть).

-~{}~ 15.06.07 22:12:

slach
Получилось увидеть результат :)? Есть ли замечания или предложения — на этих выходных буду реализовывать использование БД и асинхронность для увеличения скорости и снижение потребляемой памяти, заодно учел бы ваше мнение.
 

StUV

Rotaredom
Develar
получилось - немного замороченно, но оно того стоит ;)
спасибо!

-~{}~ 18.06.07 14:57:

некоторые профайлы не может проанализировать - точнее пишет в dot-файл:

Код:
digraph { rankdir="TB";
edge [labelfontsize=12];
node [style=filled];


"getImage" [label="getImage\n100,00 % (0 Р_С_)", color="NaN NaN 1"];
}
и все (получаем в итоге красивый черный эллипс ;)))
с причиной облома пока не разобрался
 

Develar

Новичок
1) узлы не проходят фильтр минимальной стоимости
2) ошибка в построителе графа, - скорее всего - так как NaN это явно не то, что должно быть даже в случае если по условию проходит только main. приложите профайл в http://code.google.com/p/cachegrindvisualizer/issues/entry и я разберусь.
 

StUV

Rotaredom
Develar
отправил профайл, на котором получен этот .dot-файл
только страница с формой глюканула - поэтому создалось два одинаковых "дефекта" =)
 

Wicked

Новичок
А чем вы SVG смотрите? У меня FF безбожно тормозит даже не оригинальном профайле в 1.5мб.
 

Develar

Новичок
http://zvtm.sourceforge.net/zgrviewer.html

Блок links и раздел "Описание" http://code.google.com/p/cachegrindvisualizer/

-~{}~ 18.06.07 17:23:

0.2.2
* minNodeCost теперь не целое число, а с плавающей точкой — до 2 знаков
* Закрытие вкладок

StUV
У меня в trunk все работает. Попробуйте http://cachegrindvisualizer.googlecode.com/files/CachegrindVisualizer-0.2.2.air

Wicked
Не надо конвертировать в SVG. Неудобно и долго это. ZGRViewer регистрируется на расширение dot для открытия простым щелчком и все. ZGRViewer поддерживает обновление текущего открытого файла по Ctrl + R.
 

Develar

Новичок
>> http://labs.adobe.com/showcase/special/airderby/
Россия послана в пешее эротическое. Читаем http://labs.adobe.com/showcase/special/airderby/airderby_officialrules.pdf

-~{}~ 19.06.07 20:02:

>> кстати, а можно в двух словах, какой софт использовал для разработки
Изображать из себя героя, используя Zend как редактор и ant как инструмент сборки не стал. Убогий Flex Builder 3 для mxml и as и Zend для всех остальных файлов. Или вы что-то другое имеете ввиду под "софтом"?
 

Wicked

Новичок
Говорят, можно обойти, если команда международная и есть домен в зоне com. А так жаль, конечно.
 

Develar

Новичок
Можно и друзей в США попросить, но смысл? Хотя с другой стороны... интересная идея :) на $100,000 и showcased on Adobe.com
 

Angerslave

Новичок
Хм, чес гря пока не понравилось. Чтоб один грид посмотреть, нужно столько натыкать... Вот если бы в 2-3 клика укладывалось, юзал бы 100%.
 

Angerslave

Новичок
Хм, я так и не смог понять как мне эти dot'ы открывать через ZGRViewer. Можно для тугодумов поподробнее?
 

Develar

Новичок
1 настройка ZGRViewer
1.1 открыли ZGRViewer (в windows это run.bat)
1.2 File -> Preferences -> Directories пишем пути к программам, обычно это C:\Program Files\ATT\Graphviz\bin\dot.exe (вместо dot для остальных соответственно neato, circo и т. д.) и нажимаем Save и закрываем окно
1.3 Правой клавишей мыши щелкаем по файлу: появляется контекстное меню - Открыть с помощью -> Выбрать программу -> выбираем ZGRViewer и ставим галку "Использовать ее для всех файлов такого типа" -> ОК Если открылось нормально, переходим к следующем шагу, если нет - разбираемся с путями.

Все. Теперь щелкаем по dot файлу и будет сразу открываться ZGRViewer.

Найду время и попрошу Дерика Ретханса дать нормальное расширение файлам cachegrind.

-~{}~ 19.06.07 23:25:

>> Найду время и попрошу Дерика Ретханса дать нормальное расширение файлам cachegrind
Прошу прощения, просто в PECL ошибочный (старый) dll. Качайте только с ссылки на http://xdebug.org/index.php - http://xdebug.org/link.php?url=xdebug200rc4-521-win и установите xdebug.profiler_output_name = %t.cg (%t можете менять на http://xdebug.org/docs/all_settings#trace_output_name) В 0.3 можно будет также открывать одним щелчком их без предварительного открытия CachegrindVisualizer.
 

Wicked

Новичок
Develar
теперь работает. Спасибо за толкование настроек згрвьювера.
 

Develar

Новичок
Wicked
Вышел на друга в Америке, должен согласиться помочь - оформлю себя как Co-entrant.

>> Спасибо за толкование настроек згрвьювера
Он довольно странный, вроде бы сложные в реализации вещи сделаны, а юзабилити как будто программист полный идиот. Вся сложность написания такого просмотровщика на Air в том, что unable to directly launch native applications - надо писать шлюз. Вероятно, в рамках конкурса, напишу шлюз на PHP (оформлю как самостоятельный сервер чтобы никто не мучался с настройкой).

-~{}~ 07.10.07 17:00:

Кому-нибудь нужно скомпилировать под новую версия AIR - Beta 2? Планируемое на 0.3 почти закончено, но выпуска не будет - я сейчас ушел в сторону Flex/AIR и поэтому данная разработка пока что by request.

-~{}~ 26.11.07 10:59:

xdebug 2.0.2 генерирует файл, который не кушается. Спасибо vgarvardt.

http://code.google.com/p/cachegrindvisualizer/issues/detail?id=6

-~{}~ 01.12.07 11:21:

Товарищи, киньте на [email protected] модуль xdebug под windows версии старой, где-то 2.0.0, не позднее 18-07-2007 или ткните носом где в инете можно найти. Заранее спасибо.
 
Сверху