Switch to English Домой Поиск Список участников Вопросы и ответы Зарегистрироваться Войти  
Windows Embedded CE
утилита измерение времени

Автор темы: Jacviah   Начата: 07-02-2010 04:54    Ответов: 25
 Форум "Встраиваемые операционные системы Microsoft" >> Embedded OS >> Windows Embedded CE >> утилита измерение времени
 Printable Version    << Предыдущая тема   Следующая тема >>
  Пт, 02 июл 2010, 04:54
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
утилита измерение времени
Здравствуйте.
У меня такой вопрос. А существует ли в windows ce 6.0 какая-нибудь утилита для измерения времен работы вызываемых функций? Что-то наподобие Kernel Tracker, только в Kernel Tracker насколько я понимаю, возможно измерять время потока в целом. Или я не прав? Возможно такая возможность существует и в Kernel Tracker? Может есть какая - нибудь сторонняя утилита?
Спасибо

  
  Пт, 02 июл 2010, 05:13
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени

В поставке есть профилировщик. Включается в свойствах проекта - Enable Profiling. Информация собирается при помощи утилиты удаленной работы Call Profiler




Павел Белевский
Системный инженер
Кварта Технологии

  
  Пт, 02 июл 2010, 06:15
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
Я так понимаю, эта утилита предоставляет какой-то API для включения в исходный код? И сохраняет собранную информацию в лог файлик?

  
  Пт, 02 июл 2010, 06:38
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени

В общем - да. Информация по сборке приложения поддерживающего профилировку: http://msdn.microsoft.com/en-us/library/ee480587.aspx




Павел Белевский
Системный инженер
Кварта Технологии

  
  Пт, 02 июл 2010, 06:42
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
Спасибо, а можно ли получать инфу из драйвера или только из пользовательского приложения?

  
  Пт, 02 июл 2010, 06:43
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени

Да, это работает для любого модуля в том числе и драйверов




Павел Белевский
Системный инженер
Кварта Технологии

  
  Пт, 02 июл 2010, 06:53
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
Спасибо, Павел

  
  Вт, 06 июл 2010, 02:17
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени

Вложение: 1.JPG
Добрый день.
Не совсем понятно в каких единицах и каким образом call profiler работает. Может я что-то делаю не так?
Для примера хочу измерить время вызова функции StopWhenReady(). Делаю это следующим образом:


char* mark = "StopGraph";
_int64 dnTimestamp = 0; 
long lMarkID = 10;
if (StartProfile(
                 PROFILE_GLOBALLEVEL, //int nLevel,
                 PROFILE_CURRENTID     //DWORD dwID 
                 )
              !=PROFILE_OK) RETAILMSG(1,(TEXT("[StopGraph] StartProfile is failed.\r\n")));if (CommentMarkAtProfile(
                        dnTimestamp,         //_int64 dnTimestamp,
                        lMarkID,             //long lMarkID,
                        mark                 //char* pszText
                    )
                    !=MARK_OK) RETAILMSG(1,(TEXT("[StopGraph] MarkProfile is failed.\r\n")));////////////////////////////////////
m_pMediaControl->StopWhenReady();
////////////////////////////////////if( StopProfile(
                PROFILE_GLOBALLEVEL, //int nLevel,
                PROFILE_CURRENTID     //DWORD dwID 
               )
               !=PROFILE_OK) RETAILMSG(1,(TEXT("[StopGraph] StopProfile is failed.\r\n")));
 

В результате в окне Call Profiler вижу следующее (см. вложение).
Не понятно каким образом изображается время с помощью линий. Что значит 4285(t). И почему в суммарной инфе по модулю везде нули?
Спасибо


  
  Вт, 06 июл 2010, 05:40
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
И что такое lMarkID?


  
  Ср, 07 июл 2010, 12:50
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени
Для профилировки достаточно собрать модуль с параметрами указанными по вышеприведенной ссылке без модификации исходного кода. Таким образом перед вызовом и по завершению работы функций в бинарный код модуля будут добавлены специальные команды считывающие текущее время, измеряемое в тиках (ticks). Длительность тика зависит от аппаратной платформы и определяется при помощи функции QueryPerformanceFrequency(n), как 1/n секунд


Павел Белевский
Системный инженер
Кварта Технологии

  
  Ср, 07 июл 2010, 01:34
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
Так что такое 4285(t) на графике? 4285 - это количество тиков?

  
  Ср, 07 июл 2010, 02:00
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени

Да




Павел Белевский
Системный инженер
Кварта Технологии

  
  Ср, 07 июл 2010, 02:07
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
А метод QueryPerformanceFrequency я могу вызвать 1 раз, чтобы определить n (например при инициализации драйвера, который я хочу профилировать), и это значение n будет постоянной величиной для всех тиков?

  
  Ср, 07 июл 2010, 02:10
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени
Частота n будет постоянна при постоянстве связки платформа - BSP


Павел Белевский
Системный инженер
Кварта Технологии

  
  Ср, 07 июл 2010, 02:34
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
Ясно, спасибо. Ещё мне не ясно следующее. По выше приведенной Вами ссылке размещена информация по настройке профилирования для приложения. Мне же необходимо профилировать не только приложение, но и драйвер. Мне необходимо установить переменные окружения для всего проекта в целом? Я добавляю новые переменные в свойствах проекта. Получается, что будет профилироваться весь образ в целом?

  
  Ср, 07 июл 2010, 02:40
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени

Никакой разницы нет. Просто повторите указанную в статье MSDN процедуру для модуля драйвера.




Павел Белевский
Системный инженер
Кварта Технологии

  
  Ср, 07 июл 2010, 04:37
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
Все повторил так как в статье:
открыл консоль Open release directory in build window,
установил через консоль переменные wincecallcap, wincerel, releasetype.
далее перешел к драйверу,
скомпилил его build -c
далее с помощью makeimg через консоль собрал образ
и с VS залил на девайс.
Далее установил соединение с Remote Call Profiler, после установки соединения в появившемся окне Collection Control запустил процесс профилирования Start.
Далее запустил приложение, работающее с драйвером. Но ничего не происходит, в окне Collection Control информации о собранной информации просто нет. В чем может быть проблема?
Кстати, все происходит на windows ce 6.0

  
  Ср, 07 июл 2010, 05:16
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени
Загружайте драйвер в режиме пользователя (флаг DEVFLAGS_LOAD_AS_USERPROC) после запуска Call Profiler


Павел Белевский
Системный инженер
Кварта Технологии

  
  Ср, 07 июл 2010, 05:38
Jacviah сейчас не в системе. Последяя активность: 30.08.2010 15:49:11 Jacviah

25 лучших
Присоединился 11-02-2009
сообщений 100
Re: утилита измерение времени
В смысле в файле реестра установить "Flags"=dword:10 ?
И как загружатьпосле запуска Call Profiler, если драйвер грузится автоматически при загрузке системы?

  
  Ср, 07 июл 2010, 05:42
Pavel Belevsky сейчас не в системе. Последяя активность: 03.09.2010 8:18:30 Pavel Belevsky

10 лучших
Присоединился 09-10-2007
сообщений 1 675
Re: утилита измерение времени
Да.
Временно убрать настройки реестра из ветви Drivers\BuiltIn и загружать его из приложения при помощи функции ActiveDevice()


Павел Белевский
Системный инженер
Кварта Технологии

  
 Страница 1 из 2 (Всего 26 записей) 1 2 >>
Форум "Встраиваемые операционные системы Microsoft" >> Embedded OS >> Windows Embedded CE >> утилита измерение времени

Вы можете добавлять вложения
Вы можете создавать новые темы
Вы можете отвечать на сообщения
Вы не можете удалять свои сообщения
Вы не можете править свои сообщения
Вы можете создавать опросы
Вы можете голосовать
Статистика форума включены
Форум не модерируется

Работает под управлением Community Server :: Forums