crypt of decay - Post a comment [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

лёд тронулся, господа присяжные заседатели! Jun. 15th, 2019|12:04 am

ketmar
всё-таки пересилил себя и начал пилить подсистему профилирования. давно надо было, но ужасно неохота же: нудно это. пока уговаривал себя начать — починил кучку багов и спланировал план запила новой подсистемы полиобъектов. полезно, конечно, но профайлеры сами себя не напишут.

почему не воспользоваться внешним инструментом, и не парить мозг? потому что неудобно и не всегда доступно. кроме того, что я хочу красивые графички в рилтайме, мне нужны профили в виде удобного для обработки файла на диске, иерархическая структура счётчиков, выборочное включение/выключение любого из них (с автоматической обработкой детей), и прочие мелкие приятности. и да — внешний инструмент не всегда доступен; это можно и два раза повторить. обычный игрок не будет париться установкой девтулзов и пересборкой игры с другими флагами, если я попрошу его сделать профиль, чтобы понять, почему у него игра тормозит.

сделал в виде большого кольцевого буфера, куда профайлеры пишут инфу. манагер профайлеров разруливает регистрацию, назначение каждому порядкого номера в буфере и так далее. дёшево, сердито, не надо в начале кадра бегать циклом по всем профайлерам и просить их переинититься, а в конце бегать и собирать с каждого данные.

при запуске ребёнка автоматически запускаются все родители, при стопе ребёнка родители стопятся. конечно, поддерживается рекурсивный старт/стоп, так что если родитель до запуска ребёнка был активен — то и останется активен. таким образом каждый родитель собирает совокупное время работы всех детей, а корневой профилер — время всего кадра.

кольцевой буфер можно тупо кидать в файл, когда номер следующего элемента врапнется, прямо как есть. ну, будет игра иногда заикаться, если запись в файл включена. потом сделаю для этого отдельный поток, пусть он пишет. на профиле это всё равно не скажется.

оверхэд на активирование/деактивирование профилера — один поход по указателю и одно условие, если профилинг неактивен. нормально, меня устраивает: это далеко не самый тормозной код в движке.

алсо, надо бы выложить очередной вендобилд перед Началом Великого Внедрежа.
Link Read Comments

Reply:
From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message: