diff --git a/.bsl-language-server.json b/.bsl-language-server.json index 688a957..2a786ce 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -5,7 +5,7 @@ "listOfIncorrectFirstSymbol": ";|,\\s*\\S+" }, "Typo": { - "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка" + "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас" } } } diff --git "a/build/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\265\320\275\321\202\320\276\320\262.os" "b/build/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\265\320\275\321\202\320\276\320\262.os" index a667c99..015d4b6 100644 --- "a/build/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\265\320\275\321\202\320\276\320\262.os" +++ "b/build/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\265\320\275\321\202\320\276\320\262.os" @@ -7,10 +7,12 @@ ИменаПроектов = Новый Массив(); ИменаПроектов.Добавить("GcStats"); ИменаПроектов.Добавить("Chronometer"); + ИменаПроектов.Добавить("BenchmarkOneScript.Extensions"); ИменаФайловБиблиотек = Новый Массив(); ИменаФайловБиблиотек.Добавить("1script_GcStats.dll"); ИменаФайловБиблиотек.Добавить("1script_Chronometer.dll"); + ИменаФайловБиблиотек.Добавить("1script_BenchmarkOneScriptExtensions.dll"); ИменаФайловБиблиотек.Добавить("Perfolizer.dll"); СобратьБиблиотекуDotNET(ИменаПроектов); diff --git a/docs/CLI.md b/docs/CLI.md index 7d56a53..00b8478 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -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` | ## Примеры diff --git a/docs/README.md b/docs/README.md index dd72e52..f4ac869 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,7 +3,6 @@ ## Темы - [Быстрый старт](БыстрыйСтарт.md) - [Запуск бенчмарков](ЗапускБенчмарков.md) -- [Выбор стратегии запуска](ВыборСтратегииЗапуска.md) - [Параметризация](Параметризация.md) - [Эталоны](Эталоны.md) - [Мониторинг памяти](МониторингПамяти.md) @@ -11,6 +10,8 @@ - [Статистика](Статистика.md) - [Сортировка отчета](СортировкаОтчета.md) - [Экспорт результатов](ЭкспортРезультатов.md) +- [Среда выполнения](СредаВыполнения.md) +- [Стратегии запуска](СтратегииЗапуска.md) - [CLI](CLI.md) - [Аннотации](../src/BenchmarkOneScript/annotations/Классы) diff --git "a/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" "b/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" index 3050708..381d0ac 100644 --- "a/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" +++ "b/docs/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.md" @@ -6,7 +6,7 @@ benchos run [OPTIONS] [FILE] ``` -Более подробно про CLI можно почитать в [документации](CLI.md). +Подробнее см. в разделе [CLI](CLI.md). ### Примеры использования @@ -72,10 +72,16 @@ benchos run -r -m -e json ./benchmarks/ // Создание новой конфигурации Конфигурация = Новый КонфигурацияБенчмарков(); Конфигурация.УстановитьКоличествоИтераций(10); +// ... + Результат = Бенчмаркинг.Запустить(Тип("МойКласс"), Конфигурация); +``` +```bsl // Модификация существующей конфигурации Конфигурация = Новый КонфигурацияБенчмарков(Тип("МойКласс")); Конфигурация.УстановитьКоличествоИтераций(10); +// ... + Результат = Бенчмаркинг.Запустить(Тип("МойКласс"), Конфигурация); ``` diff --git "a/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" "b/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" index 00bb8c8..f768633 100644 --- "a/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" +++ "b/docs/\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.md" @@ -2,20 +2,30 @@ Для анализа аллокаций предусмотрена аннотация `&МониторингПамяти`. -### Аннотация +### Конфигурирование + +#### Аннотация ```bsl &МониторингПамяти Процедура ПриСозданииОбъекта() ``` -### API +#### API ```bsl Конфигурация.ДобавитьМониторингПамяти(); ``` -### Пример +#### CLI + +```bash +benchos run --memory [FILE] +``` + +Подробнее см. в разделе [CLI](CLI.md). + +## Пример ```bsl &МониторингПамяти @@ -33,7 +43,7 @@ КонецПроцедуры ``` -### Вывод +### Результаты выполнения | Method | Количество | Mean | StdErr | StdDev | Median | Op/s | Allocated | |----------|-----------:|------------:|------------:|----------:|------------:|---------:|------------:| diff --git "a/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" "b/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" index a668abf..73cf364 100644 --- "a/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" +++ "b/docs/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.md" @@ -1,26 +1,68 @@ # Обработчики событий -Для изоляции логики подготовки и завершения от измеряемого кода в тестах производительности предусмотрен механизм обработчиков событий. -Используйте специальные аннотации, чтобы определить методы, которые будут выполняться в разных фазах жизненного цикла бенчмарков: +Для изоляции логики подготовки и завершения от измеряемого кода реализован механизм обработчиков событий. +Используйте специальные аннотации, чтобы определить методы, которые будут выполняться в разных фазах жизненного цикла бенчмарков: + +## Конфигурирование ### Аннотации -#### &ПередВсеми -Аннотация `&ПередВсеми` помечает метод, который выполняется **один раз** перед запуском всех бенчмарков. -Этот метод предназначен для глобальной подготовки данных, инициализации ресурсов (например, подключение к базе, загрузка файлов) или настройки окружения. +#### Перед всеми +Вызывается **перед запуском всех** бенчмарков. +Используется для подготовки данных, инициализации ресурсов или настройки окружения перед выполнением бенчмарков. + +```bsl +// Параметры: +// * Контекст - Структура: +// ** Конфигурация - КонфигурацияБенчмарков +// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +&ПередВсеми +Процедура ПередВсеми(Контекст) Экспорт +``` + +#### После всех +Вызывается **после запуска всех** бенчмарков. +Используется для финализации: освобождения ресурсов (закрытие соединений), записи итоговых отчетов или выполнения других действий. + +```bsl +// Параметры: +// * Контекст - Структура: +// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// ** Конфигурация - КонфигурацияБенчмарков +// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// ** Отчет - ОтчетБенчмарков +&ПослеВсех +Процедура ПослеВсех(Контекст) Экспорт +``` -#### &ПослеВсех -Метод с аннотацией `&ПослеВсех` вызывается **после завершения всех бенчмарков**. -Он используется для финализации: освобождения ресурсов (закрытие соединений), записи итоговых отчетов или выполнения других действий. +#### Перед каждым +Вызывается **перед каждым запуском бенчмарка**. +Позволяет подготовить контекст для отдельного теста - например, сбросить состояние объекта, сгенерировать тестовые данные или выполнить предварительные проверки. -#### &ПередКаждым -Аннотация `&ПередКаждым` указывает, что метод должен выполняться **перед каждым запуском бенчмарка**. -Это позволяет подготовить контекст для отдельного теста — например, сбросить состояние объекта, сгенерировать тестовые данные или выполнить предварительные проверки. +```bsl +// Параметры: +// * Контекст - Структура: +// ** ДескрипторБенчмарка - ДескрипторБенчмарка +// ** ПараметрыМетода - Массив из Произвольный +&ПередКаждым +Процедура ПередКаждым(Контекст) Экспорт +``` -#### &ПослеКаждого -Метод с аннотацией `&ПослеКаждого` вызывается **после каждого выполнения бенчмарка**. +#### После каждого +Вызывается **после каждого выполнения бенчмарка**. Он используется для постобработки: валидации результатов, сброса временных значений или освобождения ресурсов, которые создавались для конкретного теста. +```bsl +// Параметры: +// * Контекст - Структура: +// ** ДескрипторБенчмарка - ДескрипторБенчмарка +// ** Параметры - Массив из ПараметрБенчмарка +// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// ** Статистика - СтатистикаБенчмарка +&ПослеКаждого +Процедура ПослеКаждого(Контекст) Экспорт +``` + ### API ```bsl @@ -30,31 +72,46 @@ Новый Делегат(Объект, "Инициализация") ); -// Регистрация обработчика из класса бенчмарка +// Регистрация обработчика из экземпляра класса бенчмарка Конфигурация.ДобавитьОбработчикСобытия СобытияБенчмарков.ПослеВсех, "Завершение" ); -// Удаление всех обработчиков для события +// Удаление обработчиков для события Конфигурация.УдалитьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым); + +// Удаление всех обработчиков +Конфигурация.УдалитьОбработчикиСобытий(); ``` -### Пример +## Пример ```bsl Перем ДвоичныеДанные; &ПередВсеми Процедура Инициализация(Контекст) Экспорт + Сообщить("Вызван обработчик перед запуском всех бенчмарков"); ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки("Много данных"); КонецПроцедуры &ПослеВсех Процедура Завершение(Контекст) Экспорт + Сообщить("Вызван обработчик после завершения всех бенчмарков"); ДвоичныеДанные = Неопределено; КонецПроцедуры +&ПередКаждым +Процедура ПередКаждым(Контекст) Экспорт + Сообщить("Вызван обработчик перед запуском бенчмарка"); +КонецПроцедуры + +&ПослеКаждого +Процедура ПослеКаждого(Контекст) Экспорт + Сообщить("Вызван обработчик после запуска бенчмарка"); +КонецПроцедуры + &Бенчмарк Процедура SHA256() Экспорт ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256); diff --git "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" index 17e0beb..2ec03f7 100644 --- "a/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" +++ "b/docs/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\270\320\267\320\260\321\206\320\270\321\217.md" @@ -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) @@ -33,7 +57,7 @@ КонецПроцедуры ``` -### Вывод +### Результаты выполнения | Method | ДобавляемаяЗадержка | Задержка1 | Задержка2 | Mean | StdErr | StdDev | Median | Op/s | |----------|--------------------:|----------:|----------:|---------:|--------:|----------:|---------:|------:| diff --git "a/docs/\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260.md" "b/docs/\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260.md" index 2006f4a..012b788 100644 --- "a/docs/\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260.md" +++ "b/docs/\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260.md" @@ -1,17 +1,23 @@ # Сортировка отчета +## Конфигурирование + ### Аннотации +1. Сортировка результатов по убыванию производительности (от лучшего к худшему) ```bsl -// Сортировка результатов по убыванию производительности (от лучшего к худшему) &СортировкаОтБыстрыхКМедленным Процедура ПриСозданииОбъекта() +``` -// Сортировка результатов по возрастанию времени выполнения (от худшего к лучшему) +2. Сортировка результатов по возрастанию времени выполнения (от худшего к лучшему) +```bsl &СортировкаОтМедленныхКБыстрым Процедура ПриСозданииОбъекта() +``` -// Сортировка результатов по наименованию метода бенчмарка +3. Сортировка результатов по наименованию метода бенчмарка +```bsl &СортировкаПоМетоду Процедура ПриСозданииОбъекта() ``` @@ -25,7 +31,7 @@ Конфигурация.УстановитьСортировкуОтчета(СортировкиОтчетаБенчмарков.ПоМетоду); ``` -### Пример +## Пример ```bsl &Параметры(1, 2, 3) @@ -46,7 +52,7 @@ КонецПроцедуры ``` -### Вывод +### Результаты выполнения | Method | Множитель | Mean | StdErr | StdDev | Median | Op/s | |-----------|----------:|---------:|----------:|----------:|---------:|------:| diff --git "a/docs/\320\241\321\200\320\265\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217.md" "b/docs/\320\241\321\200\320\265\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217.md" new file mode 100644 index 0000000..92a63d9 --- /dev/null +++ "b/docs/\320\241\321\200\320\265\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\265\320\275\320\270\321\217.md" @@ -0,0 +1,110 @@ +# Среда выполнения + +Для сравнения производительности в разных версиях **OneScript** используется аннотация `&ИсполняющаяСреда`, позволяющая: +- Тестировать код в нескольких средах одновременно +- Сравнивать производительность относительно эталонной версии +- Использовать как стандартные релизы, так и кастомные сборки + +## Конфигурирование + +### Аннотации + +1. Базовый вариант (несколько версий через запятую) +```bsl +&ИсполняющаяСреда("stable, dev, 1.9.3") +Процедура ПриСозданииОбъекта() +``` + +2. С кастомным именем для отчётов +```bsl +&ИсполняющаяСреда(Версия = "1.9.3", Наименование = "Стабильная сборка") +&ИсполняющаяСреда(Версия = "dev", Наименование = "Ночная сборка") +Процедура ПриСозданииОбъекта() +``` + +3. Указание эталонной версии для сравнения +```bsl +&ИсполняющаяСреда( + Версия = "stable", + Наименование = "Стабильная сборка", + ЭтоЭталон = Истина +) +Процедура ПриСозданииОбъекта() +``` + +4. Использование кастомного исполняемого файла +```bsl +&ИсполняющаяСреда(Версия = "path/to/oscript.exe", Наименование = "Моя сборка") +Процедура ПриСозданииОбъекта() +``` + +### API + +1. Простой вариант указания версий +```bsl +Конфигурация + .ДобавитьВерсиюИсполняющейСреды("stable") + .ДобавитьВерсиюИсполняющейСреды("dev") + .ДобавитьВерсиюИсполняющейСреды("1.9.3"); +``` + +2. С кастомным именем для отчётов +```bsl +Конфигурация + .ДобавитьВерсиюИсполняющейСреды("1.9.3", "Стабильная сборка") + .ДобавитьВерсиюИсполняющейСреды("dev", "Ночная сборка") +``` + +3. Указание эталонной версии +```bsl +Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "Стабильная сборка", Истина) +``` + +4. Путь к исполняющему файлу +```bsl +Конфигурация.ДобавитьВерсиюИсполняющейСреды("path/to/oscript.exe", "Моя сборка") +``` + +### CLI + +Для указания версий OneScript используйте опцию `--runtime` со значениями через запятую: + +```bash +benchos run --runtime=stable,dev,1.9.3 [FILE] +``` + +Подробнее см. в разделе [CLI](CLI.md). + +## Пример + +```bsl +Перем ДвоичныеДанные; + +&ИсполняющаяСреда("dev") +&ИсполняющаяСреда( + Версия = "stable", + Наименование = "Стабильная", + ЭтоЭталон = Истина +) +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +&ПередВсеми +Процедура Инициализация(Контекст) Экспорт + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки("Много данных"); +КонецПроцедуры + +&Бенчмарк +Процедура SHA256() Экспорт + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256); + ХешированиеДанных.Добавить(ДвоичныеДанные); + ХешСумма = ХешированиеДанных.ХешСумма; +КонецПроцедуры +``` + +### Результаты выполнения + +| Method | Runtime | Baseline | Mean | StdErr | StdDev | Ratio | RatioSD | Op/s | +|--------|-----------------------|----------|----------:|---------:|---------:|------:|--------:|--------:| +| SHA256 | 2.0.0-rc.8+608 | No | 9.048 us | 93.81 ns | 363.3 ns | 0.67 | 0.03 | 110,523 | +| SHA256 | Стабильная (1.9.3.15) | Yes | 13.561 us | 70.97 ns | 274.9 ns | 1.00 | 0.00 | 73,742 | \ No newline at end of file diff --git "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" "b/docs/\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" similarity index 84% rename from "docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" rename to "docs/\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" index 4b0e938..0d6a6d2 100644 --- "a/docs/\320\222\321\213\320\261\320\276\321\200\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" +++ "b/docs/\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\320\270\320\227\320\260\320\277\321\203\321\201\320\272\320\260.md" @@ -1,41 +1,61 @@ -# Выбор стратегии запуска +# Стратегии запуска бенчмарков -## ПропускнаяСпособность +## Пропускная способность (Throughput) Стратегия используется по умолчанию. Оптимальна для микробенчмаркинга. Автоматическии подбирает количество вызовов за итерацию. Выполняет прогревочные итерации для стабилизации результатов. -### Аннотация +### Конфигурирование + +#### Аннотация ```bsl &СтратегияПропускнаяСпособность Процедура ПриСозданииОбъекта() ``` -### API +#### API ```bsl Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ПропускнаяСпособность) ``` -## ХолодныйЗапуск +#### CLI + +```bash +benchos run --throughput [FILE] +``` + +Подробнее см. в разделе [CLI](CLI.md). + +## Холодный запуск (Cold Start) Стратегия для оценки производительности при первом запуске без предварительной оптимизации (Отключает оценочные и прогревочные итерации). -### Аннотация +### Конфигурирование + +##### Аннотация ```bsl &СтратегияХолодныйЗапуск Процедура ПриСозданииОбъекта() ``` -### API +##### API ```bsl Конфигурация.УстановитьСтратегию(СтратегииЗапускаБенчмарка.ХолодныйЗапуск) ``` -### Пример +#### CLI + +```bash +benchos run --coldstart [FILE] +``` + +Подробнее см. в разделе [CLI](CLI.md). + +## Пример ```bsl Перем ЭтоПервыйВызов; @@ -61,7 +81,7 @@ КонецПроцедуры ``` -### Вывод +### Результаты выполнения ```md // Бенчмарк: МойКласс.Бенчмарк diff --git "a/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" "b/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" index e770e37..eb120e3 100644 --- "a/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" +++ "b/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" @@ -2,6 +2,8 @@ **BenchmarkOneScript** позволяет сохранить результаты выполнения бенчмарков в различных форматах. По умолчанию файлы с результатами генерируются в каталоге _./BenchmarkArtifacts_ относительно текущей рабочей директории. +## Конфигурирование + ### Настройка каталога артефактов Каталог для сохранения результатов можно изменить двумя способами: @@ -44,7 +46,7 @@ Конфигурация.УдалитьЭкспортеры(); ``` -### Пример +## Пример ```bsl &ЭкспортMarkdown @@ -61,7 +63,7 @@ КонецПроцедуры ``` -### Вывод +### Результаты выполнения ``` BenchmarkOneScript v0.3.1, OneScript v2.0.0.567-rc7-29039316, Microsoft Windows NT 10.0.20348.0 \ diff --git "a/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" "b/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" index 7160c63..26499a7 100644 --- "a/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" +++ "b/docs/\320\255\321\202\320\260\320\273\320\276\320\275\321\213.md" @@ -1,9 +1,19 @@ # Эталоны -Для обозначения эталонного метода бенчмарка используйте аннотацию `&Эталон`. -Это позволяет сравнивать производительность других методов с выбранным эталоном. +## Эталонные бенчмарки -### API +Результаты выполнения эталонного бенчмарка используются как базовая метрика для оценки эффективности других тестов. + +### Конфигурирование + +#### Аннотация + +```bsl +&Эталон +Процедура Бенчмарк() Экспорт +``` + +#### API ```bsl // Установка текущего бенчмарка в качестве эталона @@ -33,7 +43,7 @@ КонецПроцедуры ``` -### Вывод +#### Результаты выполнения В отчете автоматически добавляется колонка `Ratio`, показывающая среднее значение соотношений времени выполнения относительно эталона и в некоторых ситуациях колонка [`RatioSD`](#ratiosd). @@ -50,7 +60,7 @@ ## Множественные эталоны через категории -Для использования нескольких эталонов в одном классе применяйте категории. Каждая категория может иметь собственный эталон. +Для использования нескольких эталонных бенчмарков в одном классе применяйте категории. Каждая категория может иметь собственный эталон. ### Пример @@ -82,7 +92,7 @@ КонецПроцедуры ``` -### Вывод +#### Результаты выполнения | Method | Categories | Baseline | Mean | StdErr | StdDev | Ratio | Median | Op/s | |-------------|------------|----------|----------:|---------:|----------:|------:|----------:|-------:| @@ -135,7 +145,7 @@ КонецПроцедуры ``` -### Вывод +#### Результаты выполнения | Method | Baseline | Mean | StdErr | StdDev | Ratio | RatioSD | Median | Op/s | |-----------|----------|----------:|--------------:|---------------:|------:|--------:|----------:|-------:| @@ -147,4 +157,8 @@ Обе метрики демонстрируют противоречивую картину из-за влияния выброса. Для решения этой проблемы инструмент BenchmarkOneScript вводит метрику `RatioSD`, которая количественно оценивает нестабильность тестов. -Принцип интерпретации: **чем выше значение `RatioSD`, тем больше вариативность результатов**, что указывает на потенциальные проблемы в воспроизводимости тестирования. \ No newline at end of file +Принцип интерпретации: **чем выше значение `RatioSD`, тем больше вариативность результатов**, что указывает на потенциальные проблемы в воспроизводимости тестирования. + +## Эталонные версии исполняющей среды + +Подробнее см. в разделе [Среда выполнения](СредаВыполнения.md). \ No newline at end of file diff --git a/packagedef b/packagedef index 32d0ce3..b1bf847 100644 --- a/packagedef +++ b/packagedef @@ -29,6 +29,7 @@ .ЗависитОт("xml-parser", "0.1.1") .ЗависитОт("logos", "1.7.1") .ЗависитОт("fs", "1.2.0") + .ЗависитОт("tempfiles", "1.1.1") .РазработкаЗависитОт("1testrunner") .РазработкаЗависитОт("coverage") .РазработкаЗависитОт("1commands") diff --git "a/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\240\320\260\320\267\320\275\321\213\321\205\320\222\320\265\321\200\321\201\320\270\321\217\321\205OneScript.os" "b/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\240\320\260\320\267\320\275\321\213\321\205\320\222\320\265\321\200\321\201\320\270\321\217\321\205OneScript.os" new file mode 100644 index 0000000..105ccc2 --- /dev/null +++ "b/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\240\320\260\320\267\320\275\321\213\321\205\320\222\320\265\321\200\321\201\320\270\321\217\321\205OneScript.os" @@ -0,0 +1,10 @@ +#Использовать benchmark +#Использовать "../benchmarks" + +Тип = Тип("БенчмаркБазовый"); + +Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .ДобавитьВерсиюИсполняющейСреды("dev") + .ДобавитьВерсиюИсполняющейСреды("stable", , Истина); + +Бенчмаркинг.Запустить(Тип, Конфигурация); \ No newline at end of file diff --git "a/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" "b/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" index 9395c6e..66da71d 100644 --- "a/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" +++ "b/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" @@ -8,7 +8,7 @@ Порог = 150; // мс Результат = Бенчмаркинг.Запустить(Тип("БенчмаркБазовый")); - Статистика = Результат.РезультатыЗапусков[0].Статистика.ВМиллисекунды(); + Статистика = Результат.Расшифровка[0].Статистика.ВМиллисекунды(); Ожидаем.Что(Статистика.Среднее).Меньше(Порог); @@ -23,7 +23,7 @@ ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("А2"); Результат = Бенчмаркинг.Запустить(ДескрипторБенчмарка); - Статистика = Результат.РезультатыЗапусков[0].Статистика.ВМиллисекунды(); + Статистика = Результат.Расшифровка[0].Статистика.ВМиллисекунды(); Ожидаем.Что(Статистика.Среднее).Меньше(Порог); diff --git "a/samples/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\320\267\320\273\320\270\321\207\320\275\321\213\320\265\320\222\320\265\321\200\321\201\320\270\320\270\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" "b/samples/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\320\267\320\273\320\270\321\207\320\275\321\213\320\265\320\222\320\265\321\200\321\201\320\270\320\270\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" new file mode 100644 index 0000000..ccf50c5 --- /dev/null +++ "b/samples/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\240\320\260\320\267\320\273\320\270\321\207\320\275\321\213\320\265\320\222\320\265\321\200\321\201\320\270\320\270\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" @@ -0,0 +1,22 @@ +Перем ДвоичныеДанные; + +&ИсполняющаяСреда("dev") +&ИсполняющаяСреда( + Версия = "stable", + Наименование = "Стабильная", + ЭтоЭталон = Истина +) +Процедура ПриСозданииОбъекта() +КонецПроцедуры + +&ПередВсеми +Процедура Инициализация(Контекст) Экспорт + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки("Много данных"); +КонецПроцедуры + +&Бенчмарк +Процедура SHA256() Экспорт + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA256); + ХешированиеДанных.Добавить(ДвоичныеДанные); + ХешСумма = ХешированиеДанных.ХешСумма; +КонецПроцедуры diff --git a/sonar-project.properties b/sonar-project.properties index cd09f81..3d7896a 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -7,3 +7,4 @@ sonar.sources=./src sonar.tests=./tests sonar.sourceEncoding=UTF-8 sonar.coverageReportPaths=out/genericCoverage.xml +sonar.test.exclusions=**/fixtures/** \ No newline at end of file diff --git a/src/BenchmarkOneScript.Extensions/BenchmarkOneScript.Extensions.csproj b/src/BenchmarkOneScript.Extensions/BenchmarkOneScript.Extensions.csproj new file mode 100644 index 0000000..0065f52 --- /dev/null +++ b/src/BenchmarkOneScript.Extensions/BenchmarkOneScript.Extensions.csproj @@ -0,0 +1,24 @@ + + + + net48;net6.0; + 10.0 + https://github.com/Stivo182/BenchmarkOneScript + https://github.com/Stivo182/BenchmarkOneScript + BenchmarkOneScriptExtensions + Stivo182 + Stivo182 + 1.0.0 + 1.0.0 + 1script_BenchmarkOneScriptExtensions + + + + + + + + + + + diff --git a/src/BenchmarkOneScript.Extensions/BenchmarkOneScript.Extensions.sln b/src/BenchmarkOneScript.Extensions/BenchmarkOneScript.Extensions.sln new file mode 100644 index 0000000..5b9be9d --- /dev/null +++ b/src/BenchmarkOneScript.Extensions/BenchmarkOneScript.Extensions.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36121.58 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BenchmarkOneScript.Extensions", "BenchmarkOneScript.Extensions.csproj", "{8EAE4AA8-C94D-453A-A926-DED819A1A4C3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8EAE4AA8-C94D-453A-A926-DED819A1A4C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8EAE4AA8-C94D-453A-A926-DED819A1A4C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8EAE4AA8-C94D-453A-A926-DED819A1A4C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8EAE4AA8-C94D-453A-A926-DED819A1A4C3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {74C3AD8F-1F5B-46AD-9A71-775ACFB92CB7} + EndGlobalSection +EndGlobal diff --git a/src/BenchmarkOneScript.Extensions/ObjectExtension.cs b/src/BenchmarkOneScript.Extensions/ObjectExtension.cs new file mode 100644 index 0000000..9bbca9d --- /dev/null +++ b/src/BenchmarkOneScript.Extensions/ObjectExtension.cs @@ -0,0 +1,28 @@ +#if NET6_0_OR_GREATER +using OneScript.Contexts; +#endif + +using ScriptEngine.Machine; +using ScriptEngine.Machine.Contexts; + +namespace BenchmarkOneScript.Extensions; + +[ContextClass("РасширениеОбъекта")] +public class ObjectExtension : AutoContext +{ + [ContextProperty("ХешКод", "HashCode")] + public string HashCode => _Object.GetHashCode().ToString("X"); + + IValue _Object; + + public ObjectExtension(IValue obj) + { + _Object = obj; + } + + [ScriptConstructor] + public static ObjectExtension Constructor(IValue obj) + { + return new ObjectExtension(obj); + } +} \ No newline at end of file diff --git a/src/BenchmarkOneScript.Extensions/TypeExtension.cs b/src/BenchmarkOneScript.Extensions/TypeExtension.cs new file mode 100644 index 0000000..4d685e9 --- /dev/null +++ b/src/BenchmarkOneScript.Extensions/TypeExtension.cs @@ -0,0 +1,33 @@ +#if NET6_0_OR_GREATER +using OneScript.Contexts; +#endif + +using ScriptEngine.Machine; +using ScriptEngine.Machine.Contexts; + +namespace BenchmarkOneScript.Extensions; + +[ContextClass("РасширениеТипа")] +public class TypeExtension : AutoContext +{ + [ContextProperty("Источник", "Source")] + public string Source => +#if NET6_0_OR_GREATER + AttachedScriptsFactory.GetModuleOfType(_type.ToString())?.Source?.Location ?? ""; +#else + AttachedScriptsFactory.GetModuleOfType(_type.ToString())?.ModuleInfo?.Origin ?? ""; +#endif + + IValue _type; + + public TypeExtension(IValue type) + { + _type = type; + } + + [ScriptConstructor] + public static TypeExtension Constructor(IValue type) + { + return new TypeExtension(type); + } +} \ No newline at end of file diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" index 745a2ea..55e3154 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" @@ -4,7 +4,7 @@ // При запуске будут замеряться время выполнения, аллокации памяти (если включен мониторинг памяти), // и другие параметры производительности. // -// Пример: +// Примеры: // &Бенчмарк // Процедура МойБенчмарк() Экспорт // // Тестируемый код diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260.os" new file mode 100644 index 0000000..3c42a88 --- /dev/null +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260.os" @@ -0,0 +1,36 @@ +// Аннотация определяет среду исполнения для запуска бенчмарков. +// +// Применяется только к методу ПриСозданииОбъекта. +// +// Параметры: +// Версия - Строка - Версия OneScript: +// 1) Номер версии ("1.9.3") +// 2) Алиас ("stable", "dev") +// 3) Абсолютный путь к исполняемому файлу ("path/to/oscript.exe") +// Наименование - Строка - Произвольное имя среды для отчета +// ЭтоЭталон - Булево - Флаг эталонной среды для сравнения результатов +// +// Примеры: +// 1) &ИсполняющаяСреда("stable") +// &ИсполняющаяСреда("dev") +// &ИсполняющаяСреда("path/to/oscript.exe") +// Процедура ПриСозданииОбъекта() +// // ... +// КонецПроцедуры +// +// 2) &ИсполняющаяСреда("1.9.3, dev") +// Процедура ПриСозданииОбъекта() +// // ... +// КонецПроцедуры +// +// 3) &ИсполняющаяСреда( +// Версия = "stable" +// Наименование = "Стабильная", +// ЭтоЭталон = Истина +// ) +// Процедура ПриСозданииОбъекта() +// // ... +// КонецПроцедуры +&Аннотация("ИсполняющаяСреда") +Процедура ПриСозданииОбъекта(Версия, Наименование = "", ЭтоЭталон = Ложь) +КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\220\321\200\321\202\320\265\321\204\320\260\320\272\321\202\320\276\320\262.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\220\321\200\321\202\320\265\321\204\320\260\320\272\321\202\320\276\320\262.os" index a665dae..78516fb 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\220\321\200\321\202\320\265\321\204\320\260\320\272\321\202\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\220\321\200\321\202\320\265\321\204\320\260\320\272\321\202\320\276\320\262.os" @@ -3,7 +3,7 @@ // - Применяется только к методу ПриСозданииОбъекта // - Путь может быть абсолютным или относительным // -// Пример: +// Примеры: // &КаталогАртефактов("path/to/artifacts") // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" index 4260dae..f43d72b 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" @@ -3,7 +3,7 @@ // // Применяется только к методам бенчмарков. // -// Пример: +// Примеры: // &Бенчмарк // &Категория("Имя категории") // Процедура Бенчмарк() Экспорт diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" index 5c63e30..63bbeb3 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" @@ -6,7 +6,7 @@ // - Применяется только к методу ПриСозданииОбъекта // - Если установлено "0", то количество будет рассчитано автоматически // -// Пример: +// Примеры: // &КоличествоВызововЗаИтерацию(100) // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" index 6c93ed9..4f9587c 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" @@ -5,7 +5,7 @@ // // Применяется только к методу ПриСозданииОбъекта // -// Пример: +// Примеры: // &КоличествоИтераций(20) // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\237\321\200\320\276\320\263\321\200\320\265\320\262\320\276\321\207\320\275\321\213\321\205\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\237\321\200\320\276\320\263\321\200\320\265\320\262\320\276\321\207\320\275\321\213\321\205\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" index 9adbe1e..b286c0d 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\237\321\200\320\276\320\263\321\200\320\265\320\262\320\276\321\207\320\275\321\213\321\205\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\237\321\200\320\276\320\263\321\200\320\265\320\262\320\276\321\207\320\275\321\213\321\205\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" @@ -7,7 +7,7 @@ // - Если установлено "0", то прогревочный этап будет пропущен // - Игнорируется для стратегии "ХолодныйЗапуск" // -// Пример: +// Примеры: // &КоличествоПрогревочныхИтераций(10) // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260RatioSD.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260RatioSD.os" index 9498316..6f94bfb 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260RatioSD.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260RatioSD.os" @@ -9,7 +9,7 @@ // - Применяется только к методу ПриСозданииОбъекта. // - Добавляется автоматически при наличии значимых данных // -// Пример: +// Примеры: // &КолонкаRatioSD // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" index 8ad5d5b..1420a67 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" @@ -6,7 +6,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &КолонкаВерхнийКвартиль // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\260\320\272\321\201.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\260\320\272\321\201.os" index f56a4aa..e3b765a 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\260\320\272\321\201.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\260\320\272\321\201.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &КолонкаМакс // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" index 05baa42..bf54621 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" @@ -4,7 +4,7 @@ // - Применяется только к методу ПриСозданииОбъекта // - Добавляется автоматически при значительном отклонении от среднего (mean) // -// Пример: +// Примеры: // &КолонкаМедиана // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\270\320\275.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\270\320\275.os" index 95bb4d7..53006e5 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\270\320\275.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\270\320\275.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &КолонкаМин // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" index b659f84..7465ea9 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" @@ -6,7 +6,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &КолонкаНижнийКвартиль // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\222\321\200\320\265\320\274\321\217\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\270.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\222\321\200\320\265\320\274\321\217\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\270.os" index 2e5e783..315a9b7 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\222\321\200\320\265\320\274\321\217\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\270.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\222\321\200\320\265\320\274\321\217\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\270.os" @@ -1,13 +1,13 @@ // Задает минимальное время выполнения одной итерации бенчмарка в миллисекундах. // -// BenchmarkOneScript динамически подбирает количество вызовов за итерацию (см. АннотацияКоличествоВызововЗаИтерацию) так, -// чтобы одна итерация длилась не меньше указанного времени. +// BenchmarkOneScript динамически подбирает количество вызовов за итерацию (см. АннотацияКоличествоВызововЗаИтерацию) +// так, чтобы одна итерация длилась не меньше указанного времени. // Увеличивает стабильность замеров для коротких операций. // // - Применяется только к методу ПриСозданииОбъекта // - Игнорируется для стратегии "ХолодныйЗапуск" // -// Пример: +// Примеры: // &МинимальноеВремяИтерации(1000) // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" index 5ea4110..dd68df8 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" @@ -6,7 +6,7 @@ // - Применяется только к методу ПриСозданииОбъекта // - Игнорируется для стратегии "ХолодныйЗапуск" // -// Пример: +// Примеры: // &МинимальноеКоличествоВызововЗаИтерацию(10) // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.os" index 95a82cc..2717f24 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.os" @@ -1,12 +1,10 @@ -// Включает мониторинг выделения памяти и сборок мусора (GC). +// Включает мониторинг выделения памяти. // -// При использовании этой аннотации в отчете будут отображаться: -// - Аллокации памяти в байтах за итерацию -// - (нет) Количество сборок мусора для поколений (Gen 0, Gen 1, Gen 2) - пока нет необходимости, но средство получения есть +// При использовании этой аннотации в отчете будут отображаться аллокации памяти в байтах за итерацию. // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &МониторингПамяти // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" index bc2d6fb..d4be7e8 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" @@ -5,7 +5,7 @@ // // Применяется к публичным полям класса и к методам бенчмарков. // -// Пример: +// Примеры: // &Параметры(Истина, Ложь) // Перем Флаг Экспорт; // diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\222\321\201\320\265\320\274\320\270.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\222\321\201\320\265\320\274\320\270.os" index cae63fa..54006da 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\222\321\201\320\265\320\274\320\270.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\222\321\201\320\265\320\274\320\270.os" @@ -3,15 +3,16 @@ // Метод с этой аннотацией используется для подготовки данных, инициализации ресурсов // или настройки окружения перед выполнением бенчмарков. // -// Пример: -// // Параметры: -// // Контекст - Структура: -// // * Конфигурация - КонфигурацияБенчмарков -// // * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// Параметры: +// Контекст - Структура: +// * Конфигурация - КонфигурацияБенчмарков +// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// +// Примеры: // &ПередВсеми // Процедура ПередВсеми(Контекст) Экспорт // // Подготовка данных // КонецПроцедуры &Аннотация("ПередВсеми") -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(Контекст) КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\232\320\260\320\266\320\264\321\213\320\274.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\232\320\260\320\266\320\264\321\213\320\274.os" index fd1dccd..359e1da 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\232\320\260\320\266\320\264\321\213\320\274.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\232\320\260\320\266\320\264\321\213\320\274.os" @@ -3,15 +3,16 @@ // Позволяет подготовить контекст для отдельного теста - например, сбросить состояние объекта, // сгенерировать тестовые данные или выполнить предварительные проверки. // -// Пример: -// // Параметры: -// // Контекст - Структура: -// // * ДескрипторБенчмарка - ДескрипторБенчмарка -// // * ПараметрыМетода - Массив из Произвольный +// Параметры: +// Контекст - Структура: +// * ДескрипторБенчмарка - ДескрипторБенчмарка +// * ПараметрыМетода - Массив из Произвольный +// +// Примеры: // &ПередКаждым // Процедура ПередКаждым(Контекст) Экспорт // // ... // КонецПроцедуры &Аннотация("ПередКаждым") -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(Контекст) КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" index 61a7285..1dc370e 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" @@ -3,18 +3,19 @@ // Используется для финализации: освобождения ресурсов (закрытие соединений), // записи итоговых отчетов или выполнения других действий. // -// Пример: -// // Параметры: -// // Контекст - Структура: -// // * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков -// // * Конфигурация - КонфигурацияБенчмарков -// // * РезультатыЗапусков - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков -// // * Отчет - ОтчетБенчмарков -// // * СредаОкружения - СредаОкруженияБенчмарков +// Параметры: +// Контекст - Структура: +// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// * Конфигурация - КонфигурацияБенчмарков +// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// * Отчет - ОтчетБенчмарков +// * СредаОкружения - СредаОкруженияБенчмарков +// +// Примеры: // &ПослеВсех // Процедура ПослеВсех(Контекст) Экспорт // // Очистка данных // КонецПроцедуры &Аннотация("ПослеВсех") -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(Контекст) КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" index a8297a8..bf14c6c 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" @@ -3,17 +3,18 @@ // Он используется для постобработки: валидации результатов, сброса временных значений // или освобождения ресурсов, которые создавались для конкретного теста. // -// Пример: -// // Параметры: -// // Контекст - Структура: -// // * ДескрипторБенчмарка - ДескрипторБенчмарка -// // * Параметры - Массив из ПараметрБенчмарка -// // * Замеры - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаЗамеров -// // * Статистика - СтатистикаБенчмарка +// Параметры: +// Контекст - Структура: +// * ДескрипторБенчмарка - ДескрипторБенчмарка +// * Параметры - Массив из ПараметрБенчмарка +// * Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// * Статистика - СтатистикаБенчмарка +// +// Примеры: // &ПослеКаждого // Процедура ПослеКаждого(Контекст) Экспорт // // ... // КонецПроцедуры &Аннотация("ПослеКаждого") -Процедура ПриСозданииОбъекта() +Процедура ПриСозданииОбъекта(Контекст) КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\221\321\213\321\201\321\202\321\200\321\213\321\205\320\232\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\320\274.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\221\321\213\321\201\321\202\321\200\321\213\321\205\320\232\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\320\274.os" index dd6cc17..0f6f6ed 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\221\321\213\321\201\321\202\321\200\321\213\321\205\320\232\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\320\274.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\221\321\213\321\201\321\202\321\200\321\213\321\205\320\232\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\320\274.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &СортировкаОтБыстрыхКМедленным // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\321\205\320\232\320\221\321\213\321\201\321\202\321\200\321\213\320\274.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\321\205\320\232\320\221\321\213\321\201\321\202\321\200\321\213\320\274.os" index fff66e6..913fd0c 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\321\205\320\232\320\221\321\213\321\201\321\202\321\200\321\213\320\274.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\321\205\320\232\320\221\321\213\321\201\321\202\321\200\321\213\320\274.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &СортировкаОтМедленныхКБыстрым // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\237\320\276\320\234\320\265\321\202\320\276\320\264\321\203.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\237\320\276\320\234\320\265\321\202\320\276\320\264\321\203.os" index 170b53d..6a38873 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\237\320\276\320\234\320\265\321\202\320\276\320\264\321\203.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\237\320\276\320\234\320\265\321\202\320\276\320\264\321\203.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &СортировкаПоМетоду // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\237\321\200\320\276\320\277\321\203\321\201\320\272\320\275\320\260\321\217\320\241\320\277\320\276\321\201\320\276\320\261\320\275\320\276\321\201\321\202\321\214.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\237\321\200\320\276\320\277\321\203\321\201\320\272\320\275\320\260\321\217\320\241\320\277\320\276\321\201\320\276\320\261\320\275\320\276\321\201\321\202\321\214.os" index b2e7823..4cf134e 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\237\321\200\320\276\320\277\321\203\321\201\320\272\320\275\320\260\321\217\320\241\320\277\320\276\321\201\320\276\320\261\320\275\320\276\321\201\321\202\321\214.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\237\321\200\320\276\320\277\321\203\321\201\320\272\320\275\320\260\321\217\320\241\320\277\320\276\321\201\320\276\320\261\320\275\320\276\321\201\321\202\321\214.os" @@ -6,7 +6,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &СтратегияПропускнаяСпособность // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\245\320\276\320\273\320\276\320\264\320\275\321\213\320\271\320\227\320\260\320\277\321\203\321\201\320\272.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\245\320\276\320\273\320\276\320\264\320\275\321\213\320\271\320\227\320\260\320\277\321\203\321\201\320\272.os" index 3892fc1..abd2c91 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\245\320\276\320\273\320\276\320\264\320\275\321\213\320\271\320\227\320\260\320\277\321\203\321\201\320\272.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\245\320\276\320\273\320\276\320\264\320\275\321\213\320\271\320\227\320\260\320\277\321\203\321\201\320\272.os" @@ -6,7 +6,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &СтратегияХолодныйЗапуск // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Html.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Html.os" index 6e12a4a..82c6514 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Html.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Html.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &ЭкспортHtml // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Json.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Json.os" index c77b427..dd76207 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Json.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Json.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &ЭкспортJson // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Markdown.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Markdown.os" index e185867..65e597a 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Markdown.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Markdown.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &ЭкспортMarkdown // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" index 7cb73d4..aa1ce58 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" @@ -2,7 +2,7 @@ // // Применяется только к методу ПриСозданииОбъекта. // -// Пример: +// Примеры: // &ЭкспортXml // Процедура ПриСозданииОбъекта() // // ... diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\321\202\320\260\320\273\320\276\320\275.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\321\202\320\260\320\273\320\276\320\275.os" index e95d3d6..0b46c46 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\321\202\320\260\320\273\320\276\320\275.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\321\202\320\260\320\273\320\276\320\275.os" @@ -5,7 +5,7 @@ // // Применяется только к методам бенчмарков. // -// Пример: +// Примеры: // &Бенчмарк // &Эталон // Процедура Бенчмарк() Экспорт diff --git a/src/BenchmarkOneScript/cmd/main.os b/src/BenchmarkOneScript/cmd/main.os index a46ce9f..5bdb9c4 100644 --- a/src/BenchmarkOneScript/cmd/main.os +++ b/src/BenchmarkOneScript/cmd/main.os @@ -1,5 +1,6 @@ #Использовать autumn #Использовать autumn-cli +#Использовать "../../../" #Использовать "." Поделка = Новый Поделка(); diff --git "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" index 46ab201..3ce69bf 100644 --- "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" @@ -1,6 +1,5 @@ // BSLLS:MissingVariablesDescription-off -#Использовать "../../../../" #Использовать fs #Использовать logos @@ -29,7 +28,7 @@ &ТЧисло Перем _КоличествоВызововЗаИтерацию; // Число -&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов (md, json, xml, html)") +&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов через запятую (md, json, xml, html)") &ТСтрока Перем _Экспортеры; // Строка @@ -38,18 +37,30 @@ Перем _КаталогАртефактов; // Строка &Опция(Имя = "coldstart", Описание = "Стратегия 'Холодный запуск'") -&ТБулево +&Флаг Перем _ХолодныйЗапуск; // Булево, Неопределено &Опция(Имя = "throughput", Описание = "Стратегия 'Пропускная способность'") -&ТБулево +&Флаг Перем _ПропускнаяСпособность; // Булево, Неопределено -&Аргумент(Имя = "FILE", Описание = "Каталог, полный путь к файлу или имя файла в текущей директории") +&Опция(Имя = "c config", Описание = "Файл конфигурации бенчмарков в формате JSON") +&ТСтрока +Перем _ФайлКонфигурации; // Строка + +&Опция(Имя = "runtime", Описание = "Версии OneScript через запятую (current, stable, dev, x.x.x)") &ТСтрока -Перем _ПутьКФайлу; // Строка +Перем _ИсполняющаяСреда; // Строка, Неопределено -Перем _Лог; +&Опция(Имя = "worker", Описание = "Режим worker") +&Флаг +&ПоУмолчанию(Ложь) +&СкрытьВСправке +Перем _ЭтоВоркер; // Булево + +&Аргумент(Имя = "FILE", Описание = "Каталог, полный путь к файлу или имя файла в текущей директории") +&ТМассивСтрок +Перем _МассивФайлов; // Массив из Строка &КомандаПриложения(Имя = "run", Описание = "Запуск бенчмарков") Процедура ПриСозданииОбъекта() @@ -58,45 +69,76 @@ &ВыполнениеКоманды Процедура Запустить() Экспорт - Если ФС.КаталогСуществует(_ПутьКФайлу) Тогда - Бенчмаркинг.ЗапуститьИзКаталога(_ПутьКФайлу, _Рекурсивно, Конфигурация()); - Возврат; - КонецЕсли; + УстановитьРежимВоркер(); - Файл = ФайлСценария(); - Если Файл = Неопределено Тогда - _Лог.Ошибка("Файл <%1> не существует", _ПутьКФайлу); - Возврат; - КонецЕсли; - - Тип = Бенчмаркинг.ПодключитьКласс(Файл.ПолноеИмя); - Если Не Тип = Неопределено Тогда - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - Конфигурация.Объединить(Конфигурация()); - Бенчмаркинг.Запустить(Тип, Конфигурация); - КонецЕсли; + Для Каждого Каталог Из КаталогиБенчмарков() Цикл + Бенчмаркинг.ЗапуститьИзКаталога(Каталог, _Рекурсивно, ПрочитатьКонфигурацию()); + КонецЦикла; + + Для Каждого ИмяФайла Из ФайлыБенчмарков() Цикл + Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); + Если Не Тип = Неопределено Тогда + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + Конфигурация.Объединить(ПрочитатьКонфигурацию()); + Бенчмаркинг.Запустить(Тип, Конфигурация); + КонецЕсли; + КонецЦикла; КонецПроцедуры -Функция ФайлСценария() +Функция КаталогиБенчмарков() + + Каталоги = Новый Массив(); + + Для Каждого ИмяФайла Из _МассивФайлов Цикл + Если ФС.КаталогСуществует(ИмяФайла) Тогда + Каталоги.Добавить(ИмяФайла); + КонецЕсли; + КонецЦикла; + + Возврат Каталоги; + +КонецФункции + +Функция ФайлыБенчмарков() + + Файлы = Новый Массив(); + + Для Каждого ИмяФайла Из _МассивФайлов Цикл + Если Не ФС.КаталогСуществует(ИмяФайла) Тогда + Файлы.Добавить(ПолноеИмяФайлаСценария(ИмяФайла)); + КонецЕсли; + КонецЦикла; + + Возврат Файлы; + +КонецФункции + +Функция ПолноеИмяФайлаСценария(ИмяФайла) ВариантыПутей = Новый Массив(); - ВариантыПутей.Добавить(_ПутьКФайлу); - ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), _ПутьКФайлу)); - ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), _ПутьКФайлу + ".os")); - - Для Каждого Путь Из ВариантыПутей Цикл - Файл = Новый Файл(Путь); - Если Файл.Существует() Тогда - Возврат Файл; + ВариантыПутей.Добавить(ИмяФайла); + ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ИмяФайла)); + ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ИмяФайла + ".os")); + + Для Каждого ИмяФайла Из ВариантыПутей Цикл + Если ФС.ФайлСуществует(ИмяФайла) Тогда + Возврат ИмяФайла; КонецЕсли; КонецЦикла; + ВызватьИсключение СтрШаблон("Файл <%1> не существует", ИмяФайла); + КонецФункции -Функция Конфигурация() +Функция ПрочитатьКонфигурацию() - Конфигурация = Новый КонфигурацияБенчмарков(); + Если ЗначениеЗаполнено(_ФайлКонфигурации) Тогда + Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); + Конфигурация = Сериализатор.ДесериализоватьИзJSON(_ФайлКонфигурации); + Иначе + Конфигурация = Новый КонфигурацияБенчмарков(); + КонецЕсли; Если _МониторингПамяти = Истина Тогда Конфигурация.ДобавитьМониторингПамяти(); @@ -131,15 +173,12 @@ КонецЕсли; ПрочитатьЭкспортеры(Конфигурация); + ПрочитатьИсполняющуюСреду(Конфигурация); Возврат Конфигурация; КонецФункции -Функция ЭтоЧисло(Значение) - Возврат ТипЗнч(Значение) = Тип("Число"); -КонецФункции - Процедура ПрочитатьЭкспортеры(Конфигурация) Если Не ЗначениеЗаполнено(_Экспортеры) Тогда @@ -165,4 +204,29 @@ КонецПроцедуры -_Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.cli"); \ No newline at end of file +Процедура ПрочитатьИсполняющуюСреду(Конфигурация) + + Если Не ЗначениеЗаполнено(_ИсполняющаяСреда) Тогда + Возврат; + КонецЕсли; + + Конфигурация.ОчиститьВерсииИсполняющейСреды(); + + Если НРег(_ИсполняющаяСреда) = "current" Тогда + Возврат; + КонецЕсли; + + ВерсииИсполняющейСреды = СтрРазделить(_ИсполняющаяСреда, ","); + Для Каждого Версия Из ВерсииИсполняющейСреды Цикл + Конфигурация.ДобавитьВерсиюИсполняющейСреды(Версия); + КонецЦикла; + +КонецПроцедуры + +Процедура УстановитьРежимВоркер() + УстановитьПеременнуюСреды("BENCHMARK_WORKER", Формат(_ЭтоВоркер, "БЛ=0; БИ=1")); +КонецПроцедуры + +Функция ЭтоЧисло(Значение) + Возврат ТипЗнч(Значение) = Тип("Число"); +КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" index 5bced76..3db6d92 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" @@ -26,14 +26,14 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off - Если СтрокаРезультата.ДескрипторБенчмарка.ЭтоЭталон() Тогда + Если СтрокаРезультата.ЭтоЭталон Тогда Возврат 0; КонецЕсли; diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" new file mode 100644 index 0000000..9dd095b --- /dev/null +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" @@ -0,0 +1,34 @@ +#Использовать delegate + +// Создает экземпляр колонки +// +// Возвращаемое значение: +// КолонкаОтчетаБенчмарков +Функция Создать() Экспорт + + Колонка = Новый КолонкаОтчетаБенчмарков(КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды); + Колонка.Заголовок = "Runtime"; + Колонка.ЗначениеДелегат = Делегаты.Создать(ЭтотОбъект, "Значение"); + + Возврат Колонка; + +КонецФункции + +// Возвращает значение колонки +// +// Параметры: +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// Колонка - КолонкаОтчетаБенчмарков +// +// Возвращаемое значение: +// Строка +Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off + + ИсполняющаяСреда = СтрокаРезультата.ИсполняющаяСреда; + Если ЗначениеЗаполнено(ИсполняющаяСреда.Наименование) Тогда + Возврат СтрШаблон("%1 (%2)", ИсполняющаяСреда.Наименование, ИсполняющаяСреда.Версия); + КонецЕсли; + + Возврат СтрокаРезультата.ИсполняющаяСреда.Версия; + +КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" index 9e8319d..1d6d1e3 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" index 96866a0..cc0428b 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" index 97c3884..00b3aef 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" @@ -17,7 +17,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" index 90ff898..bdc4af0 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" @@ -24,14 +24,14 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off - Если СтрокаРезультата.ДескрипторБенчмарка.ЭтоЭталон() Тогда + Если СтрокаРезультата.ЭтоЭталон Тогда Возврат 1; КонецЕсли; diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" index 47abb2c..8ae23b5 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" index 7f88dc6..8d47e23 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" @@ -22,7 +22,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" index 35f20c3..4715fac 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" @@ -17,7 +17,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" index 41b7330..f2985fe 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" index f2eda86..f56dee8 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" index f99bf9f..02aa94b 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" index 889c506..2af6551 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" @@ -21,7 +21,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" index 830c2b7..f835c83 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" @@ -24,7 +24,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" index 7080f66..9c0d647 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" index b199b09..0d24a5a 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" index 2668d5d..a0be12e 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" @@ -20,7 +20,7 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" index 1a49f67..a24378e 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" @@ -18,13 +18,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.ДескрипторБенчмарка.ЭтоЭталон(); + Возврат СтрокаРезультата.ЭтоЭталон; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..a7aca7f --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,191 @@ +#Использовать logos + +Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков +Перем _Конфигурация; // КонфигурацияБенчмарков +Перем _СписокОшибок; // Массив из Строка + +// Выполняет комплексную проверку для запуска бенчмарков +// +// Параметры: +// ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// Конфигурация - КонфигурацияБенчмарков +Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация) + _ДескрипторыБенчмарков = ДескрипторыБенчмарков; + _Конфигурация = Конфигурация; + _СписокОшибок = Новый Массив(); +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Проверяет возможность выполнения бенчмарков +// +// Возвращаемое значение: +// Булево - Истина, если все проверки пройдены (ошибок нет), +// Ложь в противном случае +Функция ЗапускВозможен() Экспорт + + _СписокОшибок.Очистить(); + + ПроверитьНаличиеБенчмарков(); + ПроверитьТипыБенчмарков(); + ПроверитьЭталоннуюВерсиюИсполняющейСреды(); + ПроверитьЭталонныеБенчмарки(); + ПроверитьПараметрыНаВозможностьСериализации(); + ПроверитьОтсутствиеДелегатовПриНаличииДругойВерсииИсполняющейСреды(); + + Возврат _СписокОшибок.Количество() = 0; + +КонецФункции + +// Формирует сводный отчет об ошибках валидации в виде строки +// +// Возвращаемое значение: +// Строка +Функция ПолучитьТекстОшибок() Экспорт + + Подстроки = Новый Массив(); + Если _СписокОшибок.Количество() = 0 Тогда + Возврат ""; + КонецЕсли; + + Подстроки.Добавить("Валидация запуска не пройдена. Обнаружены ошибки:"); + + Для Каждого ТекстОшибки Из _СписокОшибок Цикл + Подстроки.Добавить("- " + ТекстОшибки); + КонецЦикла; + + Возврат СтрСоединить(Подстроки, Символы.ПС); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПроверитьНаличиеБенчмарков() + + Дескриптор = _ДескрипторыБенчмарков.ПолучитьПервый(); + Если Дескриптор = Неопределено Тогда + _СписокОшибок.Добавить("Не найдены бенчмарки для запуска"); + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьТипыБенчмарков() + + ПредыдущийТип = Неопределено; + Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл + + ТекущийТип = ДескрипторБенчмарка.ТипОбъекта(); + Если ПредыдущийТип = Неопределено Тогда + ПредыдущийТип = ТекущийТип; + КонецЕсли; + + Если Не ПредыдущийТип = ТекущийТип Тогда + ТекстОшибки = СтрШаблон("Запрещается запускать бенчмарки с разными типами: %1, %2...", ПредыдущийТип, ТекущийТип); + _СписокОшибок.Добавить(ТекстОшибки); + Возврат; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПроверитьЭталоннуюВерсиюИсполняющейСреды() + + Отбор = Новый Структура("ЭтоЭталон", Истина); + НайденныеСтроки = _Конфигурация.ВерсииИсполняющейСреды().НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() > 1 Тогда + _СписокОшибок.Добавить("Допускается только одна эталонная версия исполняющей среды"); + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьЭталонныеБенчмарки() + + БылЭталонПоКатегории = Новый Соответствие(); + Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл + + Если Не ДескрипторБенчмарка.ЭтоЭталон() Тогда + Продолжить; + КонецЕсли; + + Категория = ДескрипторБенчмарка.Категория(); + + Если БылЭталонПоКатегории[Категория] = Истина Тогда + Если ЗначениеЗаполнено(Категория) Тогда + _СписокОшибок.Добавить("В пределах одной категории может быть только один эталонный бенчмарк"); + Иначе + _СписокОшибок.Добавить("Может быть только один эталонный бенчмарк"); + КонецЕсли; + КонецЕсли; + + БылЭталонПоКатегории[Категория] = Истина; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПроверитьПараметрыНаВозможностьСериализации() + + Если Не ЕстьЭталоны() Или _Конфигурация.ИсполняющаяСредаОграниченаТекущей() Тогда + Возврат; + КонецЕсли; + + Для Каждого Параметр Из _Конфигурация.Параметры() Цикл + ПроверитьПараметрНаВозможностьСериализации(Параметр); + КонецЦикла; + + Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл + Для Каждого НаборыПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл + Для Каждого Параметр Из НаборыПараметров Цикл + ПроверитьПараметрНаВозможностьСериализации(Параметр); + КонецЦикла; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура ПроверитьПараметрНаВозможностьСериализации(Параметр) + + ШаблонОшибки = + "Значение параметра <%1> должно быть сериализуемым для определения эталонов между разными версиями OneScript"; + + Если Не СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Параметр.Значение) Тогда + ТекстОшибки = СтрШаблон(ШаблонОшибки, Параметр.Имя); + Если _СписокОшибок.Найти(ТекстОшибки) = Неопределено Тогда + _СписокОшибок.Добавить(ТекстОшибки); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьОтсутствиеДелегатовПриНаличииДругойВерсииИсполняющейСреды() + + ТекстОшибки = + "Использование делегатов как обработчиков событий не поддерживается при запуске в разных версиях OneScript"; + + Если _Конфигурация.ИсполняющаяСредаОграниченаТекущей() Тогда + Возврат; + КонецЕсли; + + Для Каждого ОбработчикСобытия Из _Конфигурация.ОбработчикиСобытий() Цикл + Если ТипЗнч(ОбработчикСобытия.Обработчик) = Тип("Делегат") Тогда + _СписокОшибок.Добавить(ТекстОшибки); + Возврат; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ЕстьЭталоны() + + ЕстьЭталоннаяВерсия = _Конфигурация.ЭталоннаяВерсияИсполняющейСреды() <> Неопределено; + ЕстьЭталонныеБенчмарки = _ДескрипторыБенчмарков.ПолучитьЭталонные().Количество() > 0; + + Возврат ЕстьЭталоннаяВерсия Или ЕстьЭталонныеБенчмарки; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index 4f6a5eb..fac6b6f 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -10,11 +10,11 @@ // Дескриптор бенчмарка // // Параметры: -// Объект - Произвольный - Экземпляр класса бенчмарков +// Объект - Тип, Произвольный - Тип или экземпляр класса бенчмарков // Метод - Строка - Метод бенчмарка Процедура ПриСозданииОбъекта(Объект, Метод) - _Тип = ТипЗнч(Объект); + _Тип = ?(ТипЗнч(Объект) = Тип("Тип"), Объект, ТипЗнч(Объект)); _Метод = Метод; _НаборыПараметров = Новый Массив(); _ЭтоЭталон = Ложь; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index e960289..dcafb0d 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,11 +1,12 @@ +#Использовать fs #Использовать asserts -#Использовать coloratos +#Использовать tempfiles #Использовать logos -#Использовать fs -Перем _ОбъектБенчмарков; // Экземпляр класса бенчмарков +Перем _ОбъектБенчмарков; // Экземпляр класса с бенчмарками Перем _Конфигурация; // КонфигурацияБенчмарков Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков +Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов Перем _СтатистикаСборщикаМусора; // СтатистикаСборщикаМусора Перем _Хронометр; // Хронометр Перем _Лог; // Лог @@ -13,15 +14,30 @@ // Запускает бенчмарки // // Параметры: -// Источник - Тип - Класс бенчмарков -// - КоллекцияДескрипторовБенчмарков -// - ДескрипторБенчмарка -// - Произвольный - Экземпляр класса с бенчмарками -// Конфигурация - КонфигурацияБенчмарков - Полностью заменяет текущую конфигурацию на переданную -Процедура ПриСозданииОбъекта(Источник, Конфигурация = Неопределено) +// ИсточникБенчмарков - Тип - Класс, содержащий бенчмарки +// - КоллекцияДескрипторовБенчмарков +// - ДескрипторБенчмарка +// - Произвольный - Экземпляр класса с бенчмарками +// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков +Процедура ПриСозданииОбъекта(ИсточникБенчмарков, Конфигурация = Неопределено) + + ОберткаИсточника = Новый ОберткаИсточникаБенчмарков(ИсточникБенчмарков); + + _ОбъектБенчмарков = ОберткаИсточника.ОбъектБенчмарков(); + _ДескрипторыБенчмарков = ОберткаИсточника.Дескрипторы(); + _Хронометр = Новый Хронометр(); - Инициализировать(Источник, Конфигурация); + Если Не Конфигурация = Неопределено Тогда + _Конфигурация = Конфигурация; + Иначе + _Конфигурация = Новый КонфигурацияБенчмарков(_ОбъектБенчмарков); + КонецЕсли; + Если _Конфигурация.ТребуетсяМониторингПамяти() Тогда + _СтатистикаСборщикаМусора = Новый СтатистикаСборщикаМусора(); + КонецЕсли; + + _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЗапускательБенчмарков"); КонецПроцедуры @@ -35,13 +51,18 @@ // * ИмяКласса - Строка - Имя класса // * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // * Конфигурация - КонфигурацияБенчмарков -// * СредаОкружения - СредаОкруженияБенчмарков // * Отчет - ОтчетБенчмарков -// * РезультатыЗапусков - ТаблицаЗначений: +// * СредаОкружения - СредаОкруженияБенчмарков +// * Расшифровка - ТаблицаЗначений: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка // ** Эталон - СтрокаТаблицыЗначений, Неопределено +// ** ЭтоЭталон - Булево // ** Статистика - СтатистикаБенчмарка +// ** ИсполняющаяСреда - Структура: +// *** Версия - Строка +// *** Алиас - Строка +// *** Наименование - Строка // ** Замеры - ТаблицаЗначений: // *** Этап - см. ЭтапыБенчмарка // *** НомерИтерации - Число @@ -52,21 +73,28 @@ // *** ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию Функция Запустить() Экспорт - _Хронометр = Новый Хронометр(); + ЭтоВоркер = Бенчмаркинг.ЭтоВоркер(); + ЗапускатьВТекущейСреде = _Конфигурация.ИсполняющаяСредаОграниченаТекущей() Или ЭтоВоркер; - Если _Конфигурация.ТребуетсяМониторингПамяти() Тогда - _СтатистикаСборщикаМусора = Новый СтатистикаСборщикаМусора(); + Валидатор = Новый ВалидаторЗапускаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация); + Если Не Валидатор.ЗапускВозможен() Тогда + ВызватьИсключение Валидатор.ПолучитьТекстОшибок(); КонецЕсли; - ВывестиКонфигурацию(); - ПрогретьИнструментыЗамера(); - ПроверитьБенчмарки(); + Если ЗапускатьВТекущейСреде Тогда + Результат = ЗапуститьВсеБенчмарки(); + Иначе + Результат = ЗапуститьБенчмаркиВКаждойВерсии(); + КонецЕсли; + + Если Не ЭтоВоркер Тогда + ВывестиРезультатыБенчмарков(Результат); + КонецЕсли; - Результат = ЗапуститьВсеБенчмарки(); - - ВывестиРезультатыБенчмарков(Результат); ЭкспортироватьРезультаты(Результат); + _МенеджерВременныхФайлов.Удалить(); + Возврат Результат; КонецФункции @@ -75,53 +103,221 @@ #Область СлужебныеПроцедурыИФункции -Процедура Инициализировать(Источник, Конфигурация) +#Область ЗапускВДругихСредах - Если ТипЗнч(Источник) = Тип("Тип") Тогда +Функция ЗапуститьБенчмаркиВКаждойВерсии() + + ПередаваемаяКонфигурация = _Конфигурация + .Скопировать() + .УстановитьКаталогАртефактов(_МенеджерВременныхФайлов.НовоеИмяФайла()) + .УдалитьЭкспортеры() + .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json); + + МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); + Результат = НовыйРезультат(МенеджерРасшифровкиРезультатов); + Результат.СредаОкружения.ВерсияИсполняющейСреды = ""; + + Для Каждого ИсполняющаяСреда Из _Конфигурация.ВерсииИсполняющейСреды() Цикл + ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, ПередаваемаяКонфигурация, Результат.Расшифровка); + КонецЦикла; - _ОбъектБенчмарков = Новый(Источник); + МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(_Конфигурация); - ИначеЕсли ТипЗнч(Источник) = Тип("КоллекцияДескрипторовБенчмарков") Тогда + Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, Результат.Расшифровка); + Результат.Отчет = Построитель.Сформировать(); - Ожидаем.Что(Источник.Количество(), "Коллекция дескрипторов бенчмарков пустая").Больше(0); - - ТипОбъекта = Источник.ПолучитьПервый().ТипОбъекта(); - _ОбъектБенчмарков = Новый(ТипОбъекта); - _ДескрипторыБенчмарков = Источник; - - ИначеЕсли ТипЗнч(Источник) = Тип("ДескрипторБенчмарка") Тогда + Возврат Результат; - _ОбъектБенчмарков = Новый(Источник.ТипОбъекта()); - _ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); - _ДескрипторыБенчмарков.Добавить(Источник); +КонецФункции - Иначе +Процедура ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, Конфигурация, РасшифровкаРезультатов) + + ТаймаутМинут = 10; + МиллисекундВМинуте = 60000; + КаталогАртефактов = Конфигурация.КаталогАртефактов(); + + _Лог.Отладка("Запуск процесса в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); + + ФС.ОбеспечитьПустойКаталог(КаталогАртефактов); + + ВывестиЗаголовок(ИсполняющаяСреда.Версия); + ВывестиКонфигурацию(); - _ОбъектБенчмарков = Источник; + Процесс = ПодготовитьПроцесс(Конфигурация, ИсполняющаяСреда.Версия); + Процесс.Запустить(); + ВремяНачала = ТекущаяУниверсальнаяДата(); + + Пока Не ПроверитьЗавершениеПроцесса(Процесс) Цикл + ПрошлоМинут = (ТекущаяУниверсальнаяДата() - ВремяНачала) / МиллисекундВМинуте; + Если ПрошлоМинут >= ТаймаутМинут Тогда + Процесс.Завершить(); + ВызватьИсключение СтрШаблон("Превышено время ожидания (%1 мин.) завершения дочернего процесса", ТаймаутМинут); + КонецЕсли; + КонецЦикла; + + Если Процесс.КодВозврата <> 0 Тогда + ВызватьИсключение СтрШаблон("Завершение процесса с ошибкой в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); КонецЕсли; + + ПрочитатьРасшифровкуЗамеровИзJSON(РасшифровкаРезультатов, КаталогАртефактов, ИсполняющаяСреда); + + _Лог.Отладка("Завершение процесса в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); + +КонецПроцедуры + +Функция ПодготовитьПроцесс(Конфигурация, Версия) - Если Не Конфигурация = Неопределено Тогда - _Конфигурация = Конфигурация; - Иначе - _Конфигурация = Новый КонфигурацияБенчмарков(_ОбъектБенчмарков); + Тип = _ДескрипторыБенчмарков.ПолучитьПервый().ТипОбъекта(); + ИмяФайлаИсполняющейСреды = ИмяФайлаИсполняющейСреды(Версия); + ИмяФайлаТочкиВхода = ТочкаВходаКонсольногоПриложения(); + ИмяФайлаКонфигурации = ПолучитьИмяФайлаКонфигурацииДляПроцесса(Конфигурация); + ИмяФайлаТипа = Новый РасширениеТипа(Тип).Источник; + КаталогБиблиотек = ИсполняющаяСредаБенчмарков.КаталогБиблиотек(); + + ПеременныеСреды = ПеременныеСреды(); + ПеременныеСреды.Вставить("OSCRIPT_CONFIG", СтрШаблон("lib.system=%1; systemlanguage=ru", КаталогБиблиотек)); + + СтрокаКоманды = Новый Массив(); + + // oscript.exe + СтрокаКоманды.Добавить(ИмяФайлаИсполняющейСреды); + + // benchos + СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаТочкиВхода)); + + // run + СтрокаКоманды.Добавить("run"); + + // --worker + СтрокаКоманды.Добавить("--worker"); + + // --config + СтрокаКоманды.Добавить("--config"); + СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаКонфигурации)); + + // FILE + СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаТипа)); + + СтрокаКоманды = СтрСоединить(СтрокаКоманды, " "); + + _Лог.Отладка("Строка запуска: " + СтрокаКоманды); + + Попытка + Процесс = СоздатьПроцесс(СтрокаКоманды, ".", Истина, , , ПеременныеСреды); + Исключение + ТекстОшибки = ИнформацияОбОшибке().ПодробноеОписаниеОшибки(); + ВызватьИсключение СтрШаблон("Не удалось запустить процесс бенчмаркинга для версии <%1>. + |Ошибка: %2", + Версия, + ТекстОшибки); + КонецПопытки; + + Возврат Процесс; + +КонецФункции + +Функция ПроверитьЗавершениеПроцесса(Процесс) + + ПериодОпросаВМиллисекундах = 100; + + Приостановить(ПериодОпросаВМиллисекундах); + + Если Процесс.ПотокВывода.ЕстьДанные Тогда + СтрокаВывода = Процесс.ПотокВывода.Прочитать(); + ВывестиСтроку(СтрокаВывода); + КонецЕсли; + + Если Процесс.ПотокОшибок.ЕстьДанные Тогда + СтрокаВывода = Процесс.ПотокОшибок.Прочитать(); + ВывестиСтроку(СтрокаВывода); КонецЕсли; - Если _ДескрипторыБенчмарков = Неопределено Тогда - _ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(_ОбъектБенчмарков); + Возврат Процесс.Завершен; + +КонецФункции + +Функция ПолучитьИмяФайлаКонфигурацииДляПроцесса(Конфигурация) + + ПутьКФайлу = _МенеджерВременныхФайлов.СоздатьФайл("json"); + + Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); + Сериализатор.СериализоватьВJSON(Конфигурация, ПутьКФайлу); + + Возврат ПутьКФайлу; + +КонецФункции + +Функция ТочкаВходаКонсольногоПриложения() + Возврат Новый Файл(ОбъединитьПути(ТекущийСценарий().Каталог, "../../cmd/main.os")).ПолноеИмя; +КонецФункции + +Функция ИмяФайлаИсполняющейСреды(Версия) + + Если ФС.ФайлСуществует(Версия) Тогда + Возврат Версия; + КонецЕсли; + + КаталогУстановки = ИсполняющаяСредаБенчмарков.КаталогУстановки(); + Если КаталогУстановки = Неопределено Тогда + ВызватьИсключение "Не найден каталог с установленными версиями OneScript. + |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно."; + КонецЕсли; + + _Лог.Отладка(СтрШаблон("Каталог с установленными версиями OneScript: %1", КаталогУстановки)); + + ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + + Если ИмяФайла = Неопределено Тогда + ВызватьИсключение СтрШаблон("Не найден OneScript версии %1 в каталоге OVM (OneScript Version Manager)", Версия); КонецЕсли; + + Возврат ИмяФайла; + +КонецФункции + +Процедура ПрочитатьРасшифровкуЗамеровИзJSON(РасшифровкаРезультатов, Каталог, ИсполняющаяСреда) + + Сериализатор = Новый СериализаторРезультатовБенчмарков(); + + Файлы = НайтиФайлы(Каталог, "*-report.json"); + Для Каждого Файл Из Файлы Цикл + Данные = Сериализатор.ДесериализоватьИзJSON(Файл.ПолноеИмя, _Конфигурация); + Для Каждого СтрокаРезультата Из Данные.Расшифровка Цикл + НоваяСтрокаТаблицы = РасшифровкаРезультатов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрокаТаблицы, СтрокаРезультата); + НоваяСтрокаТаблицы.ИсполняющаяСреда.Алиас = ИсполняющаяСреда.Версия; // Заменяем current + НоваяСтрокаТаблицы.ИсполняющаяСреда.Наименование = ИсполняющаяСреда.Наименование; + КонецЦикла; + КонецЦикла; КонецПроцедуры +#КонецОбласти + +#Область ЗапускВТекущейСреде + Функция ЗапуститьВсеБенчмарки() + ПрогретьИнструментыЗамера(); + + Если Не Бенчмаркинг.ЭтоВоркер() Тогда + ВывестиЗаголовок(); + ВывестиКонфигурацию(); + КонецЕсли; + + // Событие ПередВсеми КонтекстСобытия = Новый Структура(); КонтекстСобытия.Вставить("Конфигурация", _Конфигурация); КонтекстСобытия.Вставить("ДескрипторыБенчмарков", _ДескрипторыБенчмарков); ВызватьОбработчикСобытия(СобытияБенчмарков.ПередВсеми, КонтекстСобытия); - РезультатыЗапусков = НоваяТаблицаРезультатовЗапусков(); + // Инициализация результатов + МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); + Результат = НовыйРезультат(МенеджерРасшифровкиРезультатов); + + // Запуск бенчмарков Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл КомбинацииПараметров = КомбинаторПараметровБенчмарка.Комбинировать(ДескрипторБенчмарка, _Конфигурация); @@ -131,81 +327,81 @@ КонецЕсли; Для Каждого Параметры Из КомбинацииПараметров Цикл - - РезультатЗапуска = ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры); - - СтрокаРезультата = РезультатыЗапусков.Добавить(); - СтрокаРезультата.ДескрипторБенчмарка = ДескрипторБенчмарка; - СтрокаРезультата.Параметры = Параметры; - СтрокаРезультата.Замеры = РезультатЗапуска.Замеры; - СтрокаРезультата.Статистика = РезультатЗапуска.Статистика; - + ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры, МенеджерРасшифровкиРезультатов); КонецЦикла; КонецЦикла; - ЗаполнитьЭталоны(РезультатыЗапусков); - - Результат = ПодготовитьРезультат(РезультатыЗапусков); + // Подготовка результатов + МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(_Конфигурация); + МенеджерРасшифровкиРезультатов.ОбновитьСтатистику(); + Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, Результат.Расшифровка); + Результат.Отчет = Построитель.Сформировать(); + + // Событие ПослеВсех ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, Результат); Возврат Результат; КонецФункции -Функция ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры) +Процедура ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры, МенеджерРасшифровкиРезультатов) ВывестиЗаголовокБенчмарка(ДескрипторБенчмарка); ВывестиПараметры(Параметры); ПараметрыМетода = ПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры); УстановитьПараметрыОбъекта(Параметры); + + // Инициализация результата + Результат = МенеджерРасшифровкиРезультатов.Добавить(); + Результат.ДескрипторБенчмарка = ДескрипторБенчмарка; + Результат.Параметры = Параметры; + Результат.Статистика = Новый СтатистикаБенчмарка(); + + Если Бенчмаркинг.ЭтоВоркер() Тогда + Результат.ИсполняющаяСреда.Версия = Новый СистемнаяИнформация().Версия; + Результат.ИсполняющаяСреда.Алиас = "current"; + КонецЕсли; + // Событие ПередКаждым КонтекстСобытия = Новый Структура(); КонтекстСобытия.Вставить("ДескрипторБенчмарка", ДескрипторБенчмарка); КонтекстСобытия.Вставить("ПараметрыМетода", ПараметрыМетода); ВызватьОбработчикСобытия(СобытияБенчмарков.ПередКаждым, КонтекстСобытия); + // Запуск итераций Делегат = ДескрипторБенчмарка.Делегат(_ОбъектБенчмарков, ПараметрыМетода); - - Если _Конфигурация.Стратегия() = СтратегииЗапускаБенчмарка.ХолодныйЗапуск Тогда + Если _Конфигурация.Стратегия() = СтратегииЗапускаБенчмарка.ХолодныйЗапуск Тогда КоличествоВызововЗаИтерацию = 1; - Иначе - КоличествоВызововЗаИтерацию = РассчитатьКоличествоВызововЗаИтерацию(Делегат); ЗапуститьЭтапПрогрева(Делегат, КоличествоВызововЗаИтерацию); - КонецЕсли; - Замеры = НоваяТаблицаЗамеров(); - - ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, Замеры); + ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, Результат.Замеры); Если _Конфигурация.ТребуетсяМониторингПамяти() Тогда - ЗапуститьМониторингПамяти(Делегат, КоличествоВызововЗаИтерацию, Замеры); + ЗапуститьМониторингПамяти(Делегат, КоличествоВызововЗаИтерацию, Результат.Замеры); КонецЕсли; - Статистика = Новый СтатистикаБенчмарка(Замеры); + // Сбор статистики + Результат.Статистика.Прочитать(Результат.Замеры); + ВывестиСтатистику(Результат.Статистика); + // Событие ПослеКаждого КонтекстСобытия = Новый Структура(); КонтекстСобытия.Вставить("ДескрипторБенчмарка", ДескрипторБенчмарка); КонтекстСобытия.Вставить("Параметры", Параметры); - КонтекстСобытия.Вставить("Замеры", Замеры); - КонтекстСобытия.Вставить("Статистика", Статистика); + КонтекстСобытия.Вставить("Замеры", Результат.Замеры); + КонтекстСобытия.Вставить("Статистика", Результат.Статистика); ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, КонтекстСобытия); - ЦветнойВывод.Вывести(Символы.ПС); - ЦветнойВывод.ВывестиСтроку("// Статистика", "Малиновый"); - ЦветнойВывод.ВывестиСтроку(Статистика.ВСтроку(), "Бирюза"); - - Возврат Новый Структура("Замеры, Статистика", Замеры, Статистика); - -КонецФункции +КонецПроцедуры Функция РассчитатьКоличествоВызововЗаИтерацию(Делегат) @@ -335,10 +531,10 @@ РезультатИтерации.ВыделяемаяПамятьЗаОперацию = ВыделяемаяПамять / КоличествоВызовов; Если НомерИтерации = 1 Тогда - Консоль.Вывести(Символы.ПС); + ВывестиСтроку(" "); КонецЕсли; - ЦветнойВывод.ВывестиСтроку(ПредставлениеРезультатаИтерации(РезультатИтерации), "Серый"); + ВывестиСтроку(ПредставлениеРезультатаИтерации(РезультатИтерации), "Серый"); Возврат РезультатИтерации; @@ -432,96 +628,20 @@ // Параметры - Массив из ПараметрБенчмарка Процедура УстановитьПараметрыОбъекта(Параметры) + ШаблонОшибки = "Не удалось задать значение поля <%1> для объекта <%2>"; + Для Каждого Параметр Из Параметры Цикл Если Не Параметр.ЭтоПараметрМетода Тогда - _ОбъектБенчмарков[Параметр.Имя] = Параметр.Значение; + Попытка + _ОбъектБенчмарков[Параметр.Имя] = Параметр.Значение; + Исключение + ВызватьИсключение СтрШаблон(ШаблонОшибки, Параметр.Имя, ТипЗнч(_ОбъектБенчмарков)); + КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры -Процедура ЗаполнитьЭталоны(РезультатыЗапусков) - - Для Каждого Строка Из РезультатыЗапусков Цикл - Если Не Строка.ДескрипторБенчмарка.ЭтоЭталон() Тогда - Строка.Эталон = НайтиЭталон(РезультатыЗапусков, Строка); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Функция НайтиЭталон(РезультатыЗапусков, СтрокаПоиска) - - Для Каждого СтрокаЭталон Из РезультатыЗапусков Цикл - - Если СтрокаЭталон = СтрокаПоиска Тогда - Продолжить; - КонецЕсли; - - Если Не СтрокаЭталон.ДескрипторБенчмарка.ЭтоЭталон() Тогда - Продолжить; - КонецЕсли; - - Если Не СтрокаПоиска.ДескрипторБенчмарка.Категория() = СтрокаЭталон.ДескрипторБенчмарка.Категория() Тогда - Продолжить; - КонецЕсли; - - ПараметрыСовпадают = Истина; - Для Каждого Параметр Из СтрокаПоиска.Параметры Цикл - - ПараметрНайден = Ложь; - Для Каждого ПараметрЭталона Из СтрокаЭталон.Параметры Цикл - Если Параметр.Имя = ПараметрЭталона.Имя - И Параметр.Значение = ПараметрЭталона.Значение Тогда - ПараметрНайден = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если Не ПараметрНайден Тогда - ПараметрыСовпадают = Ложь; - Прервать; - КонецЕсли; - - КонецЦикла; - - Если ПараметрыСовпадают Тогда - Возврат СтрокаЭталон; - КонецЕсли; - - КонецЦикла; - -КонецФункции - -Процедура ПроверитьБенчмарки() - - БылЭталонПоКатегории = Новый Соответствие(); - НаличиеТиповОбъектов = Новый Соответствие(); - - Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл - - НаличиеТиповОбъектов[ДескрипторБенчмарка.ТипОбъекта()] = Истина; - - Ожидаем - .Что(НаличиеТиповОбъектов, "Не поддерживается запуск с разными типами объектов бенчмарков") - .ИмеетДлину(1); - - Если ДескрипторБенчмарка.ЭтоЭталон() Тогда - - Категория = ДескрипторБенчмарка.Категория(); - - Ожидаем - .Что(БылЭталонПоКатегории[Категория], "Может быть только один эталонный бенчмарк в пределах категории") - .ЭтоНеопределено(); - - БылЭталонПоКатегории[Категория] = Истина; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - Функция ПредставлениеРезультатаИтерации(РезультатИтерации) ДлинаЭтапа = Макс( @@ -571,27 +691,12 @@ КонецФункции -Функция ПодготовитьРезультат(РезультатыЗапусков) - - ПостроительОтчета = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, РезультатыЗапусков); - Отчет = ПостроительОтчета.Сформировать(); - - Результат = Новый Структура(); - Результат.Вставить("ИмяКласса", Строка(ТипЗнч(_ОбъектБенчмарков))); - Результат.Вставить("ДескрипторыБенчмарков", _ДескрипторыБенчмарков); - Результат.Вставить("Конфигурация", _Конфигурация); - Результат.Вставить("СредаОкружения", Новый СредаОкруженияБенчмарков()); - Результат.Вставить("РезультатыЗапусков", РезультатыЗапусков); - Результат.Вставить("Отчет", Отчет); - - Возврат Результат; - -КонецФункции +#КонецОбласти -Процедура ЭкспортироватьРезультаты(РезультатыЗапусков) +Процедура ЭкспортироватьРезультаты(Результаты) КаталогАртефактов = _Конфигурация.КаталогАртефактов(); - МаскаФайлов = СтрШаблон("%1-*", РезультатыЗапусков.ИмяКласса); + МаскаФайлов = СтрШаблон("%1-*", Результаты.ИмяКласса); Экспортеры = _Конфигурация.Экспортеры(); Если Не ЗначениеЗаполнено(КаталогАртефактов) Или Экспортеры.Количество() = 0 Тогда @@ -602,26 +707,68 @@ ФС.УдалитьФайлы(КаталогАртефактов, МаскаФайлов); Для Каждого Экспортер Из _Конфигурация.Экспортеры() Цикл - Экспортер.Записать(РезультатыЗапусков); + Экспортер.Записать(Результаты); КонецЦикла; - Артефакты = НайтиФайлы(КаталогАртефактов, МаскаФайлов); - Если Артефакты.Количество() Тогда - ЦветнойВывод.Вывести(Символы.ПС); - ЦветнойВывод.ВывестиСтроку( "// Артефакты", "Малиновый"); + Если Не Бенчмаркинг.ЭтоВоркер() Тогда + Артефакты = НайтиФайлы(КаталогАртефактов, МаскаФайлов); + Если Артефакты.Количество() Тогда + ВывестиСтроку(" "); + ВывестиСтроку("// Артефакты", "Малиновый"); + КонецЕсли; + + Для Каждого Артефакт Из Артефакты Цикл + ВывестиСтроку(Артефакт.ПолноеИмя, "ТемноЖелтый"); + КонецЦикла; КонецЕсли; - Для Каждого Артефакт Из Артефакты Цикл - ЦветнойВывод.ВывестиСтроку(Артефакт.ПолноеИмя, "ТемноЖелтый"); - КонецЦикла; +КонецПроцедуры + +Процедура ВывестиРезультатыБенчмарков(Результат) + + // Среда окружения + ТекстСреды = Результат.СредаОкружения.ВСтроку(); + ТекстСреды = СтрЗаменить(ТекстСреды, Символы.ПС, " \" + Символы.ПС); + + ВывестиСтроку(" "); + ВывестиСтроку("// Сводка", "Малиновый"); + ВывестиСтроку(ТекстСреды, "ТемноЖелтый"); + + // Отчет в Markdown + ВывестиСтроку(" "); + ВывестиСтроку(Результат.Отчет.КакMarkdown(), "Бирюза"); + + // Легенда + ВывестиСтроку(" "); + ВывестиСтроку("// Легенда", "Малиновый"); + ВывестиСтроку(Результат.Отчет.Легенда(), "Синий"); + +КонецПроцедуры + +Процедура ВывестиЗаголовок(Версия = "") + + Если Не ЗначениеЗаполнено(Версия) Тогда + Версия = Новый СистемнаяИнформация().Версия; + КонецЕсли; + + ВывестиСтроку(" "); + ВывестиСтроку(СтрШаблон("*** Запуск бенчмарков в исполняющей среде OneScript <%1> ***", Версия), "Синий"); КонецПроцедуры Процедура ВывестиКонфигурацию() - ЦветнойВывод.Вывести(Символы.ПС); - ЦветнойВывод.ВывестиСтроку("// Конфигурация", "Малиновый"); - ЦветнойВывод.ВывестиСтроку(_Конфигурация.ВСтроку(), "ТемноЖелтый"); + ВывестиСтроку(" "); + ВывестиСтроку("// Конфигурация", "Малиновый"); + ВывестиСтроку(_Конфигурация.ВСтроку(), "ТемноЖелтый"); + +КонецПроцедуры + +Процедура ВывестиСтатистику(Статистика) + + ВывестиСтроку(" "); + ВывестиСтроку("// Статистика", "Малиновый"); + ВывестиСтроку(Статистика.ВСтроку(), "Бирюза"); КонецПроцедуры @@ -629,8 +776,8 @@ Текст = СтрШаблон("// Бенчмарк: %1.%2", ДескрипторБенчмарка.ТипОбъекта(), ДескрипторБенчмарка.Метод()); - ЦветнойВывод.Вывести(Символы.ПС); - ЦветнойВывод.ВывестиСтроку(Текст, "Малиновый"); + ВывестиСтроку(" "); + ВывестиСтроку(Текст, "Малиновый"); КонецПроцедуры @@ -642,46 +789,38 @@ Возврат; КонецЕсли; - ЦветнойВывод.Вывести("Параметры: ", Цвет); + Вывести("Параметры: ", Цвет); ЭтоПервыйПараметр = Истина; Для Каждого Параметр Из Параметры Цикл Если Не ЭтоПервыйПараметр Тогда - ЦветнойВывод.Вывести(", ", Цвет); + Вывести(", ", Цвет); КонецЕсли; - ЦветнойВывод.Вывести(СтрШаблон("%1 = %2", Параметр.Имя, Строка(Параметр.Значение)), Цвет); + Вывести(СтрШаблон("%1 = %2", Параметр.Имя, Строка(Параметр.Значение)), Цвет); ЭтоПервыйПараметр = Ложь; КонецЦикла; - ЦветнойВывод.ВывестиСтроку(""); + ВывестиСтроку(""); КонецПроцедуры -Процедура ВывестиРезультатыБенчмарков(Результат) - - // Среда окружения - ТекстСреды = Результат.СредаОкружения.ВСтроку(); - ТекстСреды = СтрЗаменить(ТекстСреды, Символы.ПС, " \" + Символы.ПС); - - ЦветнойВывод.Вывести(Символы.ПС); - ЦветнойВывод.ВывестиСтроку("// Сводка", "Малиновый"); - ЦветнойВывод.ВывестиСтроку(ТекстСреды, "ТемноЖелтый"); - - // Отчет в Markdown - ЦветнойВывод.Вывести(Символы.ПС); - ЦветнойВывод.ВывестиСтроку(Результат.Отчет.КакMarkdown(), "Бирюза"); - - // Легенда - ЦветнойВывод.Вывести(Символы.ПС); - ЦветнойВывод.ВывестиСтроку("// Легенда", "Малиновый"); - ЦветнойВывод.ВывестиСтроку(Результат.Отчет.Легенда(), "Синий"); +Процедура ВывестиСтроку(Текст, Цвет = Неопределено) + КонсольныйВыводБенчмаркера.ВывестиСтроку(Текст, Цвет); +КонецПроцедуры +Процедура Вывести(Текст, Цвет = Неопределено) + КонсольныйВыводБенчмаркера.Вывести(Текст, Цвет); КонецПроцедуры +Функция ОбернутьВКавычки(Строка) + Кавычка = ?(ИсполняющаяСредаБенчмарков.ЭтоWindows(), """", "'"); + Возврат СтрШаблон("%2%1%2", Строка, Кавычка); +КонецФункции + Функция НовыйРезультатИтерации() Результат = Новый Структура(); @@ -697,52 +836,18 @@ КонецФункции -// Таблица замеров -// -// Возвращаемое значение: -// ТаблицаЗначений: -// * Этап - см. ЭтапыБенчмарка -// * НомерИтерации - Число -// * КоличествоОпераций - Число -// * Наносекунд - Число - Наносекунд за итерацию -// * НаносекундЗаОперацию - Число - Наносекунд за операцию -// * ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию -// * ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию -Функция НоваяТаблицаЗамеров() - - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("Этап"); - Таблица.Колонки.Добавить("НомерИтерации"); - Таблица.Колонки.Добавить("КоличествоОпераций"); - Таблица.Колонки.Добавить("Наносекунд"); - Таблица.Колонки.Добавить("НаносекундЗаОперацию"); - Таблица.Колонки.Добавить("ВыделяемаяПамять"); - Таблица.Колонки.Добавить("ВыделяемаяПамятьЗаОперацию"); - - Возврат Таблица; - -КонецФункции +Функция НовыйРезультат(МенеджерРасшифровкиРезультатов) Экспорт -// Таблица результатов запусков -// -// Возвращаемое значение: -// ТаблицаЗначений: -// * ДескрипторБенчмарка - ДескрипторБенчмарка -// * Параметры - Массив из ПараметрБенчмарка -// * Статистика - СтатистикаБенчмарка -// * Эталон - СтрокаТаблицыЗначений, Неопределено -// * Замеры - см. НоваяТаблицаЗамеров -Функция НоваяТаблицаРезультатовЗапусков() - - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("ДескрипторБенчмарка"); - Таблица.Колонки.Добавить("Параметры"); - Таблица.Колонки.Добавить("Статистика"); - Таблица.Колонки.Добавить("Эталон"); - Таблица.Колонки.Добавить("Замеры"); - - Возврат Таблица; + Результат = Новый Структура(); + Результат.Вставить("ИмяКласса", Строка(ТипЗнч(_ОбъектБенчмарков))); + Результат.Вставить("ДескрипторыБенчмарков", _ДескрипторыБенчмарков); + Результат.Вставить("Конфигурация", _Конфигурация); + Результат.Вставить("Расшифровка", МенеджерРасшифровкиРезультатов.ВТаблицу()); + Результат.Вставить("Отчет", Неопределено); + Результат.Вставить("СредаОкружения", Новый СредаОкруженияБенчмарков()); + Возврат Результат; + КонецФункции #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 563e3ce..442efb4 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -5,13 +5,13 @@ // Коллекция дескрипторов бенчмарков // // Параметры: -// Источник - Тип, Произвольный - Тип или экземпляр класса бенчмарков -Процедура ПриСозданииОбъекта(Источник = Неопределено) Экспорт +// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено) Экспорт _ДескрипторыБенчмарков = Новый Массив(); - Если Не Источник = Неопределено Тогда - ИзвлекательДескрипторовБенчмарков.Извлечь(Источник, ЭтотОбъект); + Если Не ИсточникБенчмарков = Неопределено Тогда + ИзвлекательДескрипторовБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект); КонецЕсли; КонецПроцедуры @@ -75,6 +75,30 @@ КонецФункции +// Создает новую коллекцию из эталонных бенчмарков +// +// Возвращаемое значение: +// КоллекцияДескрипторовБенчмарков +Функция ПолучитьЭталонные() Экспорт + Возврат Скопировать().Фильтровать("Бенчмарк -> Бенчмарк.ЭтоЭталон() = Истина"); +КонецФункции + +// Создает копию коллекции дескрипторов бенчмарков +// +// Возвращаемое значение: +// КоллекцияДескрипторовБенчмарков +Функция Скопировать() Экспорт + + Коллекция = Новый КоллекцияДескрипторовБенчмарков(); + + Для Каждого Бенчмарк Из _ДескрипторыБенчмарков Цикл + Коллекция.Добавить(Бенчмарк); + КонецЦикла; + + Возврат Коллекция; + +КонецФункции + // Фильтровать коллекцию по условию // // Параметры: diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 169861e..0646644 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -38,7 +38,7 @@ // Значение по результатам замеров // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 3d41718..ad5faa6 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -23,6 +23,7 @@ Перем _Обработчики; // Соответствие Перем _Колонки; // Массив из Строка - см. КолонкиОтчетаБенчмарков Перем _Экспортеры; // Массив из см. ЭкспортерыРезультатовБенчмарков +Перем _ВерсииИсполняющейСреды; // ТаблицаЗначений Перем _МодифицированныеПоля; // Соответствие Перем _Рефлектор; // Рефлектор, Неопределено @@ -30,8 +31,8 @@ // Конфигурация бенчмарков // // Параметры: -// Источник - Тип, Произвольный - Тип или экземпляр класса бенчмарков -Процедура ПриСозданииОбъекта(Источник = Неопределено) +// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено) _СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность; _КоличествоИтерацийПоУмолчанию = 15; @@ -48,6 +49,7 @@ _Колонки = Новый Массив(); _Экспортеры = Новый Массив(); _МодифицированныеПоля = Новый Соответствие(); + _ВерсииИсполняющейСреды = ПустаяТаблицаВерсииИсполняющейСреды(); _ТребуетсяМониторингПамяти = _ТребуетсяМониторингПамятиПоУмолчанию; @@ -62,14 +64,16 @@ _МодифицированныеПоля.Очистить(); - Если Не Источник = Неопределено Тогда - ИзвлекательКонфигурацииБенчмарков.Извлечь(Источник, ЭтотОбъект); + Если Не ИсточникБенчмарков = Неопределено Тогда + ИзвлекательКонфигурацииБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект); КонецЕсли; КонецПроцедуры #Область ПрограммныйИнтерфейс +#Область СвойстваКонфигурации + // Устанавливает количество итераций для основных этапов (ЭтапыБенчмарка.Измерение, ЭтапыБенчмарка.Память) // // Используется для тонкой настройки баланса между точностью измерений и временем выполнения теста. @@ -297,7 +301,7 @@ // Параметры, используемые для запуска бенчмарков с разными наборами входных данных // // Возвращаемое значение: -// Массив из +// Массив из ПараметрБенчмарка Функция Параметры() Экспорт @@ -363,7 +367,7 @@ КонецФункции -// Добавляет этап мониторинга выделения памяти и сборок мусора (GC) +// Добавляет этап мониторинга выделения памяти // // При использовании этой аннотации в отчете будут отображаться: // - Аллокации памяти в байтах за итерацию @@ -379,7 +383,7 @@ КонецФункции -// Требуется мониторинг выделения памяти и сборок мусора (GC) +// Требуется мониторинг выделения памяти // // Возвращаемое значение: // Булево @@ -410,9 +414,7 @@ // * Контекст - Структура: // ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // ** Конфигурация - КонфигурацияБенчмарков -// ** СредаОкружения - СредаОкруженияБенчмарков -// ** РезультатыЗапусков - ТаблицаЗначений - -// см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки // ** Отчет - ОтчетБенчмарков // // ПередКаждым - Вызывается перед каждым запуском бенчмарка. @@ -432,7 +434,7 @@ // * Контекст - Структура: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка -// ** Замеры - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаЗамеров +// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров // ** Статистика - СтатистикаБенчмарка // // Параметры: @@ -488,26 +490,55 @@ // Обработчики событий // // Возвращаемое значение: -// Соответствие из КлючИЗначение: -// * Ключ - Строка - см. СобытияБенчмарков -// * Значение - Массив из Строка - Массив экспортных методов экземпляра класса бенчмарков -// - Массив из Делегат - Массив делегатов +// ТаблицаЗначений: +// * Событие - Строка - см. СобытияБенчмарков +// * Обработчик - Строка - Экспортный метод экземпляра класса бенчмарков +// - Делегат - Делегат Функция ОбработчикиСобытий() Экспорт - События = Новый Соответствие(); + Результат = Новый ТаблицаЗначений(); + Результат.Колонки.Добавить("Событие"); + Результат.Колонки.Добавить("Обработчик"); Для Каждого ОбработчикиСобытия Из _Обработчики Цикл - Обработчики = Новый Массив(); - Для Каждого ОбработчикСобытия Из ОбработчикиСобытия.Значение Цикл - Обработчики.Добавить(ОбработчикСобытия.Ключ); + Событие = ОбработчикиСобытия.Ключ; + Обработчики = ОбработчикиСобытия.Значение; + + Для Каждого КлючЗначение Из Обработчики Цикл + СтрокаТаблицы = Результат.Добавить(); + СтрокаТаблицы.Событие = Событие; + СтрокаТаблицы.Обработчик = КлючЗначение.Ключ; КонецЦикла; - События[ОбработчикиСобытия.Ключ] = Обработчики; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Обработчики события +// +// Параметры: +// ИмяСобытия - Строка - см. СобытияБенчмарков +// +// Возвращаемое значение: +// Массив из Строка - Экспортный метод экземпляра класса бенчмарков +// Массив из Делегат +Функция ОбработчикиСобытия(ИмяСобытия) Экспорт + + Результат = Новый Массив(); + + ОбработчикиСобытия = _Обработчики[ИмяСобытия]; + Если ОбработчикиСобытия = Неопределено Тогда + Возврат Результат; + КонецЕсли; + Для Каждого Строка Из ОбработчикиСобытия Цикл + Результат.Добавить(Строка.Ключ); КонецЦикла; - Возврат События; + Возврат Результат; КонецФункции @@ -671,7 +702,98 @@ КонецФункции -// Объединяет переданную конфигурацию с текущей конфигурацию +// Добавляет версию исполняющей среды OneScript +// +// Параметры: +// Версия - Строка - Версия OneScript (x.x.x, stable, dev) или путь к oscript.exe. +// Наименование - Строка - Имя среды для отчета. +// ЭтоЭталон - Булево - Использовать как эталонную среду для сравнения результатов. +// +// Возвращаемое значение: +// ЭтотОбъект +Функция ДобавитьВерсиюИсполняющейСреды(Версия, Наименование = "", ЭтоЭталон = Ложь) Экспорт + + ДанныеСреды = _ВерсииИсполняющейСреды.Добавить(); + ДанныеСреды.Версия = Версия; + ДанныеСреды.Наименование = Наименование; + ДанныеСреды.ЭтоЭталон = ЭтоЭталон; + + УстановитьМодифицированность(ИмяПоля_ВерсииИсполняющейСреды()); + + Возврат ЭтотОбъект; + +КонецФункции + +// Версии исполняющей среды OneScript +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Версия - Строка - Версия OneScript (x.x.x, stable, dev) или путь к oscript.exe. +// * Наименование - Строка - Имя для отчетов. +// * ЭтоЭталон - Булево - Использовать как эталонную среду для сравнения результатов. +Функция ВерсииИсполняющейСреды() Экспорт + Возврат _ВерсииИсполняющейСреды.Скопировать(); +КонецФункции + +// Очищает версии исполняющей среды OneScript +// +// Возвращаемое значение: +// ЭтотОбъект +Функция ОчиститьВерсииИсполняющейСреды() Экспорт + + _ВерсииИсполняющейСреды.Очистить(); + УстановитьМодифицированность(ИмяПоля_ВерсииИсполняющейСреды()); + + Возврат ЭтотОбъект; + +КонецФункции + +// Версия исполняющей среды OneScript ограничена текущей +// +// Возвращаемое значение: +// Булево +Функция ИсполняющаяСредаОграниченаТекущей() Экспорт + + КоличествоВерсий = _ВерсииИсполняющейСреды.Количество(); + + Возврат КоличествоВерсий = 0 + Или КоличествоВерсий = 1 И НРег(_ВерсииИсполняющейСреды[0].Версия) = "current"; + +КонецФункции + +// Возвращает эталонную версию исполняющей среды OneScript +// +// Возвращаемое значение: +// Строка +Функция ЭталоннаяВерсияИсполняющейСреды() Экспорт + + НайденнаяСтрока = _ВерсииИсполняющейСреды.Найти(Истина, "ЭтоЭталон"); + Если НайденнаяСтрока = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат НайденнаяСтрока.Версия; + +КонецФункции + +#КонецОбласти + +#Область Агрегация + +// Создает новый экземпляр конфигурации копированием существующего. +// +// Возвращаемое значение: +// КонфигурацияБенчмарков +Функция Скопировать() Экспорт + + Конфигурация = Новый КонфигурацияБенчмарков(); + Конфигурация.Объединить(ЭтотОбъект); + + Возврат Конфигурация; + +КонецФункции + +// Применяет модифицированные поля переданной конфигурации к текущей. // // Параметры: // Конфигурация - КонфигурацияБенчмарков @@ -737,11 +859,16 @@ ПрименитьМодифицированныеОбработчикиСобытий(ЗначенияМодифицированныхПолей); ПрименитьМодифицированныеКолонки(ЗначенияМодифицированныхПолей); ПрименитьМодифицированныеЭкспортеры(ЗначенияМодифицированныхПолей); + ПрименитьМодифицированныеВерсииИсполняющейСреды(ЗначенияМодифицированныхПолей); Возврат ЭтотОбъект; КонецФункции +#КонецОбласти + +#Область Конвертация + // Конвертация объекта конфигурации в таблицу значений // // Возвращаемое значение: @@ -770,6 +897,7 @@ ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ОбработчикиСобытий(), ОбработчикиСобытий()); ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Колонки(), Колонки()); ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Экспортеры(), Экспортеры()); + ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ВерсииИсполняющейСреды(), ВерсииИсполняющейСреды()); Возврат Таблица; @@ -781,7 +909,7 @@ // Строка Функция ВСтроку() Экспорт - Подстроки = Новый Массив(); + Подстроки = Новый Массив(); Подстроки.Добавить(СтрШаблон("Стратегия = ""%1""", Стратегия())); Подстроки.Добавить("Измерительных итераций = " + КоличествоИтераций()); @@ -820,6 +948,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ДелегатОбработчика(Обработчик, ОбъектБенчмарков) @@ -832,6 +962,37 @@ КонецФункции +Функция ЕстьПараметрыМетода(Делегат) + + РефлекторОбъекта = Новый РефлекторОбъекта(Делегат.Объект()); + ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь); + СвойстваМетода = ТаблицаМетодов.Найти(Делегат.ИмяМетода(), "Имя"); + + Возврат СвойстваМетода.Параметры.Количество() > 0; + +КонецФункции + +Функция ДобавитьСтрокуВТаблицу(Таблица, Имя, Значение) + + Строка = Таблица.Добавить(); + Строка.Имя = Имя; + Строка.Значение = Значение; + Строка.Модифицирован = _МодифицированныеПоля[Имя]; + + Возврат Строка; + +КонецФункции + +Функция ПустаяТаблицаВерсииИсполняющейСреды() + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("Версия"); + Таблица.Колонки.Добавить("Наименование"); + Таблица.Колонки.Добавить("ЭтоЭталон"); + Возврат Таблица; +КонецФункции + +#Область Модифицированность + Процедура УстановитьМодифицированность(ИмяПоля_) _МодифицированныеПоля[ИмяПоля_] = Истина; КонецПроцедуры @@ -890,9 +1051,7 @@ УдалитьОбработчикиСобытий(); Для Каждого СтрокаСобытия Из ЗначенияМодифицированныхПолей[ИмяПоля_ОбработчикиСобытий()] Цикл - Для Каждого Обработчик Из СтрокаСобытия.Значение Цикл - ДобавитьОбработчикСобытия(СтрокаСобытия.Ключ, Обработчик); - КонецЦикла; + ДобавитьОбработчикСобытия(СтрокаСобытия.Событие, СтрокаСобытия.Обработчик); КонецЦикла; КонецПроцедуры @@ -911,26 +1070,21 @@ КонецПроцедуры -Функция ЕстьПараметрыМетода(Делегат) - - РефлекторОбъекта = Новый РефлекторОбъекта(Делегат.Объект()); - ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь); - СвойстваМетода = ТаблицаМетодов.Найти(Делегат.ИмяМетода(), "Имя"); - - Возврат СвойстваМетода.Параметры.Количество() > 0; - -КонецФункции +Процедура ПрименитьМодифицированныеВерсииИсполняющейСреды(ЗначенияМодифицированныхПолей) + + Если ЗначенияМодифицированныхПолей[ИмяПоля_ВерсииИсполняющейСреды()] = Неопределено Тогда + Возврат; + КонецЕсли; -Функция ДобавитьСтрокуВТаблицу(Таблица, Имя, Значение) Экспорт + ОчиститьВерсииИсполняющейСреды(); - Строка = Таблица.Добавить(); - Строка.Имя = Имя; - Строка.Значение = Значение; - Строка.Модифицирован = _МодифицированныеПоля[Имя]; + Для Каждого ДанныеСреды Из ЗначенияМодифицированныхПолей[ИмяПоля_ВерсииИсполняющейСреды()] Цикл + ДобавитьВерсиюИсполняющейСреды(ДанныеСреды.Версия, ДанныеСреды.Наименование, ДанныеСреды.ЭтоЭталон); + КонецЦикла; - Возврат Строка; +КонецПроцедуры -КонецФункции +#КонецОбласти #Область ИменаПолей @@ -986,6 +1140,10 @@ Возврат "Экспортеры"; КонецФункции +Функция ИмяПоля_ВерсииИсполняющейСреды() + Возврат "ВерсииИсполняющейСреды"; +КонецФункции + #КонецОбласти #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..93a889d --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,210 @@ +Перем _Таблица; // см. НоваяТаблицаРасшифровки + +// Расшифровка результатов бенчмарков. +// +// Параметры: +// РасшифровкаРезультатов - см. НоваяТаблицаРасшифровки +// - Неопределено +Процедура ПриСозданииОбъекта(РасшифровкаРезультатов = Неопределено) + + _Таблица = РасшифровкаРезультатов; + + Если _Таблица = Неопределено Тогда + _Таблица = НоваяТаблицаРасшифровки(); + КонецЕсли; + +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Возвращает таблицу с расшифровкой замеров бенчмарков. +// +// Возвращаемое значение: +// см. НоваяТаблицаРасшифровки +Функция ВТаблицу() Экспорт + Возврат _Таблица; +КонецФункции + +// Создает новую строку в таблице расшифровки. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначения +Функция Добавить() Экспорт + + СтрокаТаблицы = _Таблица.Добавить(); + СтрокаТаблицы.Параметры = Новый Массив(); + СтрокаТаблицы.Замеры = НоваяТаблицаЗамеров(); + СтрокаТаблицы.Статистика = Новый СтатистикаБенчмарка(); + СтрокаТаблицы.ИсполняющаяСреда = НоваяИсполняющаяСреда(); + + Возврат СтрокаТаблицы; + +КонецФункции + +// Связывает каждую строку замеров с эталонной строкой. +// +// Алгоритм поиска эталонов (в порядке приоритета): +// 1. При наличии эталонной версии исполняющей среды: +// - Ищет строку бенчмарка с идентичным именем и набором параметров в соответствующей эталонной среде +// 2. При отсутствии эталонной среды, но при наличии эталонного бенчмарка: +// - Ищет строку бенчмарка в пределах текущей категории бенчмарков, наборов параметров и исполняющей среды +// +// Параметры: +// Конфигурация - КонфигурацияБенчмарков +Процедура ОпределитьЭталоны(Конфигурация) Экспорт + + ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды(); + + Для Каждого СтрокаРасшифровкиЗамеров Из _Таблица Цикл + СтрокаРасшифровкиЗамеров.Эталон = НайтиЭталонДляСтроки(СтрокаРасшифровкиЗамеров, ЭталоннаяВерсия); + + Если Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда + СтрокаРасшифровкиЗамеров.ЭтоЭталон = СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.ЭтоЭталон(); + Иначе + СтрокаРасшифровкиЗамеров.ЭтоЭталон = + ЭталоннаяВерсия = СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия + Или ЭталоннаяВерсия = СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Алиас; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Пересчитывает статистические показатели для всех замеров в таблице +Процедура ОбновитьСтатистику() Экспорт + Для Каждого СтрокаРасшифровкиЗамеров Из _Таблица Цикл + СтрокаРасшифровкиЗамеров.Статистика.Прочитать(СтрокаРасшифровкиЗамеров.Замеры); + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НайтиЭталонДляСтроки(ВходнаяСтрока, ЭталоннаяВерсияИсполняющейСреды) + + Для Каждого СтрокаЭталон Из _Таблица Цикл + + ЭтоЭталон = СтрокаЭталон.ДескрипторБенчмарка.ЭтоЭталон(); + ЭтоРазныеСтроки = Не СтрокаЭталон = ВходнаяСтрока; + ИмяМетодаСовпадает = СтрокаЭталон.ДескрипторБенчмарка.Метод() = ВходнаяСтрока.ДескрипторБенчмарка.Метод(); + КатегорияСовпадает = СтрокаЭталон.ДескрипторБенчмарка.Категория() = ВходнаяСтрока.ДескрипторБенчмарка.Категория(); + ПараметрыСовпадают = ПараметрыСовпадают(СтрокаЭталон, ВходнаяСтрока); + ВерсияИсполняющейСредыСовпадает = СтрокаЭталон.ИсполняющаяСреда.Версия = ВходнаяСтрока.ИсполняющаяСреда.Версия; + ЭталоннаяВерсияИсполняющейСредыУказана = ЗначениеЗаполнено(ЭталоннаяВерсияИсполняющейСреды); + ЭталоннаяВерсияИсполняющейСредыСовпадает = ЭталоннаяВерсияИсполняющейСреды = СтрокаЭталон.ИсполняющаяСреда.Версия + Или ЭталоннаяВерсияИсполняющейСреды = СтрокаЭталон.ИсполняющаяСреда.Алиас; + + ПоискПоЭталоннойСреде = ЭталоннаяВерсияИсполняющейСредыУказана + И ЭталоннаяВерсияИсполняющейСредыСовпадает + И ИмяМетодаСовпадает; + + ПоискПоЭталонномуБенчмарку = Не ЭталоннаяВерсияИсполняющейСредыУказана + И ЭтоЭталон + И КатегорияСовпадает + И ВерсияИсполняющейСредыСовпадает; + + НайденЭталон = ЭтоРазныеСтроки + И ПараметрыСовпадают + И (ПоискПоЭталоннойСреде Или ПоискПоЭталонномуБенчмарку); + + Если НайденЭталон Тогда + Возврат СтрокаЭталон; + КонецЕсли; + + КонецЦикла; + +КонецФункции + +Функция ПараметрыСовпадают(СтрокаПервая, СтрокаВторая) + + Если СтрокаПервая.Параметры.Количество() <> СтрокаВторая.Параметры.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыСовпадают = Истина; + Для Каждого ПараметрПервой Из СтрокаПервая.Параметры Цикл + + ПараметрНайден = Ложь; + Для Каждого ПараметрВторой Из СтрокаВторая.Параметры Цикл + Если ПараметрПервой.Имя = ПараметрВторой.Имя + И ПараметрПервой.Значение = ПараметрВторой.Значение Тогда + ПараметрНайден = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ПараметрНайден Тогда + ПараметрыСовпадают = Ложь; + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат ПараметрыСовпадают; + +КонецФункции + +// Пустая таблица расшифровки +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ДескрипторБенчмарка - ДескрипторБенчмарка +// * Параметры - Массив из ПараметрБенчмарка +// * Статистика - СтатистикаБенчмарка +// * Эталон - СтрокаТаблицыЗначений, Неопределено +// * ЭтоЭталон - Булево +// * Замеры - см. НоваяТаблицаЗамеров +// * ИсполняющаяСреда - см. НоваяИсполняющаяСреда +Функция НоваяТаблицаРасшифровки() + + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("ДескрипторБенчмарка"); + Таблица.Колонки.Добавить("Параметры"); + Таблица.Колонки.Добавить("Статистика"); + Таблица.Колонки.Добавить("Эталон"); + Таблица.Колонки.Добавить("ЭтоЭталон"); + Таблица.Колонки.Добавить("Замеры"); + Таблица.Колонки.Добавить("ИсполняющаяСреда"); + + Возврат Таблица; + +КонецФункции + +// Пустая таблица замеров +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Этап - см. ЭтапыБенчмарка +// * НомерИтерации - Число +// * КоличествоОпераций - Число +// * Наносекунд - Число - Наносекунд за итерацию +// * НаносекундЗаОперацию - Число - Наносекунд за операцию +// * ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию +// * ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию +Функция НоваяТаблицаЗамеров() + + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("Этап"); + Таблица.Колонки.Добавить("НомерИтерации"); + Таблица.Колонки.Добавить("КоличествоОпераций"); + Таблица.Колонки.Добавить("Наносекунд"); + Таблица.Колонки.Добавить("НаносекундЗаОперацию"); + Таблица.Колонки.Добавить("ВыделяемаяПамять"); + Таблица.Колонки.Добавить("ВыделяемаяПамятьЗаОперацию"); + + Возврат Таблица; + +КонецФункции + +Функция НоваяИсполняющаяСреда() + + ИсполняющаяСреда = Новый Структура(); + ИсполняющаяСреда.Вставить("Версия", ""); + ИсполняющаяСреда.Вставить("Алиас", ""); + ИсполняющаяСреда.Вставить("Наименование", ""); + + Возврат ИсполняющаяСреда; + +КонецФункции + +#КонецОбласти diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\200\321\202\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\200\321\202\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..4b91ed2 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\200\321\202\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,66 @@ +#Использовать asserts + +Перем _ИсточникБенчмарков; // Произвольный +Перем _ОбъектБенчмарков; // Экземпляр класса с бенчмарками +Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков + +// Обертка источника бенчмарков +// +// Параметры: +// ИсточникБенчмарков - Тип - Класс, содержащий бенчмарки +// - КоллекцияДескрипторовБенчмарков +// - ДескрипторБенчмарка +// - Произвольный - Экземпляр класса с бенчмарками +Процедура ПриСозданииОбъекта(ИсточникБенчмарков) + _ИсточникБенчмарков = ИсточникБенчмарков; +КонецПроцедуры + +Функция ОбъектБенчмарков() Экспорт + + Если Не _ОбъектБенчмарков = Неопределено Тогда + Возврат _ОбъектБенчмарков; + КонецЕсли; + + Если ТипЗнч(_ИсточникБенчмарков) = Тип("Тип") Тогда + + _ОбъектБенчмарков = Новый(_ИсточникБенчмарков); + + ИначеЕсли ТипЗнч(_ИсточникБенчмарков) = Тип("КоллекцияДескрипторовБенчмарков") Тогда + + Дескриптор = _ИсточникБенчмарков.ПолучитьПервый(); + Если Не Дескриптор = Неопределено Тогда + _ОбъектБенчмарков = Новый(Дескриптор.ТипОбъекта()); + КонецЕсли; + + ИначеЕсли ТипЗнч(_ИсточникБенчмарков) = Тип("ДескрипторБенчмарка") Тогда + + _ОбъектБенчмарков = Новый(_ИсточникБенчмарков.ТипОбъекта()); + + Иначе + + _ОбъектБенчмарков = _ИсточникБенчмарков; + + КонецЕсли; + + Возврат _ОбъектБенчмарков; + +КонецФункции + +Функция Дескрипторы() Экспорт + + Если Не _ДескрипторыБенчмарков = Неопределено Тогда + Возврат _ДескрипторыБенчмарков; + КонецЕсли; + + Если ТипЗнч(_ИсточникБенчмарков) = Тип("КоллекцияДескрипторовБенчмарков") Тогда + _ДескрипторыБенчмарков = _ИсточникБенчмарков; + ИначеЕсли ТипЗнч(_ИсточникБенчмарков) = Тип("ДескрипторБенчмарка") Тогда + _ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); + _ДескрипторыБенчмарков.Добавить(_ИсточникБенчмарков); + Иначе + _ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(ОбъектБенчмарков()); + КонецЕсли; + + Возврат _ДескрипторыБенчмарков; + +КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 066330e..49d9acf 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,8 +1,8 @@ #Использовать lambdas -Перем _ДескрипторыБенчмарков; // Массив из ДескрипторБенчмарка +Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков Перем _Конфигурация; // КонфигурацияБенчмарков -Перем _РезультатыЗапусков; // ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков +Перем _РасшифровкаРезультатов; // см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки Перем _Отчет; // ОтчетБенчмарков Перем _КолонкиКонфигурации; // Массив из Строка @@ -11,12 +11,12 @@ // Параметры: // ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // Конфигурация - КонфигурацияБенчмарков -// РезультатыЗапусков - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков -Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, РезультатыЗапусков) +// РасшифровкаРезультатов - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, РасшифровкаРезультатов) - _ДескрипторыБенчмарков = ДескрипторыБенчмарков.ВМассив(); + _ДескрипторыБенчмарков = ДескрипторыБенчмарков; _Конфигурация = Конфигурация; - _РезультатыЗапусков = РезультатыЗапусков; + _РасшифровкаРезультатов = РасшифровкаРезультатов; _КолонкиКонфигурации = _Конфигурация.Колонки(); КонецПроцедуры @@ -51,10 +51,11 @@ Процедура ДобавитьКолонки() ДобавитьКолонкуПорядкаПоУмолчанию(); - ДобавитьКолонкуРезультатЗапуска(); + ДобавитьКолонкуРасшифровкаРезультатов(); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьМетод()); ДобавитьКолонкуКатегория(); ДобавитьКолонкиПараметров(); + ДобавитьКолонкуВерсияИсполняющейСреды(); ДобавитьКолонкуЭталон(); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьСреднее()); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьСтандартнаяОшибка()); @@ -76,8 +77,8 @@ _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиПорядокПоУмолчанию()); КонецПроцедуры -Процедура ДобавитьКолонкуРезультатЗапуска() - _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРезультатЗапуска()); +Процедура ДобавитьКолонкуРасшифровкаРезультатов() + _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРасшифровкаРезультатов()); КонецПроцедуры Процедура ДобавитьКолонкиПараметров() @@ -86,7 +87,7 @@ ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Параметр.Имя)); КонецЦикла; - Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков Цикл + Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл Для Каждого Имя Из ДескрипторБенчмарка.ИменаПараметров() Цикл ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Имя)); КонецЦикла; @@ -102,11 +103,28 @@ КонецПроцедуры +Процедура ДобавитьКолонкуВерсияИсполняющейСреды() + + ЕстьВерсия = Ложь; + + Для Каждого СтрокаРасшифровкиЗамеров Из _РасшифровкаРезультатов Цикл + Если ЗначениеЗаполнено(СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия) Тогда + ЕстьВерсия = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЕстьВерсия Тогда + ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьВерсияИсполняющейСреды()); + КонецЕсли; + +КонецПроцедуры + Процедура ДобавитьКолонкуКатегория() ЕстьКатегория = Ложь; - Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков Цикл + Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл Если ЗначениеЗаполнено(ДескрипторБенчмарка.Категория()) Тогда ЕстьКатегория = Истина; Прервать; @@ -190,7 +208,7 @@ СкрываемыеКолонки = Новый Массив(); СкрываемыеКолонки.Добавить(ИмяКолонкиПорядокПоУмолчанию()); - СкрываемыеКолонки.Добавить(ИмяКолонкиРезультатЗапуска()); + СкрываемыеКолонки.Добавить(ИмяКолонкиРасшифровкаРезультатов()); Для Каждого Колонка Из _Отчет.Колонки Цикл Если СкрыватьКолонку(Колонка) Тогда @@ -226,7 +244,7 @@ Контекст = Новый Структура(); Контекст.Вставить("Значение", СтрокаОтчета[Колонка.Имя]); - Контекст.Вставить("Статистика", СтрокаОтчета.РезультатЗапуска.Статистика); + Контекст.Вставить("Статистика", СтрокаОтчета.РасшифровкаРезультатов.Статистика); Попытка Скрывать = Действие.Выполнить(Контекст) = Истина; @@ -251,9 +269,9 @@ НомерБенчмарка = 0; ПредыдущийБенчмарк = ""; - Для Каждого СтрокаРезультат Из _РезультатыЗапусков Цикл + Для Каждого СтрокаРасшифровкиЗамеров Из _РасшифровкаРезультатов Цикл - ИмяБенчмарка = СтрокаРезультат.ДескрипторБенчмарка.Метод(); + ИмяБенчмарка = СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.Метод(); Если Не ПредыдущийБенчмарк = ИмяБенчмарка Тогда НомерБенчмарка = НомерБенчмарка + 1; ПредыдущийБенчмарк = ИмяБенчмарка; @@ -261,10 +279,10 @@ СтрокаОтчета = _Отчет.Таблица.Добавить(); СтрокаОтчета[ИмяКолонкиПорядокПоУмолчанию()] = НомерБенчмарка; - СтрокаОтчета[ИмяКолонкиРезультатЗапуска()] = СтрокаРезультат; + СтрокаОтчета[ИмяКолонкиРасшифровкаРезультатов()] = СтрокаРасшифровкиЗамеров; Для Каждого Колонка Из _Отчет.Колонки Цикл - СтрокаОтчета[Колонка.Имя] = Колонка.Значение(СтрокаРезультат, Колонка); + СтрокаОтчета[Колонка.Имя] = Колонка.Значение(СтрокаРасшифровкиЗамеров, Колонка); КонецЦикла; КонецЦИкла; @@ -394,7 +412,10 @@ Процедура ДобавитьСортировкуПоПараметрам(Сортировка) Для Каждого ИмяПараметра Из _Конфигурация.ИменаПараметров() Цикл - ДобавитьСортировку(Сортировка, КолонкиОтчетаБенчмарков.Параметр(ИмяПараметра)); + ИмяКолонки = КолонкиОтчетаБенчмарков.Параметр(ИмяПараметра); + Если КолонкаСодержитТолькоСериализуемыеЗначения(ИмяКолонки) Тогда + ДобавитьСортировку(Сортировка, ИмяКолонки); + КонецЕсли; КонецЦикла; КонецПроцедуры @@ -407,15 +428,24 @@ КонецПроцедуры -Функция ИспользуетсяЭталон() +Функция КолонкаСодержитТолькоСериализуемыеЗначения(ИмяКолонки) - Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков Цикл - Если ДескрипторБенчмарка.ЭтоЭталон() Тогда - Возврат Истина; + Для Каждого Строка Из _Отчет.Таблица Цикл + Если Не СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Строка[ИмяКолонки]) Тогда + Возврат Ложь; КонецЕсли; КонецЦикла; - Возврат Ложь; + Возврат Истина; + +КонецФункции + +Функция ИспользуетсяЭталон() + + ЕстьЭталоннаяВерсия = _Конфигурация.ВерсииИсполняющейСреды().Найти(Истина, "ЭтоЭталон") <> Неопределено; + ЕстьЭталонныеБенчмарки = _ДескрипторыБенчмарков.ПолучитьЭталонные().Количество() > 0; + + Возврат ЕстьЭталоннаяВерсия Или ЕстьЭталонныеБенчмарки; КонецФункции @@ -437,8 +467,8 @@ Возврат "ПорядокПоУмолчанию"; КонецФункции -Функция ИмяКолонкиРезультатЗапуска() - Возврат "РезультатЗапуска"; +Функция ИмяКолонкиРасшифровкаРезультатов() + Возврат "РасшифровкаРезультатов"; КонецФункции #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..3da4d47 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,207 @@ +#Использовать logos +#Использовать asserts + +Перем _Лог; // Лог + +// Сериализатор конфигурации бенчмарков +Процедура ПриСозданииОбъекта() + _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторКонфигурацииБенчмарков"); +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Сериализует конфигурацию бенчмарков в JSON-файл +// +// Параметры: +// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков +// ИмяФайла - Строка - Имя файла, в который будет записана конфигурация. +Процедура СериализоватьВJSON(Конфигурация, ИмяФайла) Экспорт + + _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); + + ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); + + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); + ЗаписатьJSON(ЗаписьJSON, Конвертировать(Конфигурация)); + ЗаписьJSON.Закрыть(); + + _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); + +КонецПроцедуры + +// Десериализует конфигурацию бенчмарков из JSON-файла +// +// Параметры: +// ИмяФайла - Строка - Имя файла, из которого будет прочитана конфигурация. +// +// Возвращаемое значение: +// КонфигурацияБенчмарков +Функция ДесериализоватьИзJSON(ИмяФайла) Экспорт + + _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); + + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8"); + Данные = ПрочитатьJSON(ЧтениеJSON, Ложь); + ЧтениеJSON.Закрыть(); + + _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла); + + Возврат СобратьКонфигурацию(Данные); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция Конвертировать(Конфигурация) + + Данные = Новый Структура(); + + Для Каждого СтрокаТаблицы Из Конфигурация.ВТаблицу() Цикл + + Если СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(СтрокаТаблицы.Значение) + Или СтрокаТаблицы.Имя = "Колонки" Тогда + Значение = СтрокаТаблицы.Значение; + ИначеЕсли СтрокаТаблицы.Имя = "Параметры" Тогда + Значение = КонвертироватьПараметры(СтрокаТаблицы.Значение); + ИначеЕсли СтрокаТаблицы.Имя = "ОбработчикиСобытий" Тогда + Значение = КонвертироватьОбработчикиСобытий(СтрокаТаблицы.Значение); + ИначеЕсли СтрокаТаблицы.Имя = "Экспортеры" Тогда + Значение = КонвертироватьЭкспортеры(СтрокаТаблицы.Значение); + ИначеЕсли СтрокаТаблицы.Имя = "ВерсииИсполняющейСреды" Тогда + Значение = КонвертироватьВерсииИсполняющейСреды(СтрокаТаблицы.Значение); + Иначе + ВызватьИсключение СтрШаблон("Не реализована конвертация параметра '%1'", СтрокаТаблицы.Имя); + КонецЕсли; + + Данные.Вставить(СтрокаТаблицы.Имя, Значение); + + КонецЦикла; + + Возврат Данные; + +КонецФункции + +Функция КонвертироватьПараметры(Параметры) + + Результат = Новый Массив(); + + Для Каждого ПараметрБенчмарка Из Параметры Цикл + + Значение = Новый Структура(); + Значение.Вставить("Имя", ПараметрБенчмарка.Имя); + Значение.Вставить("Значение", ПараметрБенчмарка.Значение); + Значение.Вставить("ЭтоПараметрМетода", ПараметрБенчмарка.ЭтоПараметрМетода); + + Результат.Добавить(Значение); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция КонвертироватьОбработчикиСобытий(ОбработчикиСобытий) + + Результат = Новый Массив(); + + Для Каждого Строка Из ОбработчикиСобытий Цикл + + Если ТипЗнч(Строка.Обработчик) <> Тип("Строка") Тогда + _Лог.Предупреждение( + "Делегат %1.%2 не будет сериализован", + ТипЗнч(Строка.Обработчик.Объект()), + Строка.Обработчик.ИмяМетода + ); + Продолжить; + КонецЕсли; + + Значение = Новый Структура(); + Значение.Вставить("Событие", Строка.Событие); + Значение.Вставить("Обработчик", Строка.Обработчик); + + Результат.Добавить(Значение); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция КонвертироватьЭкспортеры(Экспортеры) + + Результат = Новый Массив(); + + Для Каждого Экспортер Из Экспортеры Цикл + Результат.Добавить(Строка(ТипЗнч(Экспортер))); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция КонвертироватьВерсииИсполняющейСреды(Версии) + + Результат = Новый Массив(); + + Для Каждого СтрокаВерсия Из Версии Цикл + Версия = Новый Структура(); + Версия.Вставить("Версия", СтрокаВерсия.Версия); + Версия.Вставить("Наименование", СтрокаВерсия.Наименование); + Версия.Вставить("ЭтоЭталон", СтрокаВерсия.ЭтоЭталон); + + Результат.Добавить(Версия); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция СобратьКонфигурацию(Данные) + + Конфигурация = Новый КонфигурацияБенчмарков(); + Конфигурация.УстановитьКоличествоИтераций(Данные.КоличествоИтераций); + Конфигурация.УстановитьКоличествоВызововЗаИтерацию(Данные.КоличествоВызововЗаИтерацию); + Конфигурация.УстановитьКоличествоПрогревочныхИтераций(Данные.КоличествоПрогревочныхИтераций); + Конфигурация.УстановитьМинимальноеВремяИтерации(Данные.МинимальноеВремяИтерации); + Конфигурация.УстановитьМинимальноеКоличествоВызововЗаИтерацию(Данные.МинимальноеКоличествоВызововЗаИтерацию); + Конфигурация.УстановитьСтратегию(Данные.Стратегия); + Конфигурация.УстановитьСортировкуОтчета(Данные.СортировкаОтчета); + Конфигурация.УстановитьКаталогАртефактов(Данные.КаталогАртефактов); + + Если Данные.ТребуетсяМониторингПамяти Тогда + Конфигурация.ДобавитьМониторингПамяти(); + КонецЕсли; + + Для Каждого Параметр Из Данные.Параметры Цикл + Конфигурация.ДобавитьПараметр(Параметр.Имя, Параметр.Значение); + КонецЦикла; + + Для Каждого ДанныеСобытия Из Данные.ОбработчикиСобытий Цикл + Конфигурация.ДобавитьОбработчикСобытия(ДанныеСобытия.Событие, ДанныеСобытия.Обработчик); + КонецЦикла; + + Для Каждого Колонка Из Данные.Колонки Цикл + Конфигурация.ДобавитьКолонку(Колонка); + КонецЦикла; + + Для Каждого Экспортер Из Данные.Экспортеры Цикл + Конфигурация.ДобавитьЭкспортер(Новый(Тип(Экспортер))); + КонецЦикла; + + Для Каждого ВерсияИсполняющейСреды Из Данные.ВерсииИсполняющейСреды Цикл + Конфигурация.ДобавитьВерсиюИсполняющейСреды( + ВерсияИсполняющейСреды.Версия, + ВерсияИсполняющейСреды.Наименование, + ВерсияИсполняющейСреды.ЭтоЭталон + ); + КонецЦикла; + + Возврат Конфигурация; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..623102c --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,373 @@ +#Использовать logos +#Использовать xml-parser + +Перем _Лог; // Лог + +// Сериализатор результатов бенчмарков +Процедура ПриСозданииОбъекта() + _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторРезультатовБенчмарков"); +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Сериализует результаты бенчмарков в JSON-файл +// +// Параметры: +// РезультатыБенчмарков - Структура: +// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// * СредаОкружения - СредаОкруженияБенчмарков +// ИмяФайла - Строка - Имя файла, в который будут записаны результаты бенчмарков. +Процедура СериализоватьВJSON(РезультатыБенчмарков, ИмяФайла) Экспорт + + _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); + + Данные = СтруктураДляСериализации(РезультатыБенчмарков); + + ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); + + ЗаписьJSON = Новый ЗаписьJSON(); + ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); + ЗаписатьJSON(ЗаписьJSON, Данные); + ЗаписьJSON.Закрыть(); + + _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); + +КонецПроцедуры + +// Десериализует результаты бенчмарков из JSON-файла +// +// Параметры: +// ИмяФайла - Строка - Имя файла, из которого будут прочитаны результаты бенчмарков. +// Конфигурация - КонфигурацияБенчмарков - Конфигурация +// +// Возвращаемое значение: +// Структура: +// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// * СредаОкружения - СредаОкруженияБенчмарков +Функция ДесериализоватьИзJSON(ИмяФайла, Конфигурация) Экспорт + + _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); + + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8"); + Данные = ПрочитатьJSON(ЧтениеJSON, Ложь); + ЧтениеJSON.Закрыть(); + + _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла); + + Возврат СобратьРезультатыБенчмарков(Данные, Конфигурация); + +КонецФункции + +// Сериализует результаты бенчмарков в XML-файл +// +// Параметры: +// РезультатыБенчмарков - Структура: +// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// * СредаОкружения - СредаОкруженияБенчмарков +// ИмяФайла - Строка - Имя файла, в который будут записаны результаты бенчмарков. +Процедура СериализоватьВXML(РезультатыБенчмарков, ИмяФайла) Экспорт + + _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); + + Данные = СтруктураДляСериализации(РезультатыБенчмарков); + ПодготовитьЗначенияДляЗаписиВXML(Данные); + ПодготовитьМассивыДляЗаписиВXML(Данные); + Данные = Новый Структура("Отчет", Данные); + + ПроцессорXML = Новый СериализацияДанныхXML(Ложь); + ПроцессорXML.ЗаписатьВФайл(Данные, ИмяФайла, Истина); + + _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СтруктураДляСериализации(РезультатыБенчмарков) + + ИнформацияОПроцессоре = РезультатыБенчмарков.СредаОкружения.ИнформацияОПроцессоре; + + УзелСредаОкружения = Новый Структура(); + УзелСредаОкружения.Вставить("ВерсияBenchmarkOneScript", РезультатыБенчмарков.СредаОкружения.ВерсияБиблиотеки); + УзелСредаОкружения.Вставить("ВерсияОС", РезультатыБенчмарков.СредаОкружения.ВерсияОС); + УзелСредаОкружения.Вставить("ВерсияИсполняющейСреды", РезультатыБенчмарков.СредаОкружения.ВерсияИсполняющейСреды); + УзелСредаОкружения.Вставить("ИмяПроцессора", ИнформацияОПроцессоре.ИмяПроцессора); + УзелСредаОкружения.Вставить("КоличествоПроцессоров", ИнформацияОПроцессоре.КоличествоПроцессоров); + УзелСредаОкружения.Вставить("КоличествоЯдер", ИнформацияОПроцессоре.КоличествоЯдер); + УзелСредаОкружения.Вставить("КоличествоЛогическихПроцессоров", ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров); + + УзелБенчмарки = Новый Массив(); + + Для Каждого СтрокаРасшифровкиЗамеров Из РезультатыБенчмарков.Расшифровка Цикл + + УзелИсполняющаяСреда = Новый Структура(); + УзелИсполняющаяСреда.Вставить("Версия", СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия); + УзелИсполняющаяСреда.Вставить("Алиас", СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Алиас); + УзелИсполняющаяСреда.Вставить("Наименование", СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Наименование); + + УзелБенчмарк = Новый Структура(); + УзелБенчмарк.Вставить("Тип", Строка(СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.ТипОбъекта())); + УзелБенчмарк.Вставить("Метод", СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.Метод()); + УзелБенчмарк.Вставить("Категория", СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.Категория()); + УзелБенчмарк.Вставить("ЭтоЭталон", СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.ЭтоЭталон()); + УзелБенчмарк.Вставить("ИсполняющаяСреда", УзелИсполняющаяСреда); + УзелБенчмарк.Вставить("Параметры", Новый Структура()); + УзелБенчмарк.Вставить("Статистика", Новый Структура()); + УзелБенчмарк.Вставить("Замеры", Новый Массив()); + + Статистика = СтрокаРасшифровкиЗамеров.Статистика; + УзелБенчмарк.Статистика.Вставить("Значения", Новый Массив()); + УзелБенчмарк.Статистика.Вставить("Количество", 0); + УзелБенчмарк.Статистика.Вставить("Мин", Статистика.Мин); + УзелБенчмарк.Статистика.Вставить("Q1", Статистика.НижнийКвартиль); + УзелБенчмарк.Статистика.Вставить("Медиана", Статистика.Медиана); + УзелБенчмарк.Статистика.Вставить("Среднее", Статистика.Среднее); + УзелБенчмарк.Статистика.Вставить("Q3", Статистика.ВерхнийКвартиль); + УзелБенчмарк.Статистика.Вставить("Макс", Статистика.Макс); + УзелБенчмарк.Статистика.Вставить("СтандартноеОтклонение", Статистика.СтандартноеОтклонение); + УзелБенчмарк.Статистика.Вставить("СтандартнаяОшибкаСреднего", Статистика.СтандартнаяОшибкаСреднего); + УзелБенчмарк.Статистика.Вставить("ОперацийВСекунду", Статистика.ОперацийВСекунду); + УзелБенчмарк.Статистика.Вставить("Процентили", Новый Структура()); + + // BSLLS:MagicNumber-off + УзелБенчмарк.Статистика.Процентили.Вставить("P0", Статистика.Квантиль(0)); + УзелБенчмарк.Статистика.Процентили.Вставить("P25", Статистика.Квантиль(0.25)); + УзелБенчмарк.Статистика.Процентили.Вставить("P50", Статистика.Квантиль(0.5)); + УзелБенчмарк.Статистика.Процентили.Вставить("P67", Статистика.Квантиль(0.67)); + УзелБенчмарк.Статистика.Процентили.Вставить("P80", Статистика.Квантиль(0.8)); + УзелБенчмарк.Статистика.Процентили.Вставить("P85", Статистика.Квантиль(0.85)); + УзелБенчмарк.Статистика.Процентили.Вставить("P90", Статистика.Квантиль(0.90)); + УзелБенчмарк.Статистика.Процентили.Вставить("P95", Статистика.Квантиль(0.95)); + УзелБенчмарк.Статистика.Процентили.Вставить("P100", Статистика.Квантиль(1)); + // BSLLS:MagicNumber-on + + УзелБенчмарк.Статистика.Вставить("Память", Новый Структура()); + УзелБенчмарк.Статистика.Память.Вставить("ВыделяемаяЗаОперацию", Статистика.ВыделяемаяПамять); + + Для Каждого Замер Из СтрокаРасшифровкиЗамеров.Замеры Цикл + + Если Замер.Этап = ЭтапыБенчмарка.Измерение Тогда + УзелБенчмарк.Статистика.Значения.Добавить(Замер.НаносекундЗаОперацию); + КонецЕсли; + + УзелЗамера = Новый Структура(); + УзелЗамера.Вставить("Этап", Замер.Этап); + УзелЗамера.Вставить("НомерИтерации", Замер.НомерИтерации); + УзелЗамера.Вставить("КоличествоОпераций", Замер.КоличествоОпераций); + УзелЗамера.Вставить("Наносекунд", Замер.Наносекунд); + УзелЗамера.Вставить("НаносекундЗаОперацию", Замер.НаносекундЗаОперацию); + УзелЗамера.Вставить("ВыделяемаяПамять", Замер.ВыделяемаяПамять); + УзелЗамера.Вставить("ВыделяемаяПамятьЗаОперацию", Замер.ВыделяемаяПамятьЗаОперацию); + + УзелБенчмарк.Замеры.Добавить(УзелЗамера); + + КонецЦикла; + + УзелБенчмарк.Статистика.Количество = УзелБенчмарк.Статистика.Значения.Количество(); + + Для Каждого Параметр Из СтрокаРасшифровкиЗамеров.Параметры Цикл + Значение = СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Параметр.Значение); + УзелБенчмарк.Параметры.Вставить(Параметр.Имя, Значение); + КонецЦикла; + + УзелБенчмарки.Добавить(УзелБенчмарк); + + КонецЦикла; + + Данные = Новый Структура(); + Данные.Вставить("СредаОкружения", УзелСредаОкружения); + Данные.Вставить("Бенчмарки", УзелБенчмарки); + + Возврат Данные; + +КонецФункции + +Процедура ПодготовитьМассивыДляЗаписиВXML(Данные) + + Для Каждого Строка Из Данные.Бенчмарки Цикл + ПодготовитьМассивДляЗаписиВXML(Строка.Статистика.Значения, "Значение"); + ПодготовитьМассивДляЗаписиВXML(Строка.Замеры, "Замер"); + КонецЦикла; + + ПодготовитьМассивДляЗаписиВXML(Данные.Бенчмарки, "Бенчмарк"); + +КонецПроцедуры + +Процедура ПодготовитьЗначенияДляЗаписиВXML(Данные) + + // В xml-parser не все простые типы корректно сериализуются + Для Каждого Строка Из Данные.Бенчмарки Цикл + Для Каждого Параметр Из Строка.Параметры Цикл + Если СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Параметр.Значение) Тогда + Строка.Параметры[Параметр.Ключ] = XMLСтрока(Параметр.Значение); + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура ПодготовитьМассивДляЗаписиВXML(Массив, Имя) + + Для Инд = 0 По Массив.ВГраница() Цикл + Значение = Массив[Инд]; + Массив[Инд] = Новый Структура(Имя, Значение); + КонецЦикла; + +КонецПроцедуры + +Функция СобратьРезультатыБенчмарков(Данные, Конфигурация) + + // Расшифровка замеров + МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); + + ДескрипторыБенчмарков = Новый Соответствие(); + + Для Каждого УзелБенчмарк Из Данные.Бенчмарки Цикл + + ДескрипторБенчмарка = СобратьДескрипторБенчмарка(УзелБенчмарк, ДескрипторыБенчмарков, Конфигурация); + + СтрокаТаблицы = МенеджерРасшифровкиРезультатов.Добавить(); + СтрокаТаблицы.ДескрипторБенчмарка = ДескрипторБенчмарка; + СтрокаТаблицы.ИсполняющаяСреда.Версия = УзелБенчмарк.ИсполняющаяСреда.Версия; + СтрокаТаблицы.ИсполняющаяСреда.Алиас = УзелБенчмарк.ИсполняющаяСреда.Алиас; + СтрокаТаблицы.ИсполняющаяСреда.Наименование = УзелБенчмарк.ИсполняющаяСреда.Наименование; + + ЗаполнитьПараметрыВСтроке(СтрокаТаблицы, УзелБенчмарк); + ЗаполнитьЗамерыВСтроке(СтрокаТаблицы, УзелБенчмарк); + + КонецЦикла; + + МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(Конфигурация); + МенеджерРасшифровкиРезультатов.ОбновитьСтатистику(); + + // Среда окружения + УзелСредаОкружения = Данные.СредаОкружения; + + ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре(Ложь); + ИнформацияОПроцессоре.ИмяПроцессора = УзелСредаОкружения.ИмяПроцессора; + ИнформацияОПроцессоре.КоличествоПроцессоров = УзелСредаОкружения.КоличествоПроцессоров; + ИнформацияОПроцессоре.КоличествоЯдер = УзелСредаОкружения.КоличествоЯдер; + ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров = УзелСредаОкружения.КоличествоЛогическихПроцессоров; + + СредаОкружения = Новый СредаОкруженияБенчмарков(); + СредаОкружения.ВерсияБиблиотеки = УзелСредаОкружения.ВерсияBenchmarkOneScript; + СредаОкружения.ВерсияОС = УзелСредаОкружения.ВерсияОС; + СредаОкружения.ВерсияИсполняющейСреды = УзелСредаОкружения.ВерсияИсполняющейСреды; + СредаОкружения.ИнформацияОПроцессоре = ИнформацияОПроцессоре; + + // Подготовка результата + Результат = Новый Структура(); + Результат.Вставить("Расшифровка", МенеджерРасшифровкиРезультатов.ВТаблицу()); + Результат.Вставить("СредаОкружения", СредаОкружения); + + Возврат Результат; + +КонецФункции + +Функция СобратьДескрипторБенчмарка(УзелБенчмарк, ДескрипторыБенчмарков, Конфигурация) + + Тип = Тип(УзелБенчмарк.Тип); + ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды(); + + Если ДескрипторыБенчмарков[Тип] = Неопределено Тогда + ДескрипторыБенчмарков[Тип] = Новый Соответствие(); + КонецЕсли; + + ДескрипторБенчмарка = ДескрипторыБенчмарков[Тип][УзелБенчмарк.Метод]; + Если Не ДескрипторБенчмарка = Неопределено Тогда + Возврат ДескрипторБенчмарка; + КонецЕсли; + + ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Тип, УзелБенчмарк.Метод); + + Если УзелБенчмарк.ЭтоЭталон И Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда + ДескрипторБенчмарка.ИспользоватьКакЭталон(УзелБенчмарк.ЭтоЭталон); + КонецЕсли; + + Если ЗначениеЗаполнено(УзелБенчмарк.Категория) Тогда + ДескрипторБенчмарка.УстановитьКатегорию(УзелБенчмарк.Категория); + КонецЕсли; + + ДескрипторыБенчмарков[Тип].Вставить(УзелБенчмарк.Метод, ДескрипторБенчмарка); + + Возврат ДескрипторБенчмарка; + +КонецФункции + +Процедура ЗаполнитьПараметрыВСтроке(СтрокаРезультата, УзелБенчмарк) + + ИменаПараметровБенчмарка = СтрокаРезультата.ДескрипторБенчмарка.ИменаПараметров(); + КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); + + Если КоличествоПараметров = 0 Тогда + ПараметрыМетода = Новый Массив(); + Иначе + ПараметрыМетода = Новый Массив(КоличествоПараметров); + КонецЕсли; + + Для Каждого УзелПараметр Из УзелБенчмарк.Параметры Цикл + + Имя = УзелПараметр.Ключ; + Значение = УзелПараметр.Значение; + + ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя); + ЭтоПараметрМетода = Не ИндексПараметра = Неопределено; + + ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); + СтрокаРезультата.Параметры.Добавить(ПараметрБенчмарка); + + Если ЭтоПараметрМетода Тогда + ПараметрыМетода[ИндексПараметра] = Значение; + КонецЕсли; + + КонецЦикла; + + Если ПараметрыМетода.Количество() > 0 + И ОтсутствуетНаборПараметровБенчмарка(СтрокаРезультата.ДескрипторБенчмарка, ПараметрыМетода) Тогда + СтрокаРезультата.ДескрипторБенчмарка.ДобавитьПараметры(ПараметрыМетода); + КонецЕсли; + +КонецПроцедуры + +Функция ОтсутствуетНаборПараметровБенчмарка(ДескрипторБенчмарка, ПараметрыМетода) + + НайденНабор = Ложь; + Для Каждого НаборПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл + НайденНабор = Истина; + Для Инд = 0 По НаборПараметров.ВГраница() Цикл + Если Не НаборПараметров[Инд].Значение = ПараметрыМетода[Инд] Тогда + НайденНабор = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Не НайденНабор; + +КонецФункции + +Процедура ЗаполнитьЗамерыВСтроке(СтрокаРезультата, УзелБенчмарк) + + Для Каждого УзелЗамер Из УзелБенчмарк.Замеры Цикл + + СтрокаЗамера = СтрокаРезультата.Замеры.Добавить(); + СтрокаЗамера.Этап = УзелЗамер.Этап; + СтрокаЗамера.НомерИтерации = ВЧисло(УзелЗамер.НомерИтерации); + СтрокаЗамера.КоличествоОпераций = ВЧисло(УзелЗамер.КоличествоОпераций); + СтрокаЗамера.Наносекунд = ВЧисло(УзелЗамер.Наносекунд); + СтрокаЗамера.НаносекундЗаОперацию = ВЧисло(УзелЗамер.НаносекундЗаОперацию); + СтрокаЗамера.ВыделяемаяПамять = ВЧисло(УзелЗамер.ВыделяемаяПамять); + СтрокаЗамера.ВыделяемаяПамятьЗаОперацию = ВЧисло(УзелЗамер.ВыделяемаяПамятьЗаОперацию); + + КонецЦикла; + +КонецПроцедуры + +Функция ВЧисло(Значение) + Возврат XMLЗначение(Тип("Число"), Значение); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index e17b0ec..cefd206 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -4,7 +4,7 @@ Перем ВерсияБиблиотеки Экспорт; // Строка Перем ВерсияОС Экспорт; // Строка -Перем ВерсияПлатформы Экспорт; // Строка +Перем ВерсияИсполняющейСреды Экспорт; // Строка Перем ИнформацияОПроцессоре Экспорт; // см. ИнформацияОПроцессоре Процедура ПриСозданииОбъекта() @@ -13,7 +13,7 @@ СистемнаяИнформация = Новый СистемнаяИнформация(); ВерсияОС = СистемнаяИнформация.ВерсияОС; - ВерсияПлатформы = СистемнаяИнформация.Версия; + ВерсияИсполняющейСреды = СистемнаяИнформация.Версия; ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре(); @@ -21,7 +21,16 @@ Функция ВСтроку() Экспорт - Возврат СтрШаблон("BenchmarkOneScript v%1, OneScript v%2, %3 - |%4", ВерсияБиблиотеки, ВерсияПлатформы, ВерсияОС, ИнформацияОПроцессоре.ПолноеОписание()); + Процессор = ИнформацияОПроцессоре.ПолноеОписание(); + + Если ПустаяСтрока(ВерсияИсполняющейСреды) Тогда + Возврат СтрШаблон("BenchmarkOneScript v%1, %2 + |%3", ВерсияБиблиотеки, ВерсияОС, Процессор + ); + Иначе + Возврат СтрШаблон("BenchmarkOneScript v%1, OneScript v%2, %3 + |%4", ВерсияБиблиотеки, ВерсияИсполняющейСреды, ВерсияОС, Процессор + ); + КонецЕсли; КонецФункции diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index 70fdb24..d16f007 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -24,7 +24,7 @@ // Статистика бенчмарка // // Параметры: -// Замеры - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаЗамеров +// Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров // - Структура: // * ЗамерыВремени - Массив из Число // * ЗамерыПамяти - Массив из Число @@ -67,7 +67,7 @@ // Читает замеры и формирует статистику // // Параметры: -// Замеры - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаЗамеров +// Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров // - Структура: // * ЗамерыВремени - Массив из Число // * ЗамерыПамяти - Массив из Число diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Json.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Json.os" index 69f2848..6651e56 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Json.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Json.os" @@ -1,14 +1,4 @@ - -#Использовать logos - -Перем _Лог; // Лог - -// Экспортирует результаты бенчмарков в файл JSON -Процедура ПриСозданииОбъекта() - _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЭкспортерРезультатовБенчмарковВJson"); -КонецПроцедуры - -// Экспортирует результаты бенчмарков в файл JSON +// Экспортирует результаты бенчмарков в JSON-файл // // Параметры: // РезультатыБенчмарков - см. Бенчмаркинг.Запустить @@ -17,18 +7,8 @@ КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); - _Лог.Отладка("Начало формирования файла: %1", ПутьКФайлу); - - Данные = ЭкспортРезультатовБенчмарков.ПодготовитьРезультаты(РезультатыБенчмарков); - - ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); - - ЗаписьJSON = Новый ЗаписьJSON(); - ЗаписьJSON.ОткрытьФайл(ПутьКФайлу, "UTF-8", , ПараметрыЗаписиJSON); - ЗаписатьJSON(ЗаписьJSON, Данные); - ЗаписьJSON.Закрыть(); - - _Лог.Отладка("Завершение формирования файла: %1", ПутьКФайлу); + Сериализатор = Новый СериализаторРезультатовБенчмарков(); + Сериализатор.СериализоватьВJSON(РезультатыБенчмарков, ПутьКФайлу); КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os" index bc8a53e..9f9d369 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os" @@ -1,15 +1,4 @@ - -#Использовать xml-parser -#Использовать logos - -Перем _Лог; // Лог - -// Экспортирует результаты бенчмарков в файл XML -Процедура ПриСозданииОбъекта() - _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЭкспортерРезультатовБенчмарковВXml"); -КонецПроцедуры - -// Экспортирует результаты бенчмарков в файл XML +// Экспортирует результаты бенчмарков в XML-файл // // Параметры: // РезультатыБенчмарков - см. Бенчмаркинг.Запустить @@ -18,16 +7,8 @@ КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); - _Лог.Отладка("Начало формирования файла: %1", ПутьКФайлу); - - Данные = ЭкспортРезультатовБенчмарков.ПодготовитьРезультаты(РезультатыБенчмарков); - ПодготовитьМассивы(Данные); - Данные = Новый Структура("Отчет", Данные); - - ПроцессорXML = Новый СериализацияДанныхXML(Ложь); - ПроцессорXML.ЗаписатьВФайл(Данные, ПутьКФайлу, Истина); - - _Лог.Отладка("Завершение формирования файла: %1", ПутьКФайлу); + Сериализатор = Новый СериализаторРезультатовБенчмарков(); + Сериализатор.СериализоватьВXML(РезультатыБенчмарков, ПутьКФайлу); КонецПроцедуры @@ -37,14 +18,4 @@ // Строка Функция Расширение() Экспорт Возврат "xml"; -КонецФункции - -Процедура ПодготовитьМассивы(Данные) - - Для Каждого Бенчмарк Из Данные.Бенчмарки Цикл - Бенчмарк.Статистика.Значения = Новый Структура("Значение", Бенчмарк.Статистика.Значения); - КонецЦикла; - - Данные.Бенчмарки = Новый Структура("Бенчмарк", Данные.Бенчмарки); - -КонецПроцедуры \ No newline at end of file +КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" index 63a9318..f3266a1 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" @@ -8,10 +8,10 @@ // Запускает бенчмарки // // Параметры: -// Источник - Тип - Класс бенчмарков -// - КоллекцияДескрипторовБенчмарков -// - ДескрипторБенчмарка -// - Произвольный - Экземпляр класса бенчмарков +// ИсточникБенчмарков - Тип - Класс, содержащий бенчмарки +// - КоллекцияДескрипторовБенчмарков +// - ДескрипторБенчмарка +// - Произвольный - Экземпляр класса с бенчмарками // Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков // // Возвращаемое значение: @@ -19,13 +19,18 @@ // * ИмяКласса - Строка - Имя класса // * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // * Конфигурация - КонфигурацияБенчмарков -// * СредаОкружения - СредаОкруженияБенчмарков // * Отчет - ОтчетБенчмарков -// * РезультатыЗапусков - ТаблицаЗначений: +// * СредаОкружения - СредаОкруженияБенчмарков +// * Расшифровка - ТаблицаЗначений: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка -// ** Статистика - СтатистикаБенчмарка // ** Эталон - СтрокаТаблицыЗначений, Неопределено +// ** ЭтоЭталон - Булево +// ** Статистика - СтатистикаБенчмарка +// ** ИсполняющаяСреда - Структура: +// *** Версия - Строка +// *** Алиас - Строка +// *** Наименование - Строка // ** Замеры - ТаблицаЗначений: // *** Этап - см. ЭтапыБенчмарка // *** НомерИтерации - Число @@ -34,9 +39,9 @@ // *** НаносекундЗаОперацию - Число - Наносекунд за операцию // *** ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию // *** ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию -Функция Запустить(Источник, Конфигурация = Неопределено) Экспорт +Функция Запустить(ИсточникБенчмарков, Конфигурация = Неопределено) Экспорт - ЗапускательБенчмарков = Новый ЗапускательБенчмарков(Источник, Конфигурация); + ЗапускательБенчмарков = Новый ЗапускательБенчмарков(ИсточникБенчмарков, Конфигурация); Возврат ЗапускательБенчмарков.Запустить(); КонецФункции @@ -51,7 +56,8 @@ // // Возвращаемое значение: // ТаблицаЗначений: -// * Результат - см. Бенчмаркинг.Запустить, Неопределено +// * Результат - см. Бенчмаркинг.Запустить +// - Неопределено // * ИмяКласса - Строка - Имя класса // * ИмяФайла - Строка - Имя файла // * ПутьКФайлу - Строка - Путь к файлу сценария @@ -76,7 +82,6 @@ // Тип, Неопределено Функция ПодключитьКласс(ПутьКФайлу) Экспорт - Объект = Неопределено; ИмяКласса = ИмяКлассаИзСтроки(Новый Файл(ПутьКФайлу).ИмяБезРасширения); Если СценарийПодключенПоИмени(ИмяКласса) Тогда @@ -103,6 +108,10 @@ КонецФункции +Функция ЭтоВоркер() Экспорт + Возврат ПолучитьПеременнуюСреды("BENCHMARK_WORKER") = "1"; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index eb12ae0..fc08226 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -6,19 +6,13 @@ // Извлекает дескрипторы бенчмарков // // Параметры: -// Источник - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков // НаборДескрипторов - КоллекцияДескрипторовБенчмарков - Коллекция, в которую будут добавлены извлеченные // дескрипторы бенчмарков // // Возвращаемое значение: // КоллекцияДескрипторовБенчмарков -Функция Извлечь(Источник, НаборДескрипторов = Неопределено) Экспорт - - Если ТипЗнч(Источник) = Тип("Тип") Тогда - Объект = Новый(Источник); - Иначе - Объект = Источник; - КонецЕсли; +Функция Извлечь(ИсточникБенчмарков, НаборДескрипторов = Неопределено) Экспорт Если НаборДескрипторов = Неопределено Тогда Набор = Новый КоллекцияДескрипторовБенчмарков(); @@ -26,12 +20,12 @@ Набор = НаборДескрипторов; КонецЕсли; - РефлекторОбъекта = Новый РефлекторОбъекта(Объект); + РефлекторОбъекта = Новый РефлекторОбъекта(ИсточникБенчмарков); ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов("Бенчмарк"); Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл - ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Объект, СвойстваМетода.Имя); + ДескрипторБенчмарка = Новый ДескрипторБенчмарка(ИсточникБенчмарков, СвойстваМетода.Имя); ПрочитатьАннотациюЭталон(СвойстваМетода, ДескрипторБенчмарка); ПрочитатьАннотациюКатегория(СвойстваМетода, ДескрипторБенчмарка); diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 10f2fbe..20e6cdb 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -5,26 +5,20 @@ // Извлекает конфигурацию бенчмарков // // Параметры: -// Источник - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков // Конфигурация - КонфигурацияБенчмарков - Конфигурация, в которую будут записаны данные // // Возвращаемое значение: // КонфигурацияБенчмарков -Функция Извлечь(Источник, Конфигурация = Неопределено) Экспорт +Функция Извлечь(ИсточникБенчмарков, Конфигурация = Неопределено) Экспорт - Если ТипЗнч(Источник) = Тип("Тип") Тогда - Объект = Новый(Источник); - Иначе - Объект = Источник; - КонецЕсли; - Если Конфигурация = Неопределено Тогда КонфигурацияБенчмарков = Новый КонфигурацияБенчмарков(); Иначе КонфигурацияБенчмарков = Конфигурация; КонецЕсли; - РефлекторОбъекта = Новый РефлекторОбъекта(Объект); + РефлекторОбъекта = Новый РефлекторОбъекта(ИсточникБенчмарков); ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь); ТаблицаСвойств = РефлекторОбъекта.ПолучитьТаблицуСвойств(); @@ -45,6 +39,7 @@ ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, Конфигурация); ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, Конфигурация); ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, Конфигурация); + ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, Конфигурация); КонецЕсли; Для Каждого СвойстваПоля Из ТаблицаСвойств Цикл @@ -285,4 +280,33 @@ КонецПроцедуры +Процедура ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, Конфигурация) + + Аннотации = РаботаСАннотациями.ПолучитьАннотации(СвойстваКонструктора, "ИсполняющаяСреда"); + + Для Каждого Аннотация Из Аннотации Цикл + + // &ИсполняющаяСреда("stable") + // &ИсполняющаяСреда("stable, dev") + Значения = РаботаСАннотациями.ПолучитьЗначенияПараметровАннотации(Аннотация, "Значение"); + + Для Каждого Значение Из Значения Цикл + ВерсииСреды = СтрРазделить(Значение, ", ", Ложь); + Для Каждого Версия Из ВерсииСреды Цикл + Конфигурация.ДобавитьВерсиюИсполняющейСреды(Версия); + КонецЦикла; + КонецЦикла; + + // &ИсполняющаяСреда(Версия = "stable", Наименование = "Стабильная", ЭтоЭталон = Ложь) // BSLLS:CommentedCode-off + Версия = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация, "Версия", , Истина); + Если Не Версия = Неопределено Тогда + Наименование = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация, "Наименование", "", Истина); + ЭтоЭталон = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация, "ЭтоЭталон", Ложь, Истина); + Конфигурация.ДобавитьВерсиюИсполняющейСреды(Версия, Наименование, ЭтоЭталон); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" new file mode 100644 index 0000000..98b0ad2 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,72 @@ +#Использовать fs + +// Поиск исполняемого файла OneScript в системе с учетом версии +// +// Параметры: +// Версия - Строка - Версия OneScript (например: "1.9.3", "dev") +// +// Возвращаемое значение: +// Строка, Неопределено +Функция НайтиИсполняемыйФайл(Версия) Экспорт + + КаталогУстановки = КаталогУстановки(); + Если Не ЗначениеЗаполнено(КаталогУстановки) Тогда + Возврат Неопределено; + КонецЕсли; + + КаталогBin = ОбъединитьПути(КаталогУстановки, Версия, "bin"); + + Если ЭтоWindows() Тогда + ИмяФайла = ОбъединитьПути(КаталогBin, "oscript.exe"); + Иначе + ИмяФайла = ОбъединитьПути(КаталогBin, "oscript"); + КонецЕсли; + + Если ФС.ФайлСуществует(ИмяФайла) Тогда + Возврат ИмяФайла; + КонецЕсли; + +КонецФункции + +// Определяет каталог установленных версий OneScript +// +// Возвращаемое значение: +// Строка, Неопределено +Функция КаталогУстановки() Экспорт + + КаталогOVM = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH"); + Если Не ЗначениеЗаполнено(КаталогOVM) Тогда + СистемнаяИнформация = Новый СистемнаяИнформация(); + КаталогOVM = ОбъединитьПути( + СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений), + "ovm" + ); + КонецЕсли; + + Если ФС.КаталогСуществует(КаталогOVM) Тогда + Возврат КаталогOVM; + КонецЕсли; + +КонецФункции + +// Получает системный каталог для хранения библиотек +// +// Возвращаемое значение: +// Строка +Функция КаталогБиблиотек() Экспорт + Возврат ПолучитьЗначениеСистемнойНастройки("lib.system"); +КонецФункции + +// Определяет, является ли текущая ОС Windows +// +// Возвращаемое значение: +// Булево +Функция ЭтоWindows() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ТекущаяПлатформа = СистемнаяИнформация.ТипПлатформы; + + Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + +КонецФункции diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 65373a8..996e0d7 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -18,6 +18,7 @@ Перем Мин Экспорт; // Строка Перем Макс Экспорт; // Строка Перем Процентиль Экспорт; // Строка +Перем ВерсияИсполняющейСреды Экспорт; // Строка Функция СоздатьМетод() Экспорт Возврат КолонкаОтчетаБенчмарковМетод.Создать(); @@ -95,6 +96,10 @@ Возврат КолонкаОтчетаБенчмарковПараметр.ИмяКолонки(ИмяПараметра); КонецФункции +Функция СоздатьВерсияИсполняющейСреды() Экспорт + Возврат КолонкаОтчетаБенчмарковВерсияИсполняющейСреды.Создать(); +КонецФункции + Метод = "Метод"; Среднее = "Среднее"; СтандартноеОтклонение = "СтандартноеОтклонение"; @@ -110,4 +115,5 @@ RatioSD = "RatioSD"; ВыделяемаяПамять = "ВыделяемаяПамять"; Мин = "Мин"; Макс = "Макс"; -Процентиль = "Процентиль"; \ No newline at end of file +Процентиль = "Процентиль"; +ВерсияИсполняющейСреды = "ВерсияИсполняющейСреды"; \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\222\321\213\320\262\320\276\320\264\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\265\321\200\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\222\321\213\320\262\320\276\320\264\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\265\321\200\320\260.os" new file mode 100644 index 0000000..894b1c3 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\222\321\213\320\262\320\276\320\264\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\265\321\200\320\260.os" @@ -0,0 +1,56 @@ +#Использовать coloratos + +#Область ПрограммныйИнтерфейс + +// Выводит текст с автоматическим переводом строки и поддержкой цветового форматирования. +// +// Параметры: +// Текст - Строка - Выводимый текст +// Цвет - Строка - Цвет текста +Процедура ВывестиСтроку(Текст, Цвет = Неопределено) Экспорт + + Если Бенчмаркинг.ЭтоВоркер() И Не Цвет = Неопределено Тогда + ЦветнойВывод.ВывестиСтроку(ТекстСЦветом(Текст, Цвет)); + Иначе + ЦветнойВывод.ВывестиСтроку(ПодготовитьТекст(Текст), Цвет); + КонецЕсли; + +КонецПроцедуры + +// Выводит текст без перевода строки с поддержкой цветового форматирования. +// +// Параметры: +// Текст - Строка - Выводимый текст +// Цвет - Строка - Цвет текста +Процедура Вывести(Текст, Цвет = Неопределено) Экспорт + + Если Бенчмаркинг.ЭтоВоркер() И Не Цвет = Неопределено Тогда + ЦветнойВывод.Вывести(ТекстСЦветом(Текст, Цвет)); + Иначе + ЦветнойВывод.Вывести(ПодготовитьТекст(Текст), Цвет); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПодготовитьТекст(Знач Текст) + Возврат СтрЗаменить(Текст, "|!#color=", "|#color="); +КонецФункции + +Функция ТекстСЦветом(Текст, Цвет) + + Шаблон = "(%1|!#color=%2)"; + МассивСтрок = СтрРазделить(Текст, Символы.ПС); + + Для Инд = 0 По МассивСтрок.ВГраница() Цикл + МассивСтрок[Инд] = СтрШаблон(Шаблон, МассивСтрок[Инд], Цвет); + КонецЦикла; + + Возврат СтрСоединить(МассивСтрок, Символы.ПС); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index e532daa..024e375 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -69,11 +69,13 @@ Функция Квартили(УпорядоченныеЗначения) Экспорт Квартили = Новый Структура(); + // BSLLS:MagicNumber-off Квартили.Вставить("Q0", Квантиль(УпорядоченныеЗначения, 0)); Квартили.Вставить("Q1", Квантиль(УпорядоченныеЗначения, 0.25)); Квартили.Вставить("Q2", Квантиль(УпорядоченныеЗначения, 0.5)); Квартили.Вставить("Q3", Квантиль(УпорядоченныеЗначения, 0.75)); Квартили.Вставить("Q4", Квантиль(УпорядоченныеЗначения, 1)); + // BSLLS:MagicNumber-on Возврат Квартили; diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 9e0e40e..4615001 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -11,7 +11,7 @@ ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда Представление = ПредставлениеБулево(Значение); Иначе - Представление = Строка(Значение); + Представление = Строка(СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Значение)); КонецЕсли; Если Не ЕдиницаИзмерения = Неопределено И ДополнитьЕдиницейИзмерения Тогда diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" new file mode 100644 index 0000000..0f6d80d --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" @@ -0,0 +1,64 @@ +Перем _СериализуемыеТипы; // Неопределено, Соответствие + +#Область ПрограммныйИнтерфейс + +// Подготавливает значение для безопасной сериализации или вывода. +// +// Параметры: +// Значение - Произвольный - Любое значение для обработки +// +// Возвращаемое значение: +// Произвольный - Обработанное значение по правилам: +// 1. Для сериализуемых типов (число, строка, булево и др.) - исходное значение +// 2. Для несериализуемых типов: +// а) Если строковое представление совпадает с именем типа - "Тип@ХешКод" +// б) Иначе - обычное строковое представление +Функция ПодготовитьЗначение(Значение) Экспорт + + Если ЗначениеСериализуется(Значение) Тогда + Возврат Значение; + КонецЕсли; + + Представление = Строка(Значение); + Тип = ТипЗнч(Значение); + Если Представление = Строка(Тип) Тогда + Представление = СтрШаблон("%1@%2", Тип, Новый РасширениеОбъекта(Значение).ХешКод); + КонецЕсли; + + Возврат Представление; + +КонецФункции + +// Проверяет, относится ли значение к сериализуемым типам данных +// +// Параметры: +// Значение - Произвольный - Проверяемое значение +// +// Возвращаемое значение: +// Булево +Функция ЗначениеСериализуется(Значение) Экспорт + Возврат СериализуемыеТипы()[ТипЗнч(Значение)] = Истина; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция СериализуемыеТипы() + + Если Не _СериализуемыеТипы = Неопределено Тогда + Возврат _СериализуемыеТипы; + КонецЕсли; + + _СериализуемыеТипы = Новый Соответствие(); + _СериализуемыеТипы.Вставить(Тип("Число"), Истина); + _СериализуемыеТипы.Вставить(Тип("Строка"), Истина); + _СериализуемыеТипы.Вставить(Тип("Булево"), Истина); + _СериализуемыеТипы.Вставить(Тип("Дата"), Истина); + _СериализуемыеТипы.Вставить(Тип("Неопределено"), Истина); + + Возврат _СериализуемыеТипы; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" deleted file mode 100644 index ddd7734..0000000 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ /dev/null @@ -1,77 +0,0 @@ -Функция ПодготовитьРезультаты(РезультатыБенчмарков) Экспорт - - ИнформацияОПроцессоре = РезультатыБенчмарков.СредаОкружения.ИнформацияОПроцессоре; - - УзелСредаОкружения = Новый Структура(); - УзелСредаОкружения.Вставить("ВерсияBenchmarkOneScript", РезультатыБенчмарков.СредаОкружения.ВерсияБиблиотеки); - УзелСредаОкружения.Вставить("ВерсияOneScript", РезультатыБенчмарков.СредаОкружения.ВерсияПлатформы); - УзелСредаОкружения.Вставить("ВерсияОС", РезультатыБенчмарков.СредаОкружения.ВерсияОС); - УзелСредаОкружения.Вставить("ИмяПроцессора", ИнформацияОПроцессоре.ИмяПроцессора); - УзелСредаОкружения.Вставить("КоличествоПроцессоров", ИнформацияОПроцессоре.КоличествоПроцессоров); - УзелСредаОкружения.Вставить("КоличествоЯдер", ИнформацияОПроцессоре.КоличествоЯдер); - УзелСредаОкружения.Вставить("КоличествоЛогическихПроцессоров", ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров); - - УзелБенчмарки = Новый Массив(); - - Для Каждого РезультатЗапуска Из РезультатыБенчмарков.РезультатыЗапусков Цикл - - УзелБенчмарк = Новый Структура(); - УзелБенчмарк.Вставить("Тип", Строка(РезультатЗапуска.ДескрипторБенчмарка.ТипОбъекта())); - УзелБенчмарк.Вставить("Метод", РезультатЗапуска.ДескрипторБенчмарка.Метод()); - УзелБенчмарк.Вставить("Категория", РезультатЗапуска.ДескрипторБенчмарка.Категория()); - УзелБенчмарк.Вставить("Эталон", РезультатЗапуска.ДескрипторБенчмарка.ЭтоЭталон()); - УзелБенчмарк.Вставить("Параметры", Новый Структура()); - УзелБенчмарк.Вставить("Статистика", Новый Структура()); - - Статистика = РезультатЗапуска.Статистика; - УзелБенчмарк.Статистика.Вставить("Значения", Новый Массив()); - УзелБенчмарк.Статистика.Вставить("Количество", 0); - УзелБенчмарк.Статистика.Вставить("Мин", Статистика.Мин); - УзелБенчмарк.Статистика.Вставить("Q1", Статистика.НижнийКвартиль); - УзелБенчмарк.Статистика.Вставить("Медиана", Статистика.Медиана); - УзелБенчмарк.Статистика.Вставить("Среднее", Статистика.Среднее); - УзелБенчмарк.Статистика.Вставить("Q3", Статистика.ВерхнийКвартиль); - УзелБенчмарк.Статистика.Вставить("Макс", Статистика.Макс); - УзелБенчмарк.Статистика.Вставить("СтандартноеОтклонение", Статистика.СтандартноеОтклонение); - УзелБенчмарк.Статистика.Вставить("СтандартнаяОшибкаСреднего", Статистика.СтандартнаяОшибкаСреднего); - УзелБенчмарк.Статистика.Вставить("ОперацийВСекунду", Статистика.ОперацийВСекунду); - УзелБенчмарк.Статистика.Вставить("Процентили", Новый Структура()); - - // BSLLS:MagicNumber-off - УзелБенчмарк.Статистика.Процентили.Вставить("P0", Статистика.Квантиль(0)); - УзелБенчмарк.Статистика.Процентили.Вставить("P25", Статистика.Квантиль(0.25)); - УзелБенчмарк.Статистика.Процентили.Вставить("P50", Статистика.Квантиль(0.5)); - УзелБенчмарк.Статистика.Процентили.Вставить("P67", Статистика.Квантиль(0.67)); - УзелБенчмарк.Статистика.Процентили.Вставить("P80", Статистика.Квантиль(0.8)); - УзелБенчмарк.Статистика.Процентили.Вставить("P85", Статистика.Квантиль(0.85)); - УзелБенчмарк.Статистика.Процентили.Вставить("P90", Статистика.Квантиль(0.90)); - УзелБенчмарк.Статистика.Процентили.Вставить("P95", Статистика.Квантиль(0.95)); - УзелБенчмарк.Статистика.Процентили.Вставить("P100", Статистика.Квантиль(1)); - // BSLLS:MagicNumber-on - - УзелБенчмарк.Статистика.Вставить("Память", Новый Структура()); - УзелБенчмарк.Статистика.Память.Вставить("ВыделяемаяЗаОперацию", Статистика.ВыделяемаяПамять); - - Для Каждого Замер Из РезультатЗапуска.Замеры Цикл - Если Замер.Этап = ЭтапыБенчмарка.Измерение Тогда - УзелБенчмарк.Статистика.Значения.Добавить(Замер.НаносекундЗаОперацию); - КонецЕсли; - КонецЦикла; - - УзелБенчмарк.Статистика.Количество = УзелБенчмарк.Статистика.Значения.Количество(); - - Для Каждого Параметр Из РезультатЗапуска.Параметры Цикл - УзелБенчмарк.Параметры.Вставить(Параметр.Имя, Параметр.Значение); - КонецЦикла; - - УзелБенчмарки.Добавить(УзелБенчмарк); - - КонецЦикла; - - Данные = Новый Структура(); - Данные.Вставить("СредаОкружения", УзелСредаОкружения); - Данные.Вставить("Бенчмарки", УзелБенчмарки); - - Возврат Данные; - -КонецФункции \ No newline at end of file diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg index 2303418..745ac9b 100644 --- a/tasks/oscript.cfg +++ b/tasks/oscript.cfg @@ -1 +1,2 @@ -lib.system=../oscript_modules \ No newline at end of file +lib.system = ../oscript_modules +systemlanguage = ru \ No newline at end of file diff --git a/tests/fixtures/verified-report.html b/tests/fixtures/verified-report.html index 0e0d211..5a9de89 100644 --- a/tests/fixtures/verified-report.html +++ b/tests/fixtures/verified-report.html @@ -11,7 +11,7 @@ -
BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0.0-mock, Microsoft Windows NT 10.0.x.mock
+
BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock
 MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores
@@ -20,6 +20,9 @@ Method + + + + + + + + + +
+Значение + Mean @@ -36,7 +39,30 @@
-Бенчмарк +БенчмаркПервый + +100 + +1.0 ms + +0.0 ns + +0.0 ns + +1,000 +
+БенчмаркВторой + +100 1.0 ms diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json index df86fc1..8805735 100644 --- a/tests/fixtures/verified-report.json +++ b/tests/fixtures/verified-report.json @@ -1,8 +1,8 @@ { "СредаОкружения": { "ВерсияBenchmarkOneScript": "0.1.x-mock", - "ВерсияOneScript": "2.0.0.0-mock", "ВерсияОС": "Microsoft Windows NT 10.0.x.mock", + "ВерсияИсполняющейСреды": "2.0.0-mock", "ИмяПроцессора": "MockIntel Core i7-6700HQ CPU 2.60GHz", "КоличествоПроцессоров": 1, "КоличествоЯдер": 4, @@ -10,16 +10,32 @@ }, "Бенчмарки": [ { - "Тип": "ПустойБенчмарк", - "Метод": "Бенчмарк", + "Тип": "ДваБенчмаркаИПоле", + "Метод": "БенчмаркПервый", "Категория": "", - "Эталон": false, - "Параметры": {}, + "ЭтоЭталон": false, + "ИсполняющаяСреда": { + "Версия": "", + "Алиас": "", + "Наименование": "" + }, + "Параметры": { + "Значение": 100 + }, "Статистика": { "Значения": [ + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, 1000000 ], - "Количество": 1, + "Количество": 10, "Мин": 1000000, "Q1": 1000000, "Медиана": 1000000, @@ -43,7 +59,243 @@ "Память": { "ВыделяемаяЗаОперацию": 0 } - } + }, + "Замеры": [ + { + "Этап": "Измерение", + "НомерИтерации": 1, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 2, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 3, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 4, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 5, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 6, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 7, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 8, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 9, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 10, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + } + ] + }, + { + "Тип": "ДваБенчмаркаИПоле", + "Метод": "БенчмаркВторой", + "Категория": "", + "ЭтоЭталон": false, + "ИсполняющаяСреда": { + "Версия": "", + "Алиас": "", + "Наименование": "" + }, + "Параметры": { + "Значение": 100 + }, + "Статистика": { + "Значения": [ + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000, + 1000000 + ], + "Количество": 10, + "Мин": 1000000, + "Q1": 1000000, + "Медиана": 1000000, + "Среднее": 1000000, + "Q3": 1000000, + "Макс": 1000000, + "СтандартноеОтклонение": 0, + "СтандартнаяОшибкаСреднего": 0, + "ОперацийВСекунду": 1000, + "Процентили": { + "P0": 1000000, + "P25": 1000000, + "P50": 1000000, + "P67": 1000000, + "P80": 1000000, + "P85": 1000000, + "P90": 1000000, + "P95": 1000000, + "P100": 1000000 + }, + "Память": { + "ВыделяемаяЗаОперацию": 0 + } + }, + "Замеры": [ + { + "Этап": "Измерение", + "НомерИтерации": 1, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 2, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 3, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 4, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 5, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 6, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 7, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 8, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 9, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + }, + { + "Этап": "Измерение", + "НомерИтерации": 10, + "КоличествоОпераций": 1, + "Наносекунд": 1000000, + "НаносекундЗаОперацию": 1000000, + "ВыделяемаяПамять": 0, + "ВыделяемаяПамятьЗаОперацию": 0 + } + ] } ] } \ No newline at end of file diff --git a/tests/fixtures/verified-report.md b/tests/fixtures/verified-report.md index 6bb66e2..046dc30 100644 --- a/tests/fixtures/verified-report.md +++ b/tests/fixtures/verified-report.md @@ -1,6 +1,7 @@ -BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0.0-mock, Microsoft Windows NT 10.0.x.mock +BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores -| Method | Mean | StdErr | StdDev | Op/s | -|----------|-------:|-------:|-------:|------:| -| Бенчмарк | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 | +| Method | Значение | Mean | StdErr | StdDev | Op/s | +|----------------|---------:|-------:|-------:|-------:|------:| +| БенчмаркПервый | 100 | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 | +| БенчмаркВторой | 100 | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 | diff --git a/tests/fixtures/verified-report.xml b/tests/fixtures/verified-report.xml index 0d67b3c..88dd0af 100644 --- a/tests/fixtures/verified-report.xml +++ b/tests/fixtures/verified-report.xml @@ -2,8 +2,8 @@ <Отчет> <СредаОкружения> <ВерсияBenchmarkOneScript>0.1.x-mock - <ВерсияOneScript>2.0.0.0-mock <ВерсияОС>Microsoft Windows NT 10.0.x.mock + <ВерсияИсполняющейСреды>2.0.0-mock <ИмяПроцессора>MockIntel Core i7-6700HQ CPU 2.60GHz <КоличествоПроцессоров>1 <КоличествоЯдер>4 @@ -11,16 +11,176 @@ <Бенчмарки> <Бенчмарк> - <Тип>ПустойБенчмарк - <Метод>Бенчмарк + <Тип>ДваБенчмаркаИПоле + <Метод>БенчмаркПервый <Категория/> - <Эталон>false - <Параметры/> + <ЭтоЭталон>false + <ИсполняющаяСреда> + <Версия/> + <Алиас/> + <Наименование/> + + <Параметры> + <Значение>100 + <Статистика> <Значения> <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + + <Количество>10 + <Мин>1000000 + 1000000 + <Медиана>1000000 + <Среднее>1000000 + 1000000 + <Макс>1000000 + <СтандартноеОтклонение/> + <СтандартнаяОшибкаСреднего/> + <ОперацийВСекунду>1000 + <Процентили> + 1000000 + 1000000 + 1000000 + 1000000 + 1000000 + 1000000 + 1000000 + 1000000 + 1000000 + + <Память> + <ВыделяемаяЗаОперацию/> + + + <Замеры> + <Замер> + <Этап>Измерение + <НомерИтерации>1 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>2 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>3 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>4 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>5 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>6 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>7 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>8 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>9 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>10 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + + + <Бенчмарк> + <Тип>ДваБенчмаркаИПоле + <Метод>БенчмаркВторой + <Категория/> + <ЭтоЭталон>false + <ИсполняющаяСреда> + <Версия/> + <Алиас/> + <Наименование/> + + <Параметры> + <Значение>100 + + <Статистика> + <Значения> + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 + <Значение>1000000 - <Количество>1 + <Количество>10 <Мин>1000000 1000000 <Медиана>1000000 @@ -45,6 +205,98 @@ <ВыделяемаяЗаОперацию/> + <Замеры> + <Замер> + <Этап>Измерение + <НомерИтерации>1 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>2 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>3 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>4 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>5 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>6 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>7 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>8 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>9 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + <Замер> + <Этап>Измерение + <НомерИтерации>10 + <КоличествоОпераций>1 + <Наносекунд>1000000 + <НаносекундЗаОперацию>1000000 + <ВыделяемаяПамять/> + <ВыделяемаяПамятьЗаОперацию/> + + \ No newline at end of file diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" similarity index 78% rename from "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" rename to "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index 98f2f7c..21adc48 100644 --- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" +++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -1,3 +1,6 @@ +&Параметры(100, 200) +Перем ОбщееЗначение Экспорт; + &СтратегияХолодныйЗапуск &СортировкаОтБыстрыхКМедленным &МониторингПамяти @@ -11,6 +14,11 @@ &ЭкспортJson &ЭкспортXml &ЭкспортHtml +&ИсполняющаяСреда("stable") +&ИсполняющаяСреда("1.9.3, 1.9.4") +&ИсполняющаяСреда(Версия = "2.0.0", Наименование = "Новая", ЭтоЭталон = Истина) +&КолонкаМин +&КолонкаМакс Процедура ПриСозданииОбъекта() КонецПроцедуры diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" index b44c952..09d6904 100644 --- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" +++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" @@ -19,7 +19,7 @@ ДескрипторыБенчмарков = Контекст.ДескрипторыБенчмарков; Конфигурация = Контекст.Конфигурация; - РезультатыЗапусков = Контекст.РезультатыЗапусков; + Расшифровка = Контекст.Расшифровка; Отчет = Контекст.Отчет; СредаОкружения = Контекст.СредаОкружения; diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\234\320\265\321\202\320\276\320\264\320\260\320\230\320\237\320\276\320\273\321\217.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\234\320\265\321\202\320\276\320\264\320\260\320\230\320\237\320\276\320\273\321\217.os" index 18c7734..e8fcd94 100644 --- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\234\320\265\321\202\320\276\320\264\320\260\320\230\320\237\320\276\320\273\321\217.os" +++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\234\320\265\321\202\320\276\320\264\320\260\320\230\320\237\320\276\320\273\321\217.os" @@ -1,8 +1,8 @@ &Параметры(1, 2) -Перем Значение Экспорт; +Перем ПолеОбщее Экспорт; &Бенчмарк -&Параметры(3) -&Параметры(4) -Процедура Бенчмарк(Парам) Экспорт +&Параметры(3, 4) +&Параметры(5, 6) +Процедура Бенчмарк(Парам1, Парам2) Экспорт КонецПроцедуры \ No newline at end of file diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274\320\230\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274\320\230\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270.os" similarity index 100% rename from "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274\320\230\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270.os" rename to "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274\320\230\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270.os" diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" new file mode 100644 index 0000000..2d39e9a --- /dev/null +++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" @@ -0,0 +1,10 @@ +&Параметры(100) +Перем Значение Экспорт; + +&Бенчмарк +Процедура БенчмаркПервый() Экспорт +КонецПроцедуры + +&Бенчмарк +Процедура БенчмаркВторой() Экспорт +КонецПроцедуры \ No newline at end of file diff --git "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 6dabeb7..edca2e2 100644 --- "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,5 +1,9 @@ #Использовать "../../.." #Использовать "../../fixtures" +#Использовать fs +#Использовать 1commands + +Перем _Лог; // Лог Функция КонфигурацияПоУмолчанию() Экспорт @@ -52,7 +56,7 @@ Контекст.СредаОкружения.ВерсияБиблиотеки = "0.1.x-mock"; Контекст.СредаОкружения.ВерсияОС = "Microsoft Windows NT 10.0.x.mock"; - Контекст.СредаОкружения.ВерсияПлатформы = "2.0.0.0-mock"; + Контекст.СредаОкружения.ВерсияИсполняющейСреды = "2.0.0-mock"; Контекст.СредаОкружения.ИнформацияОПроцессоре.ИмяПроцессора = "MockIntel Core i7-6700HQ CPU 2.60GHz"; Контекст.СредаОкружения.ИнформацияОПроцессоре.КоличествоПроцессоров = 1; Контекст.СредаОкружения.ИнформацияОПроцессоре.КоличествоЯдер = 4; @@ -62,9 +66,58 @@ ПостроительОтчета = Новый ПостроительОтчетаБенчмарков( Контекст.ДескрипторыБенчмарков, Контекст.Конфигурация, - Контекст.РезультатыЗапусков + Контекст.Расшифровка ); Контекст.Отчет = ПостроительОтчета.Сформировать(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +Процедура ПодготовитьСреду(ВерсииИсполняющейСреды) Экспорт + + ПроверитьУстановитьВерсииИсполняющейСреды(ВерсииИсполняющейСреды); + +КонецПроцедуры + +Процедура ПроверитьУстановитьВерсииИсполняющейСреды(Версии) + + КаталогУстановки = ИсполняющаяСредаБенчмарков.КаталогУстановки(); + Если КаталогУстановки = Неопределено Тогда + ВызватьИсключение "Не найден каталог с установленными версиями OneScript. + |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно."; + КонецЕсли; + + _Лог.Отладка(СтрШаблон("Каталог с установленными версиями OneScript: %1", КаталогУстановки)); + _Лог.Отладка(СтрШаблон("Проверка установленных версий: %1", Версии)); + + Для Каждого Версия Из СтрРазделить(Версии, ", ") Цикл + + ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + Если Не ИмяФайла = Неопределено Тогда + _Лог.Отладка(СтрШаблон("Обнаружена исполняющая среда OneScript версии %1: %2", Версия, ИмяФайла)); + Продолжить; + КонецЕсли; + + Команда = Новый Команда(); + Команда.УстановитьКоманду("ovm"); + Команда.ДобавитьПараметр("install"); + Команда.ДобавитьПараметр(Версия); + + КодВозврата = Команда.Исполнить(); + Если КодВозврата <> 0 Тогда + ТекстОшибки = СтрШаблон("Не удалось установить OneScript версии %1 через OVM (OneScript Version Manager)", Версия); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + Если ИмяФайла = Неопределено Тогда + ВызватьИсключение СтрШаблон("После установки OneScript версии %1 не удалось найти исполняемый файл", Версия); + КонецЕсли; + + _Лог.Отладка(СтрШаблон("Установлена исполняющая среда OneScript версии %1: %2", Версия, ИмяФайла)); + + КонецЦикла; + +КонецПроцедуры + +_Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ТестированиеБенчмарков"); \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index e210a6f..44b796c 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -5,8 +5,21 @@ #Использовать fluent #Использовать delegate #Использовать fs +#Использовать tempfiles #Использовать "helpers" +Перем МенеджерВременныхФайлов; // МенеджерВременныхФайлов + +&Инициализация +Процедура ПередВсеми() Экспорт + МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); +КонецПроцедуры + +&Завершение +Процедура ПослеВсех() Экспорт + МенеджерВременныхФайлов.Удалить(); +КонецПроцедуры + &После Процедура ПослеЗапускаТеста() Экспорт @@ -90,7 +103,7 @@ КонецПроцедуры &Тест -Процедура Тест_ЗапретЗапускаСРазнымиТипамиОбъектов() Экспорт +Процедура Тест_ДолженПроверитьЗапретЗапускаСРазнымиТипамиОбъектов() Экспорт Коллекция1 = Новый КоллекцияДескрипторовБенчмарков(Тип("БенчмаркСПараметрамиМетода")); Коллекция2 = Новый КоллекцияДескрипторовБенчмарков(Тип("БенчмаркиПоКатегориям")); @@ -105,7 +118,23 @@ Ожидаем .Что(Бенчмаркинг) .Метод("Запустить", ПараметрыМетода) - .ВыбрасываетИсключение("Не поддерживается запуск с разными типами объектов бенчмарков"); + .ВыбрасываетИсключение("Запрещается запускать бенчмарки с разными типами"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженЗапуститьБенчмаркЧерезДескриптор() Экспорт + + Тип = Тип("ПустойБенчмарк"); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.ПолучитьПервый(); + + Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию(); + Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); + + Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); + Ожидаем.Что(Результат.Расшифровка).Заполнено(); КонецПроцедуры @@ -126,7 +155,7 @@ КонецПроцедуры &Тест -Процедура Тест_ПараметрыМетодаИПоляИзАннотаций() Экспорт +Процедура Тест_ДолженПроверитьПараметрыМетодаИПоляИзАннотаций() Экспорт Тип = Тип("БенчмаркСПараметрамиМетодаИПоля"); @@ -136,14 +165,18 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(4); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Значение")]).Равно(1); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(3); - Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Значение")]).Равно(1); - Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(4); - Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Значение")]).Равно(2); - Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(3); - Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Значение")]).Равно(2); - Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(4); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("ПолеОбщее")]).Равно(1); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(3); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(4); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("ПолеОбщее")]).Равно(1); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(5); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(6); + Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("ПолеОбщее")]).Равно(2); + Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(3); + Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(4); + Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("ПолеОбщее")]).Равно(2); + Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(5); + Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(6); КонецПроцедуры @@ -214,174 +247,6 @@ КонецПроцедуры -&Тест -Процедура Тест_ОпределениеЭталонаПоАннотации() Экспорт - - Тип = Тип("БенчмаркиСЭталоном"); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - - Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоЛожь(); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Заполнено(); - Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); - Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1); - -КонецПроцедуры - -&Тест -Процедура Тест_УстановкаЭталона() Экспорт - - Тип = Тип("ПустойБенчмарк"); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); - ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ИспользоватьКакЭталон(); - - Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация); - - Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(1); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1); - -КонецПроцедуры - -&Тест -Процедура Тест_УстановкаЭталонаВКаждойКатегории() Экспорт - - Тип = Тип("БенчмаркиПоКатегориям"); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); - ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркА1").ИспользоватьКакЭталон(); - ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркБ1").ИспользоватьКакЭталон(); - - ПараметрыМетода = Новый Массив(); - ПараметрыМетода.Добавить(Тип); - ПараметрыМетода.Добавить(Конфигурация); - ПараметрыМетода.Добавить(ДескрипторыБенчмарков); - - Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация); - - Таблица = Результат.Отчет.Таблица; - СтрокаА1 = Таблица.Найти("БенчмаркА1", КолонкиОтчетаБенчмарков.Метод); - СтрокаБ1 = Таблица.Найти("БенчмаркБ1", КолонкиОтчетаБенчмарков.Метод); - - Ожидаем.Что(СтрокаА1[КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); - Ожидаем.Что(СтрокаБ1[КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); - -КонецПроцедуры - -&Тест -Процедура Тест_ЗапретБолееОдногоЭталона() Экспорт - - Тип = Тип("БенчмаркиСЭталоном"); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); - ДескрипторыБенчмарков.Получить(0).ИспользоватьКакЭталон(); - ДескрипторыБенчмарков.Получить(1).ИспользоватьКакЭталон(); - - ПараметрыМетода = Новый Массив(); - ПараметрыМетода.Добавить(ДескрипторыБенчмарков); - ПараметрыМетода.Добавить(Конфигурация); - - Ожидаем - .Что(Бенчмаркинг) - .Метод("Запустить", ПараметрыМетода) - .ВыбрасываетИсключение("Может быть только один эталонный бенчмарк в пределах категории"); - -КонецПроцедуры - -&Тест -Процедура Тест_ЗапретБолееОдногоЭталонаПоКатегории() Экспорт - - Тип = Тип("БенчмаркиПоКатегориям"); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); - ДескрипторыБенчмарков.Получить(0).ИспользоватьКакЭталон(); // А1 - ДескрипторыБенчмарков.Получить(1).ИспользоватьКакЭталон(); // А2 - - ПараметрыМетода = Новый Массив(); - ПараметрыМетода.Добавить(ДескрипторыБенчмарков); - ПараметрыМетода.Добавить(Конфигурация); - - Ожидаем - .Что(Бенчмаркинг) - .Метод("Запустить", ПараметрыМетода) - .ВыбрасываетИсключение("Может быть только один эталонный бенчмарк в пределах категории"); - -КонецПроцедуры - -&Тест -Процедура Тест_ОтсутствиеЭталонаКогдаИменаПараметровНеСовпадают() Экспорт - - Тип = Тип("БенчмаркСЭталономИПараметрами"); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.РезультатыЗапусков) - .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркВ""") - .ПолучитьПервый(); - - Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон не должен был быть найден").Не_().Заполнено(); - -КонецПроцедуры - -&Тест -Процедура Тест_ОтсутствиеЭталонаКогдаЗначенияПараметровНеСовпадают() Экспорт - - Тип = Тип("БенчмаркСЭталономИПараметрами"); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.РезультатыЗапусков) - .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 2") - .ПолучитьПервый(); - - Ожидаем.Что(СтрокаБезЭталона, "Не найдена строка бенчмарка ""БенчмаркБ"" со значением параметра 2").Заполнено(); - Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон не должен был быть найден").Не_().Заполнено(); - -КонецПроцедуры - -&Тест -Процедура Тест_НаличиеЭталонаКогдаЗначенияПараметровСовпадают() Экспорт - - Тип = Тип("БенчмаркСЭталономИПараметрами"); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - - // БенчмаркБ - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.РезультатыЗапусков) - .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 1") - .ПолучитьПервый(); - - Ожидаем.Что(СтрокаБезЭталона, "Не найдена строка бенчмарка ""БенчмаркБ"" со значением параметра 1").Заполнено(); - Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон должен был быть найден").Заполнено(); - -КонецПроцедуры - &Тест Процедура Тест_СортировкаПоМетоду() Экспорт @@ -533,7 +398,7 @@ &Тест Процедура Тест_ЭкспортВMarkdown() Экспорт - Тип = Тип("ПустойБенчмарк"); + Тип = Тип("ДваБенчмаркаИПоле"); ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); @@ -547,7 +412,7 @@ Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Markdown); - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ПустойБенчмарк-report.md"); + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.md"); Бенчмаркинг.Запустить(Тип, Конфигурация); @@ -562,7 +427,7 @@ &Тест Процедура Тест_ЭкспортВJson() Экспорт - Тип = Тип("ПустойБенчмарк"); + Тип = Тип("ДваБенчмаркаИПоле"); ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); @@ -572,11 +437,14 @@ Конфигурация = Новый КонфигурацияБенчмарков(Тип); ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); - Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json); + + Конфигурация + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого) + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех) + .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json) + .УстановитьКоличествоИтераций(10); - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ПустойБенчмарк-report.json"); + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.json"); Бенчмаркинг.Запустить(Тип, Конфигурация); @@ -591,7 +459,7 @@ &Тест Процедура Тест_ЭкспортВXml() Экспорт - Тип = Тип("ПустойБенчмарк"); + Тип = Тип("ДваБенчмаркаИПоле"); ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); @@ -601,11 +469,14 @@ Конфигурация = Новый КонфигурацияБенчмарков(Тип); ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); - Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Xml); + + Конфигурация + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого) + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех) + .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Xml) + .УстановитьКоличествоИтераций(10); - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ПустойБенчмарк-report.xml"); + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.xml"); Бенчмаркинг.Запустить(Тип, Конфигурация); @@ -620,7 +491,7 @@ &Тест Процедура Тест_ЭкспортВHtml() Экспорт - Тип = Тип("ПустойБенчмарк"); + Тип = Тип("ДваБенчмаркаИПоле"); ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); @@ -634,7 +505,7 @@ Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html); - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ПустойБенчмарк-report.html"); + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.html"); Бенчмаркинг.Запустить(Тип, Конфигурация); @@ -658,4 +529,176 @@ Ожидаем.Что(Результат, "Результат").Заполнено(); Ожидаем.Что(Результат[0].Результат.Конфигурация.КоличествоИтераций()).Равно(2); +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапускВРазныхВерсияхИсполняющейСреды() Экспорт + + ТестированиеБенчмарков.ПодготовитьСреду("dev,stable"); + + Тип = Тип("ПустойБенчмарк"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev", "dev"); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable"); + + Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); + + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды]).Содержит("dev"); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды]).Содержит("stable"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапретЗапускаПриНаличииНесериализуемыхПараметров() Экспорт + + Тип = Тип("БенчмаркСПараметрамиПоля"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Конфигурация + .ОчиститьПараметры() + .ДобавитьПараметр("Значение", Новый Структура("Тест", 1)) + .ДобавитьВерсиюИсполняющейСреды("dev") + .ДобавитьВерсиюИсполняющейСреды("stable", , Истина); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Тип); + ПараметрыМетода.Добавить(Конфигурация); + + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение( + "Значение параметра <Значение> должно быть сериализуемым для определения эталонов между разными версиями OneScript" + ); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапретЗапускаПриНаличииДелегатовИДругихВерсиейИсполняющейСреды() Экспорт + + Тип = Тип("ПустойБенчмарк"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Конфигурация + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПередВсеми, Новый Делегат(ЭтотОбъект, "Тест")) + .ДобавитьВерсиюИсполняющейСреды("dev"); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Тип); + ПараметрыМетода.Добавить(Конфигурация); + + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение( + "Использование делегатов как обработчиков событий не поддерживается при запуске в разных версиях OneScript" + ); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженОбработатьОшибкуУстановкиПоляОбъектаКласса() Экспорт + + Тип = Тип("БенчмаркСПараметрамиПоля"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьПараметр("ОшибочноеИмя", 100); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Тип); + ПараметрыМетода.Добавить(Конфигурация); + + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Не удалось задать значение поля <ОшибочноеИмя> для объекта <БенчмаркСПараметрамиПоля>"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьСериализациюРезультатовJson() Экспорт + + Тип = Тип("БенчмаркСПараметрамиМетодаИПоля"); + + // Настройка дескриптора бенчмарка + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + ДескрипторБенчмарка = ДескрипторыБенчмарков + .ПолучитьПервый() + .УстановитьКатегорию("Категория 1"); + + // Настройка конфигурации + ОбработчикУстановкаМок = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Конфигурация + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикУстановкаМок) + .ОчиститьПараметры() + .ДобавитьПараметр("ПолеОбщее", Новый ТаблицаЗначений()) + .ДобавитьПараметр("ПолеОбщее", Новый БенчмаркСПараметрамиМетодаИПоля) + .ДобавитьПараметр("ПолеОбщее", '19700101') + .ДобавитьПараметр("ПолеОбщее", Неопределено); + + // Запуск и сериализация/десериализация + Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация); + + ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); + Сериализатор = Новый СериализаторРезультатовБенчмарков(); + Сериализатор.СериализоватьВJSON(Результат, ИмяФайла); + РезультатПрочитанный = Сериализатор.ДесериализоватьИзJSON(ИмяФайла, Конфигурация); + + // Проверка + Расшифровка = РезультатПрочитанный.Расшифровка; + ДескрипторБенчмарка = Расшифровка[0].ДескрипторБенчмарка; + НаборыПараметров = ДескрипторБенчмарка.НаборыПараметров(); + + Ожидаем.Что(Расшифровка, "Количество строк в расшифровке").ИмеетДлину(8); + Ожидаем.Что(ДескрипторБенчмарка.ТипОбъекта(), "Тип").Равно(Тип); + Ожидаем.Что(ДескрипторБенчмарка.Метод(), "Метод").Равно("Бенчмарк"); + Ожидаем.Что(ДескрипторБенчмарка.Категория(), "Категория").Равно("Категория 1"); + Ожидаем.Что(НаборыПараметров, "Наборы параметров").ИмеетДлину(2); + Ожидаем.Что(НаборыПараметров[0], "Набор параметров 1").ИмеетДлину(2); + Ожидаем.Что(НаборыПараметров[0][0].Значение, "Набор параметров 1").Равно(3); + Ожидаем.Что(НаборыПараметров[0][1].Значение, "Набор параметров 1").Равно(4); + Ожидаем.Что(НаборыПараметров[1], "Набор параметров 2").ИмеетДлину(2); + Ожидаем.Что(НаборыПараметров[1][0].Значение, "Набор параметров 2").Равно(5); + Ожидаем.Что(НаборыПараметров[1][1].Значение, "Набор параметров 2").Равно(6); + Ожидаем.Что(Расшифровка[0].Параметры, "Количество строк в параметрах").ИмеетДлину(3); + Ожидаем.Что(Расшифровка[0].Параметры[0].Значение, "Параметр 1.1").Содержит("ТаблицаЗначений@"); + Ожидаем.Что(Расшифровка[0].Параметры[1].Значение, "Параметр 1.2").Равно(3); + Ожидаем.Что(Расшифровка[0].Параметры[2].Значение, "Параметр 1.3").Равно(4); + Ожидаем.Что(Расшифровка[1].Параметры[0].Значение, "Параметр 2.1").Содержит("БенчмаркСПараметрамиМетодаИПоля@"); + Ожидаем.Что(Расшифровка[2].Параметры[0].Значение, "Параметр 3.1").Равно('19700101'); + Ожидаем.Что(Расшифровка[3].Параметры[0].Значение, "Параметр 4.1").Равно(Неопределено); + Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Это не эталон").ЭтоЛожь(); + Ожидаем.Что(Расшифровка[0].ИсполняющаяСреда.Версия, "Версия").Не_().Заполнено(); + Ожидаем.Что(Расшифровка[0].Замеры, "Количество строк в замерах").ИмеетДлину(1); + Ожидаем.Что(Расшифровка[0].Замеры[0].Этап, "Этап").Равно(ЭтапыБенчмарка.Измерение); + Ожидаем.Что(Расшифровка[0].Замеры[0].НомерИтерации, "Номер итерации").Равно(1); + Ожидаем.Что(Расшифровка[0].Замеры[0].Наносекунд, "Наносекунд").Больше(100); + Ожидаем.Что(Расшифровка[0].Статистика.Среднее, "Среднее").Больше(100); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьКонтрольНаличияБенчмарков() Экспорт + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Новый КоллекцияДескрипторовБенчмарков()); + ПараметрыМетода.Добавить(ТестированиеБенчмарков.КонфигурацияПоУмолчанию()); + + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Не найдены бенчмарки для запуска"); + КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" index d7916ca..4a15459 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" @@ -17,7 +17,7 @@ Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков); - ВыделеноБайт = Результат.РезультатыЗапусков[0].Статистика.ВыделяемаяПамять; + ВыделеноБайт = Результат.Расшифровка[0].Статистика.ВыделяемаяПамять; Коэффициент = РазмерВБайтах / ВыделеноБайт; Ожидаем.Что(Коэффициент).Между(0.99, 1); @@ -36,7 +36,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - ВыделеноБайт = Результат.РезультатыЗапусков[0].Статистика.ВыделяемаяПамять; + ВыделеноБайт = Результат.Расшифровка[0].Статистика.ВыделяемаяПамять; Ожидаем.Что(ВыделеноБайт).Между(1, 2000); @@ -46,11 +46,11 @@ Процедура Тест_Производительность() Экспорт Результат = Бенчмаркинг.Запустить(Тип("БенчмаркиСЗадержкой")); - РезультатыЗапусков = Результат.РезультатыЗапусков; + Расшифровка = Результат.Расшифровка; Отчет = Результат.Отчет; - Статистика1 = РезультатыЗапусков[0].Статистика.ВМиллисекунды(); - Статистика2 = РезультатыЗапусков[1].Статистика.ВМиллисекунды(); + Статистика1 = Расшифровка[0].Статистика.ВМиллисекунды(); + Статистика2 = Расшифровка[1].Статистика.ВМиллисекунды(); // Среднее Ожидаем.Что(Статистика1.Среднее).Больше(10); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index 6f82f14..23845e7 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -3,36 +3,28 @@ #Использовать asserts #Использовать fluent +#Использовать tempfiles #Использовать "helpers" +Перем МенеджерВременныхФайлов; // МенеджерВременныхФайлов + +&Инициализация +Процедура ПередВсеми() Экспорт + МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); +КонецПроцедуры + +&Завершение +Процедура ПослеВсех() Экспорт + МенеджерВременныхФайлов.Удалить(); +КонецПроцедуры + &Тест Процедура Тест_АннотацииКонфигурации() Экспорт - ОбъектБенчмарков = Новый БенчмаркСАннотацямиКонфигурации; - Конфигурация = Новый КонфигурацияБенчмарков(ОбъектБенчмарков); - - Экспортеры = Конфигурация.Экспортеры(); - КоллекцияЭкспортеры = ПроцессорыКоллекций.ИзКоллекции(Экспортеры); + Тип = Тип("БенчмаркСАннотациямиКонфигурации"); + Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ФункцияПоискаЭкспортера = "Экспортер -> ТипЗнч(Экспортер) = Тип(""ЭкспортерРезультатовБенчмарковВ%1"")"; - - Ожидаем.Что(Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск); - Ожидаем.Что(Конфигурация.СортировкаОтчета()).Равно(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным); - Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); - Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(100); - Ожидаем.Что(Конфигурация.КоличествоВызововЗаИтерацию()).Равно(200); - Ожидаем.Что(Конфигурация.КоличествоПрогревочныхИтераций()).Равно(300); - Ожидаем.Что(Конфигурация.МинимальноеВремяИтерации()).Равно(400); - Ожидаем.Что(Конфигурация.МинимальноеКоличествоВызововЗаИтерацию()).Равно(500); - Ожидаем.Что(Конфигурация.ДелегатыОбработчиковСобытия(СобытияБенчмарков.ПередВсеми, ОбъектБенчмарков)).Заполнено(); - Ожидаем.Что(Конфигурация.ДелегатыОбработчиковСобытия(СобытияБенчмарков.ПослеВсех, ОбъектБенчмарков)).Заполнено(); - Ожидаем.Что(Конфигурация.ДелегатыОбработчиковСобытия(СобытияБенчмарков.ПередКаждым, ОбъектБенчмарков)).Заполнено(); - Ожидаем.Что(Конфигурация.ДелегатыОбработчиковСобытия(СобытияБенчмарков.ПослеКаждого, ОбъектБенчмарков)).Заполнено(); - Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts"); - Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина(); - Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина(); - Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Xml"))).ЭтоИстина(); - Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина(); + ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(Конфигурация); КонецПроцедуры @@ -82,7 +74,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.РезультатыЗапусков[0].Замеры.Количество()).Равно(КоличествоИтераций); + Ожидаем.Что(Результат.Расшифровка[0].Замеры.Количество()).Равно(КоличествоИтераций); КонецПроцедуры @@ -97,7 +89,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.РезультатыЗапусков[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); + Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); КонецПроцедуры @@ -168,7 +160,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); - Ожидаем.Что(Результат.РезультатыЗапусков[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); + Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); КонецПроцедуры @@ -184,7 +176,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); - Ожидаем.Что(Результат.РезультатыЗапусков[0].Замеры[0].КоличествоОпераций).Равно(1); + Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(1); КонецПроцедуры @@ -313,7 +305,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.РезультатыЗапусков[0].Статистика.ВыделяемаяПамять).Заполнено(); + Ожидаем.Что(Результат.Расшифровка[0].Статистика.ВыделяемаяПамять).Заполнено(); Ожидаем.Что(Результат.Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); КонецПроцедуры @@ -625,12 +617,11 @@ .ДобавитьКолонку(КолонкиОтчетаБенчмарков.НижнийКвартиль) .ДобавитьКолонку(КолонкиОтчетаБенчмарков.ВерхнийКвартиль) .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json) - .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html); - - НоваяКонфигурация = Новый КонфигурацияБенчмарков() - .Объединить(ПередаваемаяКонфигурация); + .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html) + .ДобавитьВерсиюИсполняющейСреды("dev") + .ДобавитьВерсиюИсполняющейСреды("1.9.3"); - ОбработчикиСобытий = НоваяКонфигурация.ОбработчикиСобытий(); + НоваяКонфигурация = Новый КонфигурацияБенчмарков().Объединить(ПередаваемаяКонфигурация); Ожидаем.Что(НоваяКонфигурация.Стратегия(), "Стратегия").Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск); Ожидаем.Что(НоваяКонфигурация.КоличествоИтераций(), "Количество итераций").Равно(111); @@ -641,13 +632,15 @@ Ожидаем.Что(НоваяКонфигурация.СортировкаОтчета(), "Сортировка отчета").Равно(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным); Ожидаем.Что(НоваяКонфигурация.Параметры()[0].Имя, "Параметры").Равно("col1"); Ожидаем.Что(НоваяКонфигурация.Параметры()[1].Имя, "Параметры").Равно("col2"); - Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПередВсеми], "Обработчики событий").Содержит("Обработчик1"); - Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПослеКаждого], "Обработчики событий").Содержит("Обработчик2"); - Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПослеКаждого], "Обработчики событий").Содержит("Обработчик3"); + Ожидаем.Что(НоваяКонфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередВсеми), "Обработчики событий").Содержит("Обработчик1"); + Ожидаем.Что(НоваяКонфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого), "Обработчики событий").Содержит("Обработчик2"); + Ожидаем.Что(НоваяКонфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого), "Обработчики событий").Содержит("Обработчик3"); Ожидаем.Что(НоваяКонфигурация.Колонки(), "Колонки").Содержит(КолонкиОтчетаБенчмарков.НижнийКвартиль); Ожидаем.Что(НоваяКонфигурация.Колонки(), "Колонки").Содержит(КолонкиОтчетаБенчмарков.ВерхнийКвартиль); Ожидаем.Что(НоваяКонфигурация.Экспортеры(), "Экспортеры").Содержит(ЭкспортерыРезультатовБенчмарков.Json); Ожидаем.Что(НоваяКонфигурация.Экспортеры(), "Экспортеры").Содержит(ЭкспортерыРезультатовБенчмарков.Html); + Ожидаем.Что(НоваяКонфигурация.ВерсииИсполняющейСреды()[0].Версия, "Исполняющая среда (dev)").Равно("dev"); + Ожидаем.Что(НоваяКонфигурация.ВерсииИсполняющейСреды()[1].Версия, "Исполняющая среда (1.9.3)").Равно("1.9.3"); КонецПроцедуры @@ -668,6 +661,8 @@ КонфигурацияПриемник.Объединить(КонфигурацияИсточник); ОбработчикиСобытий = КонфигурацияПриемник.ОбработчикиСобытий(); + ОбработчикСобытияПередВсеми = ОбработчикиСобытий.Найти(СобытияБенчмарков.ПередВсеми, "Событие"); + ОбработчикСобытияПослеВсех = ОбработчикиСобытий.Найти(СобытияБенчмарков.ПослеВсех, "Событие"); Ожидаем.Что(КонфигурацияПриемник.КоличествоИтераций(), "Количество итераций").Равно(222); Ожидаем.Что(КонфигурацияПриемник.КоличествоВызововЗаИтерацию(), "Количество вызовов за итерацию").Равно(111); @@ -675,8 +670,8 @@ Ожидаем.Что(КонфигурацияПриемник.Колонки(), "Колонки").ИмеетДлину(1); Ожидаем.Что(КонфигурацияПриемник.Колонки(), "Колонки").Содержит(КолонкиОтчетаБенчмарков.ВерхнийКвартиль); Ожидаем.Что(КонфигурацияПриемник.Экспортеры(), "Экспортеры").Содержит(ЭкспортерыРезультатовБенчмарков.Html); - Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПередВсеми], "Обработчики событий").ЭтоНеопределено(); - Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПослеВсех], "Обработчики событий").Содержит("Обработчик2"); + Ожидаем.Что(ОбработчикСобытияПередВсеми, "Обработчики событий").ЭтоНеопределено(); + Ожидаем.Что(ОбработчикСобытияПослеВсех.Обработчик, "Обработчики событий").Равно("Обработчик2"); КонецПроцедуры @@ -700,4 +695,83 @@ Ожидаем.Что(КонфигурацияПриемник.КоличествоВызововЗаИтерацию(), "Количество вызовов за итерацию").Равно(111); Ожидаем.Что(КонфигурацияПриемник.Стратегия(), "Стратегия").Равно(СтратегииЗапускаБенчмарка.ПропускнаяСпособность); +КонецПроцедуры + +&Тест +Процедура Тест_ДобавлениеВерсииИсполняющейСреды() Экспорт + + Конфигурация = Новый КонфигурацияБенчмарков(); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev"); + + Ожидаем.Что(Конфигурация.ВерсииИсполняющейСреды()).Заполнено(); + Ожидаем.Что(Конфигурация.ВерсииИсполняющейСреды()[0].Версия).Равно("dev"); + +КонецПроцедуры + +&Тест +Процедура Тест_УдалениеВсехВерсийИсполняющейСреды() Экспорт + + Конфигурация = Новый КонфигурацияБенчмарков(); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev"); + Конфигурация.ОчиститьВерсииИсполняющейСреды(); + + Ожидаем.Что(Конфигурация.ВерсииИсполняющейСреды()).ИмеетДлину(0); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьСериализациюКонфигурацииJson() Экспорт + + Тип = Тип("БенчмаркСАннотациямиКонфигурации"); + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + + ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); + + Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); + Сериализатор.СериализоватьВJSON(Конфигурация, ИмяФайла); + КонфигурацияПрочитанная = Сериализатор.ДесериализоватьИзJSON(ИмяФайла); + + ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(КонфигурацияПрочитанная); + +КонецПроцедуры + +Процедура ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(Конфигурация) + + Экспортеры = Конфигурация.Экспортеры(); + КоллекцияЭкспортеры = ПроцессорыКоллекций.ИзКоллекции(Экспортеры); + ВерсииИсполняющейСреды = Конфигурация.ВерсииИсполняющейСреды(); + Колонки = Конфигурация.Колонки(); + Параметры = Конфигурация.Параметры(); + + ФункцияПоискаЭкспортера = "Экспортер -> ТипЗнч(Экспортер) = Тип(""ЭкспортерРезультатовБенчмарковВ%1"")"; + + Ожидаем.Что(Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск); + Ожидаем.Что(Конфигурация.СортировкаОтчета()).Равно(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным); + Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(100); + Ожидаем.Что(Конфигурация.КоличествоВызововЗаИтерацию()).Равно(200); + Ожидаем.Что(Конфигурация.КоличествоПрогревочныхИтераций()).Равно(300); + Ожидаем.Что(Конфигурация.МинимальноеВремяИтерации()).Равно(400); + Ожидаем.Что(Конфигурация.МинимальноеКоличествоВызововЗаИтерацию()).Равно(500); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередВсеми), "Обработчики").Содержит("ПередВсеми"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеВсех), "Обработчики").Содержит("ПослеВсех"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередКаждым), "Обработчики").Содержит("ПередКаждым"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого), "Обработчики").Содержит("ПослеКаждого"); + Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts"); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина(); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина(); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Xml"))).ЭтоИстина(); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина(); + Ожидаем.Что(ВерсииИсполняющейСреды, "Должно быть 4 версии исполняющей среды").ИмеетДлину(4); + Ожидаем.Что(ВерсииИсполняющейСреды[0].Версия, "Версия исполняющей среды stable").Равно("stable"); + Ожидаем.Что(ВерсииИсполняющейСреды[1].Версия, "Версия исполняющей среды 1.9.3").Равно("1.9.3"); + Ожидаем.Что(ВерсииИсполняющейСреды[2].Версия, "Версия исполняющей среды 1.9.4").Равно("1.9.4"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].Версия, "Версия исполняющей среды 2.0.0").Равно("2.0.0"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].Наименование, "Наименование исполняющей среды 2.0.0").Равно("Новая"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].ЭтоЭталон, "Исполняющая среда версии 2.0.0 - эталонная").ЭтоИстина(); + Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Мин); + Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Макс); + Ожидаем.Что(Параметры[0].Значение, "Параметры").Равно(100); + Ожидаем.Что(Параметры[1].Значение, "Параметры").Равно(200); + КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" new file mode 100644 index 0000000..31bc8ae --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" @@ -0,0 +1,274 @@ +// BSLLS:DuplicateStringLiteral-off +// BSLLS:MagicNumber-off + +#Использовать asserts +#Использовать fluent +#Использовать "helpers" + +&Тест +Процедура Тест_ДолженНайтиЭталонныйБенчмаркОпределенныйВАннотации() Экспорт + + Тип = Тип("БенчмаркиСЭталоном"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); + + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоЛожь(); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Заполнено(); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженНайтиЭталонныйБенчмаркОпределенныйВКонфигурации() Экспорт + + Тип = Тип("ПустойБенчмарк"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ИспользоватьКакЭталон(); + + Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация); + + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(1); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженНайтиЭталонныйБенчмаркВКаждойКатегории() Экспорт + + Тип = Тип("БенчмаркиПоКатегориям"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркА1").ИспользоватьКакЭталон(); + ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркБ1").ИспользоватьКакЭталон(); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Тип); + ПараметрыМетода.Добавить(Конфигурация); + ПараметрыМетода.Добавить(ДескрипторыБенчмарков); + + Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация); + + Таблица = Результат.Отчет.Таблица; + СтрокаА1 = Таблица.Найти("БенчмаркА1", КолонкиОтчетаБенчмарков.Метод); + СтрокаБ1 = Таблица.Найти("БенчмаркБ1", КолонкиОтчетаБенчмарков.Метод); + + Ожидаем.Что(СтрокаА1[КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); + Ожидаем.Что(СтрокаБ1[КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженНайтиЭталонСредиЭталоннойВерсииИсполняющейСреды() Экспорт + + ТестированиеБенчмарков.ПодготовитьСреду("dev,stable"); + + Тип = Тип("ПустойБенчмарк"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev", "dev"); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable", Истина); + + Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); + + Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2); + + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды]).Содержит("dev"); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоЛожь(); + Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Больше(0); + + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды]).Содержит("stable"); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина(); + Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроигнорироватьЭталонныйБенчмаркПриНаличииЭталоннойВерсииИсполняющейСреды() Экспорт + + Тип = Тип("БенчмаркиСЭталоном"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev"); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable", Истина); + + Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); + Расшифровка = Результат.Расшифровка; + + Ожидаем.Что(Расшифровка).ИмеетДлину(4); + Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Расшифровка[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("Бенчмарк"); + Ожидаем.Что(Расшифровка[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("stable"); + Ожидаем.Что(Расшифровка[1].ЭтоЭталон, "БенчмаркЭталон (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Расшифровка[1].Эталон.ДескрипторБенчмарка.Метод(), "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Расшифровка[1].Эталон.ИсполняющаяСреда.Алиас, "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); + Ожидаем.Что(Расшифровка[2].ЭтоЭталон, "Бенчмарк (stable) должен быть эталоном").ЭтоИстина(); + Ожидаем.Что(Расшифровка[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженНайтиЭталонныйБенчмаркВКорректнойВерсииИсполняющейСреды() Экспорт + + Тип = Тип("БенчмаркиСЭталоном"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev"); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable"); + + Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); + Расшифровка = Результат.Расшифровка; + + Ожидаем.Что(Расшифровка).ИмеетДлину(4); + Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Расшифровка[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Расшифровка[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("dev"); + Ожидаем.Что(Расшифровка[1].ЭтоЭталон, "БенчмаркЭталон (dev) должен быть эталоном").ЭтоИстина(); + Ожидаем.Что(Расшифровка[2].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Расшифровка[2].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Расшифровка[2].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); + Ожидаем.Что(Расшифровка[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапретНаБолееОдногоЭталонногоБенчмарка() Экспорт + + Тип = Тип("БенчмаркиСЭталоном"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + ДескрипторыБенчмарков.Получить(0).ИспользоватьКакЭталон(); + ДескрипторыБенчмарков.Получить(1).ИспользоватьКакЭталон(); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(ДескрипторыБенчмарков); + ПараметрыМетода.Добавить(Конфигурация); + + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Может быть только один эталонный бенчмарк"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапретНаБолееОдногоЭталонногоБенчмаркаВКатегории() Экспорт + + Тип = Тип("БенчмаркиПоКатегориям"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + ДескрипторыБенчмарков.Получить(0).ИспользоватьКакЭталон(); // А1 + ДескрипторыБенчмарков.Получить(1).ИспользоватьКакЭталон(); // А2 + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(ДескрипторыБенчмарков); + ПараметрыМетода.Добавить(Конфигурация); + + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("В пределах одной категории может быть только один эталонный бенчмарк"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженПроверитьЗапретНаБолееОдногоЭталоннойВерсииИсполняющейСреды() Экспорт + + Тип = Тип("ПустойБенчмарк"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev", "dev", Истина); + Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable", Истина); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Тип); + ПараметрыМетода.Добавить(Конфигурация); + + Ожидаем + .Что(Бенчмаркинг) + .Метод("Запустить", ПараметрыМетода) + .ВыбрасываетИсключение("Допускается только одна эталонная версия исполняющей среды"); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженУбедитьсяВОтсутствииЭталонаКогдаИменаПараметровНеСовпадают() Экспорт + + Тип = Тип("БенчмаркиСЭталономИПараметрами"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); + + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркВ""") + .ПолучитьПервый(); + + Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон не должен был быть найден").Не_().Заполнено(); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженУбедитьсяВОтсутствииЭталонаКогдаЗначенияПараметровНеСовпадают() Экспорт + + Тип = Тип("БенчмаркиСЭталономИПараметрами"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); + + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 2") + .ПолучитьПервый(); + + Ожидаем.Что(СтрокаБезЭталона, "Не найдена строка бенчмарка ""БенчмаркБ"" со значением параметра 2").Заполнено(); + Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон не должен был быть найден").Не_().Заполнено(); + +КонецПроцедуры + +&Тест +Процедура Тест_ДолженНайтиЭталонКогдаИменаИЗначенияПараметровСовпадают() Экспорт + + Тип = Тип("БенчмаркиСЭталономИПараметрами"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); + + // БенчмаркБ + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 1") + .ПолучитьПервый(); + + Ожидаем.Что(СтрокаБезЭталона, "Не найдена строка бенчмарка ""БенчмаркБ"" со значением параметра 1").Заполнено(); + Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон должен был быть найден").Заполнено(); + Ожидаем.Что(СтрокаБезЭталона.Эталон.ДескрипторБенчмарка.Метод()).Равно("БенчмаркА"); + +КонецПроцедуры \ No newline at end of file