Как измерить энергопотребление моего приложения в Windows Mobile и Windows CE? - PullRequest
1 голос
/ 07 апреля 2009

Я хочу измерить энергопотребление

  • мое собственное приложение (которое я могу изменить)
  • Сторонние приложения (которые я не могу изменить)

на

  • Windows CE 5.0
  • Windows Mobile 5/6

Есть ли какой-нибудь API для этого?

Если нет, могу ли я измерить другие значения, которые я могу использовать для оценки потребления энергии?

Мне не нужно точное значение, например 20 mAh (хотя это было бы неплохо). Достаточно относительного значения, например: «Начиная с уровня заряда от 100% до 0%, около 20% полностью заряженной батареи было используется этим приложением "

С другой стороны, очень важно, чтобы измерение относилось к одному приложению, т. Е. Я не хочу агрегированные измерения для группы приложений, например, «эти три приложения вместе потребляют ...»

Ответы [ 4 ]

3 голосов
/ 07 апреля 2009

Кажется, что это довольно сложно измерить, потому что вы не можете выделить отдельный процесс для запуска сам по себе. Фактически, если вы попытаетесь это сделать, вы столкнетесь с трудностями при определении того, что представляет собой «единый процесс» - это всего лишь код пользовательского пространства, принадлежащий этой программе? Или вы включаете код ядра, выполняемый также от имени программы? Что, если ОС оптимизирует код ядра, чтобы аналогичные запросы из разных программ обрабатывались вместе, используя почти постоянное количество энергии? Тогда вы не сможете даже выделить энергопотребление по программам.

В таком случае я склонен измерять ожидаемое значение, по сути, среднее количество энергии, используемой приложением. В идеале вы должны начать с большого количества систем, все одинаковые, за исключением того, что на половине из них запущено приложение, а на половине нет. Пусть каждая из систем работает в любых рабочих условиях, которые вы хотите протестировать (в одинаковых условиях для всех устройств, конечно, за исключением того факта, что половина из них работает с приложением, а половина - нет), и измерьте уровень энергии. потребления с использованием стандартного API, или дайте батарейкам разрядиться и измерьте, сколько времени требуется каждому устройству, чтобы разрядить его батарею. Затем сравните средний результат по устройствам, на которых было запущено приложение, и средний результат по тем, которые не были запущены, и вы сможете выяснить, насколько программа увеличивает энергопотребление компьютера.

3 голосов
/ 07 апреля 2009

Существует API для получения информации о потреблении энергии, но точность информации, возвращаемой этим API, зависит от OEM (некоторые OEM вообще не предоставляют эту информацию). Дополнительную информацию с примером кода для этого API можно найти по адресу http://www.codeproject.com/kb/mobile/Wimopower1.aspx (скриншот примеров программ ниже). Как вы можете видеть на скриншоте, вы можете определить напряжение батареи, ток, тип батареи и многое другое. Для точного измерения мгновенного энергопотребления требуется внешнее оборудование (и я предполагаю, что вы не хотите вкладывать средства в оборудование для выполнения измерений).

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

Снимок экрана примера программы http://www.codeproject.com/kb/mobile/WiMoPower1/TitleImage.png

1 голос
/ 07 апреля 2009

Если вы действительно хотите вызывать API самостоятельно, я не знаю, какой из них вызывать, но если вы просто хотите узнать, как расход энергии при работе определенных приложений, вы можете использовать приложение acbPowerMeter .

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

0 голосов
/ 17 июля 2016

С добавлением двух моих центов есть несколько библиотек, которые могут измерять энергопотребление с помощью архитектуры INTEL RALP :

Существует PAPI и jRALP .

Использование jRALP кажется простым:

  double beginning = EnergyCheck.statCheck();
  doWork();
  double end = EnergyCheck.statCheck();

К сожалению, для OP они (я не уверен), похоже, не готовы к Windows и работают только для определенных процессоров Intel.

...