Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ opm install benchmark
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&ПередКаждым
&ПередКаждымКейсом
Процедура ПодготовитьДанные(Контекст) Экспорт

Элементы = Новый Массив();
Expand Down
2 changes: 1 addition & 1 deletion docs/БыстрыйСтарт.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ opm install benchmark
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&ПередКаждым
&ПередКаждымКейсом
Процедура ПодготовитьДанные(Контекст) Экспорт

Элементы = Новый Массив();
Expand Down
113 changes: 97 additions & 16 deletions docs/ОбработчикиСобытий.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,34 @@
ПередВсеми
├─ [Кейс 1]
│ ├─ ПередКаждым
│ ├─ Итерации бенчмарка
│ └─ ПослеКаждого
│ ├─ ПередКаждымКейсом
│ ├─ Оценка:
│ │ ├─ ПередИтерацией
│ │ ├─ Итерация
│ │ └─ ПослеИтерации
│ ├─ Прогрев:
│ │ ├─ ПередИтерацией
│ │ ├─ Итерация
│ │ └─ ПослеИтерации
│ ├─ Измерение:
│ │ ├─ ПередИтерацией
│ │ ├─ Итерация
│ │ └─ ПослеИтерации
│ ├─ Память (если включено):
│ │ ├─ ПередИтерацией
│ │ ├─ Итерация
│ │ └─ ПослеИтерации
│ └─ ПослеКаждогоКейса
├─ [Кейс 2]
│ ├─ ПередКаждым
│ ├─ Итерации бенчмарка
│ └─ ПослеКаждого
│ ├─ ПередКаждымКейсом
│ ├─ ...
│ └─ ПослеКаждогоКейса
└─ ПослеВсех
```

> **Кейс** - одна комбинация бенчмарка и набора параметров. Если у вас 2 бенчмарка и 3 набора параметров, то будет 6 кейсов, для каждого из которых вызываются `ПередКаждым` и `ПослеКаждого`.
> **Кейс** - одна комбинация бенчмарка и набора параметров. Если у вас 2 бенчмарка и 3 набора параметров, то будет 6 кейсов, для каждого из которых вызываются `ПередКаждымКейсом` и `ПослеКаждогоКейса`.

## Аннотации

Expand Down Expand Up @@ -53,19 +68,19 @@
Процедура Завершение(Контекст) Экспорт
```

### `&ПередКаждым`
### `&ПередКаждымКейсом`

Вызывается **перед каждым кейсом**. Используется для сброса состояния, генерации тестовых данных с учётом параметров текущего кейса.

```bsl
// Параметры:
// * Контекст - Структура:
// ** Кейс - КейсБенчмарка - Описание текущего запускаемого кейса
&ПередКаждым
&ПередКаждымКейсом
Процедура ПодготовитьКейс(Контекст) Экспорт
```

### `&ПослеКаждого`
### `&ПослеКаждогоКейса`

Вызывается **после каждого кейса**. Используется для постобработки: валидации результатов, освобождения ресурсов конкретного кейса, логирования.

Expand All @@ -75,10 +90,43 @@
// ** Кейс - КейсБенчмарка - Описание завершённого кейса
// ** Замеры - Массив из РезультатИтерацииКейса - Результаты отдельных итераций
// ** Статистика - СтатистикаБенчмарка - Итоговая статистика кейса
&ПослеКаждого
&ПослеКаждогоКейса
Процедура ОбработатьРезультатКейса(Контекст) Экспорт
```

### `&ПередИтерацией`

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

> **Важно:** при наличии обработчиков итерации количество вызовов за итерацию принудительно устанавливается в 1, чтобы обработчик вызывался перед каждым отдельным вызовом метода бенчмарка. Обработчик вызывается за пределами замера времени и памяти, поэтому не влияет на результаты измерений.

```bsl
// Параметры:
// * Контекст - Структура:
// ** Кейс - КейсБенчмарка - Описание текущего кейса
// ** Этап - Строка - Этап выполнения (см. ЭтапыБенчмарка: Оценка, Прогрев, Измерение, Память)
// ** НомерИтерации - Число - Номер итерации в рамках этапа (начиная с 1)
&ПередИтерацией
Процедура ПодготовитьИтерацию(Контекст) Экспорт
```

### `&ПослеИтерации`

Вызывается **после каждой итерации** бенчмарка на всех этапах. Используется для проверки корректности результатов итерации или выполнения постобработки.

> **Важно:** при наличии обработчиков итерации количество вызовов за итерацию принудительно устанавливается в 1. Обработчик вызывается за пределами замера.

```bsl
// Параметры:
// * Контекст - Структура:
// ** Кейс - КейсБенчмарка - Описание текущего кейса
// ** Этап - Строка - Этап выполнения (см. ЭтапыБенчмарка)
// ** НомерИтерации - Число - Номер итерации в рамках этапа (начиная с 1)
// ** РезультатИтерации - РезультатИтерацииКейса - Результат завершённой итерации
&ПослеИтерации
Процедура ОбработатьРезультатИтерации(Контекст) Экспорт
```

## API

Обработчики можно регистрировать программно через объект `КонфигурацияБенчмарков`.
Expand All @@ -97,7 +145,7 @@
ОбработчикиПослеВсех = Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеВсех);

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

// Удаление всех обработчиков
Конфигурация.УдалитьОбработчикиСобытий();
Expand Down Expand Up @@ -139,23 +187,23 @@

### Пример 2: Подготовка данных с учётом параметров кейса

`ПередКаждым` позволяет подготовить данные под конкретный кейс - например, массив нужного размера.
`ПередКаждымКейсом` позволяет подготовить данные под конкретный кейс - например, массив нужного размера.

```bsl
&Параметры(100, 1000, 10000)
Перем Количество Экспорт;

Перем Данные;

&ПередКаждым
&ПередКаждымКейсом
Процедура ПодготовитьДанные(Контекст) Экспорт
Данные = Новый Массив();
Для Число = 1 По Количество Цикл
Данные.Добавить(Число);
КонецЦикла;
КонецПроцедуры

&ПослеКаждого
&ПослеКаждогоКейса
Процедура ПроверитьРезультат(Контекст) Экспорт
Контекст.Статистика.ВМиллисекунды();
Если Контекст.Статистика.Среднее > 1 Тогда // мс
Expand Down Expand Up @@ -196,4 +244,37 @@
Процедура МойБенчмарк() Экспорт
// Логика бенчмарка
КонецПроцедуры
```
```

### Пример 4: Сброс состояния перед каждой итерацией

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

```bsl
&Параметры(1000, 10000)
Перем Размер Экспорт;

Перем ТестовыйМассив;

&ПередИтерацией
Процедура ПодготовитьМассив(Контекст) Экспорт
ТестовыйМассив = Новый Массив(Размер);
Для к = 0 По Размер - 1 Цикл
ТестовыйМассив[к] = Размер - к;
КонецЦикла;
КонецПроцедуры

&Бенчмарк
Процедура СортировкаПузырьком() Экспорт
Для а = 0 По ТестовыйМассив.ВГраница() - 1 Цикл
Для б = 0 По ТестовыйМассив.ВГраница() - а - 1 Цикл
Если ТестовыйМассив[б] > ТестовыйМассив[б + 1] Тогда
Временный = ТестовыйМассив[б];
ТестовыйМассив[б] = ТестовыйМассив[б + 1];
ТестовыйМассив[б + 1] = Временный;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
```

10 changes: 5 additions & 5 deletions docs/Параметризация.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

# Виды параметров

## Общие параметры класса
## Общие параметры

**Общие параметры** применяются ко всем бенчмаркам класса и задаются через экспортные поля класса.
**Общие параметры** применяются ко всем бенчмаркам и задаются через экспортные поля класса.
Они создают варианты выполнения всех бенчмарков с разными значениями общих параметров.

### Пример
Expand Down Expand Up @@ -86,7 +86,7 @@

Простой и наглядный способ для небольшого количества фиксированных значений.

### Общие параметры класса
### Общие параметры

Аннотация размещается непосредственно над объявлением экспортного поля класса.

Expand Down Expand Up @@ -129,7 +129,7 @@
> - Элементы в неизменном порядке
> - Постоянное количество элементов

### Общие параметры класса
### Общие параметры

Функция-источник должна возвращать массив или таблицу значений. Каждый элемент коллекции становится отдельным значением общего параметра.

Expand Down Expand Up @@ -270,7 +270,7 @@

Параметры можно задавать программно через объекты `КонфигурацияБенчмарков` и `ДескрипторБенчмарка`.

## Общие параметры класса
## Общие параметры

Используйте методы `ДобавитьПараметр` и `ДобавитьИсточникПараметров` объекта `КонфигурацияБенчмарков`.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
Конфигурация = Новый КонфигурацияБенчмарков(Тип)
.ДобавитьОбработчикСобытия("ОбработчикиСобытийБенчмарковПример.Инициализация", СобытияБенчмарков.ПередВсеми)
.ДобавитьОбработчикСобытия("ОбработчикиСобытийБенчмарковПример.Завершение", СобытияБенчмарков.ПослеВсех)
.ДобавитьОбработчикСобытия("ОбработчикиСобытийБенчмарковПример.ПередЗапуском", СобытияБенчмарков.ПередКаждым)
.ДобавитьОбработчикСобытия("ОбработчикиСобытийБенчмарковПример.ПослеЗапуска", СобытияБенчмарков.ПослеКаждого);
.ДобавитьОбработчикСобытия("ОбработчикиСобытийБенчмарковПример.ПередЗапуском", СобытияБенчмарков.ПередКаждымКейсом)
.ДобавитьОбработчикСобытия("ОбработчикиСобытийБенчмарковПример.ПослеЗапуска", СобытияБенчмарков.ПослеКаждогоКейса);

Бенчмаркинг.Запустить(Тип, Конфигурация);
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
Перем Таблица;
Перем ИскомыйКлюч; // Последний добавленный ключ - худший случай для линейного поиска

&ПередКаждым
&ПередКаждымКейсом
Процедура ПодготовитьДанные(Контекст) Экспорт

Массив = Новый Массив(Размер);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&ПередКаждым
&ПередКаждымКейсом
Процедура ПодготовитьДанные(Контекст) Экспорт

Элементы = Новый Массив(Количество);
Expand Down
Loading
Loading