Skip to content

Commit d46630e

Browse files
authored
feat: Добавление поддержки указания версий OneScript для запуска бенчмарков (#21)
1 parent 5c1e7a8 commit d46630e

File tree

113 files changed

+3953
-950
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+3953
-950
lines changed

.bsl-language-server.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"listOfIncorrectFirstSymbol": ";|,\\s*\\S+"
66
},
77
"Typo": {
8-
"userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка"
8+
"userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас"
99
}
1010
}
1111
}

build/ПодготовкаКомпонентов.os

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
ИменаПроектов = Новый Массив();
88
ИменаПроектов.Добавить("GcStats");
99
ИменаПроектов.Добавить("Chronometer");
10+
ИменаПроектов.Добавить("BenchmarkOneScript.Extensions");
1011

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

1618
СобратьБиблиотекуDotNET(ИменаПроектов);

docs/CLI.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@ benchos run [OPTIONS] [FILE]
1212

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

2628
## Примеры
2729

docs/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
## Темы
44
- [Быстрый старт](БыстрыйСтарт.md)
55
- [Запуск бенчмарков](ЗапускБенчмарков.md)
6-
- [Выбор стратегии запуска](ВыборСтратегииЗапуска.md)
76
- [Параметризация](Параметризация.md)
87
- [Эталоны](Эталоны.md)
98
- [Мониторинг памяти](МониторингПамяти.md)
109
- [Обработчики событий](ОбработчикиСобытий.md)
1110
- [Статистика](Статистика.md)
1211
- [Сортировка отчета](СортировкаОтчета.md)
1312
- [Экспорт результатов](ЭкспортРезультатов.md)
13+
- [Среда выполнения](СредаВыполнения.md)
14+
- [Стратегии запуска](СтратегииЗапуска.md)
1415
- [CLI](CLI.md)
1516
- [Аннотации](../src/BenchmarkOneScript/annotations/Классы)
1617

docs/ЗапускБенчмарков.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
benchos run [OPTIONS] [FILE]
77
```
88

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

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

@@ -72,10 +72,16 @@ benchos run -r -m -e json ./benchmarks/
7272
// Создание новой конфигурации
7373
Конфигурация = Новый КонфигурацияБенчмарков();
7474
Конфигурация.УстановитьКоличествоИтераций(10);
75+
// ...
76+
7577
Результат = Бенчмаркинг.Запустить(Тип("МойКласс"), Конфигурация);
78+
```
7679

80+
```bsl
7781
// Модификация существующей конфигурации
7882
Конфигурация = Новый КонфигурацияБенчмарков(Тип("МойКласс"));
7983
Конфигурация.УстановитьКоличествоИтераций(10);
84+
// ...
85+
8086
Результат = Бенчмаркинг.Запустить(Тип("МойКласс"), Конфигурация);
8187
```

docs/МониторингПамяти.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,30 @@
22

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

5-
### Аннотация
5+
### Конфигурирование
6+
7+
#### Аннотация
68

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

12-
### API
14+
#### API
1315

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

18-
### Пример
20+
#### CLI
21+
22+
```bash
23+
benchos run --memory [FILE]
24+
```
25+
26+
Подробнее см. в разделе [CLI](CLI.md).
27+
28+
## Пример
1929

2030
```bsl
2131
&МониторингПамяти
@@ -33,7 +43,7 @@
3343
КонецПроцедуры
3444
```
3545

36-
### Вывод
46+
### Результаты выполнения
3747

3848
| Method | Количество | Mean | StdErr | StdDev | Median | Op/s | Allocated |
3949
|----------|-----------:|------------:|------------:|----------:|------------:|---------:|------------:|

docs/ОбработчикиСобытий.md

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,68 @@
11
# Обработчики событий
22

3-
Для изоляции логики подготовки и завершения от измеряемого кода в тестах производительности предусмотрен механизм обработчиков событий.
4-
Используйте специальные аннотации, чтобы определить методы, которые будут выполняться в разных фазах жизненного цикла бенчмарков:
3+
Для изоляции логики подготовки и завершения от измеряемого кода реализован механизм обработчиков событий.
4+
Используйте специальные аннотации, чтобы определить методы, которые будут выполняться в разных фазах жизненного цикла бенчмарков:
5+
6+
## Конфигурирование
57

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

8-
#### &ПередВсеми
9-
Аннотация `&ПередВсеми` помечает метод, который выполняется **один раз** перед запуском всех бенчмарков.
10-
Этот метод предназначен для глобальной подготовки данных, инициализации ресурсов (например, подключение к базе, загрузка файлов) или настройки окружения.
10+
#### Перед всеми
11+
Вызывается **перед запуском всех** бенчмарков.
12+
Используется для подготовки данных, инициализации ресурсов или настройки окружения перед выполнением бенчмарков.
13+
14+
```bsl
15+
// Параметры:
16+
// * Контекст - Структура:
17+
// ** Конфигурация - КонфигурацияБенчмарков
18+
// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
19+
&ПередВсеми
20+
Процедура ПередВсеми(Контекст) Экспорт
21+
```
22+
23+
#### После всех
24+
Вызывается **после запуска всех** бенчмарков.
25+
Используется для финализации: освобождения ресурсов (закрытие соединений), записи итоговых отчетов или выполнения других действий.
26+
27+
```bsl
28+
// Параметры:
29+
// * Контекст - Структура:
30+
// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
31+
// ** Конфигурация - КонфигурацияБенчмарков
32+
// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
33+
// ** Отчет - ОтчетБенчмарков
34+
&ПослеВсех
35+
Процедура ПослеВсех(Контекст) Экспорт
36+
```
1137

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

16-
#### &ПередКаждым
17-
Аннотация `&ПередКаждым` указывает, что метод должен выполняться **перед каждым запуском бенчмарка**.
18-
Это позволяет подготовить контекст для отдельного теста — например, сбросить состояние объекта, сгенерировать тестовые данные или выполнить предварительные проверки.
42+
```bsl
43+
// Параметры:
44+
// * Контекст - Структура:
45+
// ** ДескрипторБенчмарка - ДескрипторБенчмарка
46+
// ** ПараметрыМетода - Массив из Произвольный
47+
&ПередКаждым
48+
Процедура ПередКаждым(Контекст) Экспорт
49+
```
1950

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

55+
```bsl
56+
// Параметры:
57+
// * Контекст - Структура:
58+
// ** ДескрипторБенчмарка - ДескрипторБенчмарка
59+
// ** Параметры - Массив из ПараметрБенчмарка
60+
// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров
61+
// ** Статистика - СтатистикаБенчмарка
62+
&ПослеКаждого
63+
Процедура ПослеКаждого(Контекст) Экспорт
64+
```
65+
2466
### API
2567

2668
```bsl
@@ -30,31 +72,46 @@
3072
Новый Делегат(Объект, "Инициализация")
3173
);
3274
33-
// Регистрация обработчика из класса бенчмарка
75+
// Регистрация обработчика из экземпляра класса бенчмарка
3476
Конфигурация.ДобавитьОбработчикСобытия
3577
СобытияБенчмарков.ПослеВсех,
3678
"Завершение"
3779
);
3880
39-
// Удаление всех обработчиков для события
81+
// Удаление обработчиков для события
4082
Конфигурация.УдалитьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым);
83+
84+
// Удаление всех обработчиков
85+
Конфигурация.УдалитьОбработчикиСобытий();
4186
```
4287

43-
### Пример
88+
## Пример
4489

4590
```bsl
4691
Перем ДвоичныеДанные;
4792
4893
&ПередВсеми
4994
Процедура Инициализация(Контекст) Экспорт
95+
Сообщить("Вызван обработчик перед запуском всех бенчмарков");
5096
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки("Много данных");
5197
КонецПроцедуры
5298
5399
&ПослеВсех
54100
Процедура Завершение(Контекст) Экспорт
101+
Сообщить("Вызван обработчик после завершения всех бенчмарков");
55102
ДвоичныеДанные = Неопределено;
56103
КонецПроцедуры
57104
105+
&ПередКаждым
106+
Процедура ПередКаждым(Контекст) Экспорт
107+
Сообщить("Вызван обработчик перед запуском бенчмарка");
108+
КонецПроцедуры
109+
110+
&ПослеКаждого
111+
Процедура ПослеКаждого(Контекст) Экспорт
112+
Сообщить("Вызван обработчик после запуска бенчмарка");
113+
КонецПроцедуры
114+
58115
&Бенчмарк
59116
Процедура SHA256() Экспорт
60117
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256);

docs/Параметризация.md

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,47 @@
11
# Параметризация
22

3-
С помощью аннотации `&Параметры` можно задать параметры для полей класса и методов бенчмарков.
3+
Параметризация позволяет тестировать производительность кода с различными входными данными.
4+
5+
## Конфигурирование
6+
7+
### Аннотация
8+
9+
1. Параметры для полей класса
10+
```bsl
11+
&Параметры("MD5", "SHA256")
12+
Перем АлгоритмХеширования Экспорт;
13+
```
14+
15+
2. Параметры для методов бенчмарка
16+
```bsl
17+
// Каждый &Параметры определяет новый тестовый случай
18+
&Параметры(50, 100) // Парам1=50, Парам2=100
19+
&Параметры(75, 150) // Парам1=75, Парам2=150
20+
Процедура Бенчмарк(Парам1, Парам2) Экспорт
21+
```
422

523
### API
624

25+
1. Параметры для полей класса
726
```bsl
8-
// Поле класса
9-
Конфигурация.ДобавитьПараметр("ИмяПоля", 100);
27+
// Добавление значений для конкретного поля
28+
Конфигурация
29+
.ДобавитьПараметр("АлгоритмХеширования", "MD5")
30+
.ДобавитьПараметр("АлгоритмХеширования", "SHA256");
1031
```
1132

33+
2. Параметры для методов бенчмарка
1234
```bsl
13-
// Параметры метода бенчмарка
14-
Параметры = Новый Массив();
15-
Параметры.Добавить(100);
16-
Параметры.Добавить(Ложь);
17-
ДескрипторБенчмарка.ДобавитьПараметры(Параметры);
35+
// Создание набора параметров для метода
36+
НаборПараметров = Новый Массив();
37+
НаборПараметров.Добавить(100);
38+
НаборПараметров.Добавить(200);
39+
40+
// Регистрация набора
41+
ДескрипторБенчмарка.ДобавитьПараметры(НаборПараметров);
1842
```
1943

20-
### Пример
44+
## Пример
2145

2246
```bsl
2347
&Параметры(5, 0)
@@ -33,7 +57,7 @@
3357
КонецПроцедуры
3458
```
3559

36-
### Вывод
60+
### Результаты выполнения
3761

3862
| Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Median | Op/s |
3963
|----------|--------------------:|----------:|----------:|---------:|--------:|----------:|---------:|------:|

docs/СортировкаОтчета.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
# Сортировка отчета
22

3+
## Конфигурирование
4+
35
### Аннотации
46

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

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

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

28-
### Пример
34+
## Пример
2935

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

49-
### Вывод
55+
### Результаты выполнения
5056

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

0 commit comments

Comments
 (0)