Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7f74c98
feat: Добавление поддержки указания версий OneScript для запуска бенч…
Stivo182 Jun 22, 2025
aa09b59
Проверка в тестах наличия файла oscript.exe вместо каталога
Stivo182 Jun 23, 2025
81f6d04
Логи
Stivo182 Jun 23, 2025
865d65d
Исправлен лог
Stivo182 Jun 23, 2025
5227a7e
Исправлена подготовка тестовой среды
Stivo182 Jun 23, 2025
da7c8fc
Установлен язык системы для тестирования
Stivo182 Jun 23, 2025
8e3fa44
Изменены тесты валидации экспорта бенчмарков
Stivo182 Jun 23, 2025
4dfbb5b
Отключение командного процессора при установке OneScript
Stivo182 Jun 23, 2025
5d0f8fe
Добавлен лог
Stivo182 Jun 23, 2025
862b6ad
Изменено определение исполняющего файла
Stivo182 Jun 23, 2025
f78db00
Исправлено подключение библиотеки в cli
Stivo182 Jun 23, 2025
ed4ec0c
Исправления по замечаниям кролика
Stivo182 Jun 23, 2025
1a0c9a5
Исправления по замечаниям sonar
Stivo182 Jun 23, 2025
856d069
Исправления по замечаниям sonar
Stivo182 Jun 23, 2025
a9c26d3
Исправление ошибок. Добавление тестов
Stivo182 Jun 23, 2025
08bdd43
Исправления по замечаниям sonar
Stivo182 Jun 23, 2025
044e933
Установка каталога библиотек в дочернием процессе
Stivo182 Jun 23, 2025
0030670
Рефакторинг
Stivo182 Jun 23, 2025
4d2ce26
Рефакторинг
Stivo182 Jun 24, 2025
7019148
Исправление ошибки при запуске процесса в другой языковой среде
Stivo182 Jun 24, 2025
11a69a6
docs
Stivo182 Jun 24, 2025
53e2804
Исправление ошибки
Stivo182 Jun 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .bsl-language-server.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"listOfIncorrectFirstSymbol": ";|,\\s*\\S+"
},
"Typo": {
"userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка"
"userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас"
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions build/ПодготовкаКомпонентов.os
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
ИменаПроектов = Новый Массив();
ИменаПроектов.Добавить("GcStats");
ИменаПроектов.Добавить("Chronometer");
ИменаПроектов.Добавить("BenchmarkOneScript.Extensions");

ИменаФайловБиблиотек = Новый Массив();
ИменаФайловБиблиотек.Добавить("1script_GcStats.dll");
ИменаФайловБиблиотек.Добавить("1script_Chronometer.dll");
ИменаФайловБиблиотек.Добавить("1script_BenchmarkOneScriptExtensions.dll");
ИменаФайловБиблиотек.Добавить("Perfolizer.dll");

СобратьБиблиотекуDotNET(ИменаПроектов);
Expand Down
8 changes: 5 additions & 3 deletions docs/CLI.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,18 @@ benchos run [OPTIONS] [FILE]

| Опция | Описание | Пример |
| --- | --- | --- |
| `-r`, `--recursive` | Рекурсивный поиск в поддиректориях | |
| `--iterationCount` | Количество измерительных итераций | `--iterationCount 10` |
| `--iterationTime` | Минимальное время выполнения одной итерации (мс) | `--iterationTime 500` |
| `--warmupCount` | Количество прогревочных итераций | `--warmupCount 10` |
| `--invocationCount` | Количество вызовов метода за итерацию | `--invocationCount 100` |
| `--runtime` | Версии OneScript через запятую (current, stable, dev, x.x.x) | `--runtime dev,stable` |
| `--throughput` | Стратегия выполнения [`ПропускнаяСпособность`](СредаВыполнения.md#пропускнаяспособность) | |
| `--coldstart` | Стратегия выполнения [`ХолодныйЗапуск`](СредаВыполнения.md#холодныйзапуск) | |
| `-m`, `--memory` | Включить мониторинг использования памяти | |
| `-e`, `--exporters` | Форматы экспорта результатов (`md`, `json`, `xml`, `html`) | `-e json,xml` |
| `-a`, `--artifacts` | Каталог для сохранения результатов | `-a path/to/file` |
| `--throughput` | Стратегия выполнения [`ПропускнаяСпособность`](ВыборСтратегииЗапуска.md#пропускнаяспособность) | |
| `--coldstart` | Стратегия выполнения [`ХолодныйЗапуск`](ВыборСтратегииЗапуска.md#холодныйзапуск) | |
| `-r`, `--recursive` | Рекурсивный поиск в поддиректориях | |
| `-c`, `--config` | Файл конфигурации бенчмарков в формате JSON | `-c path/to/config.json` |

## Примеры

Expand Down
3 changes: 2 additions & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
## Темы
- [Быстрый старт](БыстрыйСтарт.md)
- [Запуск бенчмарков](ЗапускБенчмарков.md)
- [Выбор стратегии запуска](ВыборСтратегииЗапуска.md)
- [Параметризация](Параметризация.md)
- [Эталоны](Эталоны.md)
- [Мониторинг памяти](МониторингПамяти.md)
- [Обработчики событий](ОбработчикиСобытий.md)
- [Статистика](Статистика.md)
- [Сортировка отчета](СортировкаОтчета.md)
- [Экспорт результатов](ЭкспортРезультатов.md)
- [Среда выполнения](СредаВыполнения.md)
- [Стратегии запуска](СтратегииЗапуска.md)
- [CLI](CLI.md)
- [Аннотации](../src/BenchmarkOneScript/annotations/Классы)

Expand Down
8 changes: 7 additions & 1 deletion docs/ЗапускБенчмарков.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
benchos run [OPTIONS] [FILE]
```

Более подробно про CLI можно почитать в [документации](CLI.md).
Подробнее см. в разделе [CLI](CLI.md).

### Примеры использования

Expand Down Expand Up @@ -72,10 +72,16 @@ benchos run -r -m -e json ./benchmarks/
// Создание новой конфигурации
Конфигурация = Новый КонфигурацияБенчмарков();
Конфигурация.УстановитьКоличествоИтераций(10);
// ...

Результат = Бенчмаркинг.Запустить(Тип("МойКласс"), Конфигурация);
```

```bsl
// Модификация существующей конфигурации
Конфигурация = Новый КонфигурацияБенчмарков(Тип("МойКласс"));
Конфигурация.УстановитьКоличествоИтераций(10);
// ...

Результат = Бенчмаркинг.Запустить(Тип("МойКласс"), Конфигурация);
```
18 changes: 14 additions & 4 deletions docs/МониторингПамяти.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,30 @@

Для анализа аллокаций предусмотрена аннотация `&МониторингПамяти`.

### Аннотация
### Конфигурирование

#### Аннотация

```bsl
&МониторингПамяти
Процедура ПриСозданииОбъекта()
```

### API
#### API

```bsl
Конфигурация.ДобавитьМониторингПамяти();
```

### Пример
#### CLI

```bash
benchos run --memory [FILE]
```

Подробнее см. в разделе [CLI](CLI.md).

## Пример

```bsl
&МониторингПамяти
Expand All @@ -33,7 +43,7 @@
КонецПроцедуры
```

### Вывод
### Результаты выполнения

| Method | Количество | Mean | StdErr | StdDev | Median | Op/s | Allocated |
|----------|-----------:|------------:|------------:|----------:|------------:|---------:|------------:|
Expand Down
89 changes: 73 additions & 16 deletions docs/ОбработчикиСобытий.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,68 @@
# Обработчики событий

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

## Конфигурирование

### Аннотации

#### &ПередВсеми
Аннотация `&ПередВсеми` помечает метод, который выполняется **один раз** перед запуском всех бенчмарков.
Этот метод предназначен для глобальной подготовки данных, инициализации ресурсов (например, подключение к базе, загрузка файлов) или настройки окружения.
#### Перед всеми
Вызывается **перед запуском всех** бенчмарков.
Используется для подготовки данных, инициализации ресурсов или настройки окружения перед выполнением бенчмарков.

```bsl
// Параметры:
// * Контекст - Структура:
// ** Конфигурация - КонфигурацияБенчмарков
// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
&ПередВсеми
Процедура ПередВсеми(Контекст) Экспорт
```

#### После всех
Вызывается **после запуска всех** бенчмарков.
Используется для финализации: освобождения ресурсов (закрытие соединений), записи итоговых отчетов или выполнения других действий.

```bsl
// Параметры:
// * Контекст - Структура:
// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
// ** Конфигурация - КонфигурацияБенчмарков
// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// ** Отчет - ОтчетБенчмарков
&ПослеВсех
Процедура ПослеВсех(Контекст) Экспорт
```

#### &ПослеВсех
Метод с аннотацией `&ПослеВсех` вызывается **после завершения всех бенчмарков**.
Он используется для финализации: освобождения ресурсов (закрытие соединений), записи итоговых отчетов или выполнения других действий.
#### Перед каждым
Вызывается **перед каждым запуском бенчмарка**.
Позволяет подготовить контекст для отдельного теста - например, сбросить состояние объекта, сгенерировать тестовые данные или выполнить предварительные проверки.

#### &ПередКаждым
Аннотация `&ПередКаждым` указывает, что метод должен выполняться **перед каждым запуском бенчмарка**.
Это позволяет подготовить контекст для отдельного теста — например, сбросить состояние объекта, сгенерировать тестовые данные или выполнить предварительные проверки.
```bsl
// Параметры:
// * Контекст - Структура:
// ** ДескрипторБенчмарка - ДескрипторБенчмарка
// ** ПараметрыМетода - Массив из Произвольный
&ПередКаждым
Процедура ПередКаждым(Контекст) Экспорт
```

#### &ПослеКаждого
Метод с аннотацией `&ПослеКаждого` вызывается **после каждого выполнения бенчмарка**.
#### После каждого
Вызывается **после каждого выполнения бенчмарка**.
Он используется для постобработки: валидации результатов, сброса временных значений или освобождения ресурсов, которые создавались для конкретного теста.

```bsl
// Параметры:
// * Контекст - Структура:
// ** ДескрипторБенчмарка - ДескрипторБенчмарка
// ** Параметры - Массив из ПараметрБенчмарка
// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров
// ** Статистика - СтатистикаБенчмарка
&ПослеКаждого
Процедура ПослеКаждого(Контекст) Экспорт
```

### API

```bsl
Expand All @@ -30,31 +72,46 @@
Новый Делегат(Объект, "Инициализация")
);

// Регистрация обработчика из класса бенчмарка
// Регистрация обработчика из экземпляра класса бенчмарка
Конфигурация.ДобавитьОбработчикСобытия
СобытияБенчмарков.ПослеВсех,
"Завершение"
);

// Удаление всех обработчиков для события
// Удаление обработчиков для события
Конфигурация.УдалитьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым);

// Удаление всех обработчиков
Конфигурация.УдалитьОбработчикиСобытий();
```

### Пример
## Пример

```bsl
Перем ДвоичныеДанные;

&ПередВсеми
Процедура Инициализация(Контекст) Экспорт
Сообщить("Вызван обработчик перед запуском всех бенчмарков");
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки("Много данных");
КонецПроцедуры

&ПослеВсех
Процедура Завершение(Контекст) Экспорт
Сообщить("Вызван обработчик после завершения всех бенчмарков");
ДвоичныеДанные = Неопределено;
КонецПроцедуры

&ПередКаждым
Процедура ПередКаждым(Контекст) Экспорт
Сообщить("Вызван обработчик перед запуском бенчмарка");
КонецПроцедуры

&ПослеКаждого
Процедура ПослеКаждого(Контекст) Экспорт
Сообщить("Вызван обработчик после запуска бенчмарка");
КонецПроцедуры

&Бенчмарк
Процедура SHA256() Экспорт
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256);
Expand Down
44 changes: 34 additions & 10 deletions docs/Параметризация.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,47 @@
# Параметризация

С помощью аннотации `&Параметры` можно задать параметры для полей класса и методов бенчмарков.
Параметризация позволяет тестировать производительность кода с различными входными данными.

## Конфигурирование

### Аннотация

1. Параметры для полей класса
```bsl
&Параметры("MD5", "SHA256")
Перем АлгоритмХеширования Экспорт;
```

2. Параметры для методов бенчмарка
```bsl
// Каждый &Параметры определяет новый тестовый случай
&Параметры(50, 100) // Парам1=50, Парам2=100
&Параметры(75, 150) // Парам1=75, Парам2=150
Процедура Бенчмарк(Парам1, Парам2) Экспорт
```

### API

1. Параметры для полей класса
```bsl
// Поле класса
Конфигурация.ДобавитьПараметр("ИмяПоля", 100);
// Добавление значений для конкретного поля
Конфигурация
.ДобавитьПараметр("АлгоритмХеширования", "MD5")
.ДобавитьПараметр("АлгоритмХеширования", "SHA256");
```

2. Параметры для методов бенчмарка
```bsl
// Параметры метода бенчмарка
Параметры = Новый Массив();
Параметры.Добавить(100);
Параметры.Добавить(Ложь);
ДескрипторБенчмарка.ДобавитьПараметры(Параметры);
// Создание набора параметров для метода
НаборПараметров = Новый Массив();
НаборПараметров.Добавить(100);
НаборПараметров.Добавить(200);

// Регистрация набора
ДескрипторБенчмарка.ДобавитьПараметры(НаборПараметров);
```

### Пример
## Пример

```bsl
&Параметры(5, 0)
Expand All @@ -33,7 +57,7 @@
КонецПроцедуры
```

### Вывод
### Результаты выполнения

| Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Median | Op/s |
|----------|--------------------:|----------:|----------:|---------:|--------:|----------:|---------:|------:|
Expand Down
16 changes: 11 additions & 5 deletions docs/СортировкаОтчета.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
# Сортировка отчета

## Конфигурирование

### Аннотации

1. Сортировка результатов по убыванию производительности (от лучшего к худшему)
```bsl
// Сортировка результатов по убыванию производительности (от лучшего к худшему)
&СортировкаОтБыстрыхКМедленным
Процедура ПриСозданииОбъекта()
```

// Сортировка результатов по возрастанию времени выполнения (от худшего к лучшему)
2. Сортировка результатов по возрастанию времени выполнения (от худшего к лучшему)
```bsl
&СортировкаОтМедленныхКБыстрым
Процедура ПриСозданииОбъекта()
```

// Сортировка результатов по наименованию метода бенчмарка
3. Сортировка результатов по наименованию метода бенчмарка
```bsl
&СортировкаПоМетоду
Процедура ПриСозданииОбъекта()
```
Expand All @@ -25,7 +31,7 @@
Конфигурация.УстановитьСортировкуОтчета(СортировкиОтчетаБенчмарков.ПоМетоду);
```

### Пример
## Пример

```bsl
&Параметры(1, 2, 3)
Expand All @@ -46,7 +52,7 @@
КонецПроцедуры
```

### Вывод
### Результаты выполнения

| Method | Множитель | Mean | StdErr | StdDev | Median | Op/s |
|-----------|----------:|---------:|----------:|----------:|---------:|------:|
Expand Down
Loading