Проект HWCPipe предназначен для получения данных с аппаратных счетчиков процессора CPU и графического процессора GPU на платформах ARM.
Добавьте репозиторий Maven Central в файл build.gradle проекта:
allprojects {
repositories {
mavenCentral()
}
}
Добавьте зависимость в модуль, где требуется использование библиотеки:
implementation "com.gitee.archermind-ti:hwcpipelib:1.0.0"
Скопируйте директорию library/src/main/cpp/HWCPipe
в вашу директорию cpp
, а затем добавьте следующие строки в файл CMakeLists.txt:
# Подключение CMakeLists.txt из указанной директории
add_subdirectory(HWCPipe)
# Указание пути для поиска заголовочных файлов
include_directories(HWCPipe)
# Подключение библиотеки hwcpipe, пример использования:
target_link_libraries(your_target_name hwcpipe hilog_ndk.z)
Если вы используете мобильное устройство (симулятор пока не поддерживается, пожалуйста, используйте реальное устройство), то сначала активируйте анализ производительности:
hdc shell setprop security.perf_harden 0
Для конфигурирования HWCPipe используйте метод HwcPipeUtil.run(String)
:
HwcPipeUtil.run("your_command");
``` ```java
HwcPipeUtil.run(HwcPipeUtil.ALL_JSON);
Аргумент метода HwcPipeUtil#run(String)
— это JSON-строка, которая позволяет включать различные счетчики. Пример JSON-строки:
{
"cpu": ["Cycles", "Instructions"],
"gpu": ["GpuCycles"]
}
Константа HwcPipeUtil.ALL_JSON
указывает на включение всех доступных счетчиков. Её полная структура представлена ниже:
{
"cpu": ["Cycles", "Instructions", "CacheReferences", "CacheMisses", "BranchInstructions", "BranchMisses", "L1Accesses", "InstrRetired", "L2Accesses", "L3Accesses", "BusReads", "BusWrites", "MemReads", "MemWrites", "ASESpec", "VFPSpec", "CryptoSpec"],
"gpu": ["GpuCycles", "VertexComputeCycles", "FragmentCycles", "TilerCycles", "VertexComputeJobs", "Tiles", "TransactionEliminations", "FragmentJobs", "Pixels", "EarlyZTests", "EarlyZKilled", "LateZTests", "LateZKilled", "Instructions", "DivergedInstructions", "ShaderCycles", "ShaderArithmeticCycles", "ShaderLoadStoreCycles", "ShaderTextureCycles", "CacheReadLookups", "CacheWriteLookups", "ExternalMemoryReadAccesses", "ExternalMemoryWriteAccesses", "ExternalMemoryReadStalls", "ExternalMemoryWriteStalls", "ExternalMemoryReadBytes", "ExternalMemoryWriteBytes"]
}
Получение образца с помощью метода HwcPipeUtil#getSample()
HwcInfoEntity hwcInfo = HwcPipeUtil.getSample();
CpuInfoEntity cpuEntity = hwcInfo.getCpuInfoEntity();
GpuInfoEntity gpuEntity = hwcInfo.getGpuInfoEntity();
// Все указанные объекты должны быть непустыми
Остановка, использование метода HwcPipeUtil#stop()
HwcPipeUtil.stop();
Примечание: В данный момент многократное конфигурирование HwcPipeUtil#run(String)
в течение жизненного цикла приложения не поддерживается.
HWCPipe
базовое использование```c++
// HWCPipe автоматически распознает платформу для счетчиков CPU/GPU
hwcpipe::HWCPipe h;
// Запуск HWCPipe один раз в начале сессии профилирования h.run();
while (main_loop) { // Вызов sample() для получения значений счетчиков с требуемой частотой auto measurements = h.sample();
[...]
}
// В конце сессии профилирования, остановка HWCPipe h.stop();
Функция `sample()` возвращает структуру `Measurements`, которую можно использовать следующим образом:
```c++
// Проверка доступности данных для процессора
if (measurements.cpu)
{
// Поиск нужного счетчика в карте
const auto& counter = measurements.cpu->find(CpuCounter::Cycles);
if (counter != measurements.cpu->end())
{
// Получение значения счетчика, приведенного к типу float
auto value = counter->second.get<float>();
}
}
Доступные счетчики указаны в перечислениях CpuCounter
и GpuCounter
(соответственно в файлах cpu_profiler.h
и gpu_profiler.h
).
Платформа поддерживает подмножество этих счетчиков, которое можно проверить следующими способами:
auto cpu_counters = h.cpu_profiler()->supported_counters();
auto gpu_counters = h.gpu_profiler()->supported_counters();
Вы можете указать счетчики, которые требуется включить, следующим образом:
// Включение набора стандартных счетчиков
auto h = hwcpipe::HWCPipe();
// Указание наборов счетчиков для ЦПУ и ГПУ соответственно
auto h = hwcpipe::HWCPipe({CpuCounter::Cycles, CpuCounter::Instructions}, {GpuCounter::GpuCycles});
// Указание строки JSON
auto h = hwcpipe::HWCPipe(json);
```Формат строки JSON должен выглядеть так:
```json
{
"cpu": ["Cycles", "Instructions"],
"method": "gpu": ["GpuCycles"]
}
Имена доступных счетчиков могут быть найдены в cpu_counter_names
(cpu_profiler.h
) и gpu_counter_names
(gpu_profiler.h
). Дополнительная информация о счетчиках производительности Mali см. в разделе Mali Performance Counters.
Журнал отображает см. журнал HiLog устройства Просмотр журнала HiLog устройства
Run
, чтобы запустить его (для запуска на реальном устройстве может потребоваться конфигурация подписи).Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )