diff --git a/.bsl-language-server.json b/.bsl-language-server.json index 8eda71d..a9bd07d 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -5,7 +5,7 @@ "listOfIncorrectFirstSymbol": ";|,\\s*\\S+" }, "Typo": { - "userWordsToIgnore": "Дто,Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарками,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Десериализованный,Десериализуемые,Сериализуемый,Сериализуемое,Несериализуемое,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Десериализатор,Сериализовать,Сериализации,Сериализуемые,Сериализацией,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Десериализации,Несериализуемых,Валидатор,Валидировать,Алиас" + "userWordsToIgnore": "Дто,Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарками,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Десериализованный,Десериализуемые,Сериализуемый,Сериализуемое,Несериализуемое,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Десериализатор,Сериализовать,Сериализации,сериализации,Сериализуемые,Сериализацией,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Десериализации,десериализации,Несериализуемых,Валидатор,Валидировать,Алиас" }, "LatinAndCyrillicSymbolInWord": false, "MagicNumber": { 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 f8ed076..cb37157 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" @@ -67,17 +67,17 @@ ### API ```bsl -// Регистрация обработчика из произвольного объекта через делегат -Конфигурация.ДобавитьОбработчикСобытия( - СобытияБенчмарков.ПередВсеми, - Новый Делегат(Объект, "Инициализация") -); - -// Регистрация обработчика из экземпляра класса бенчмарка -Конфигурация.ДобавитьОбработчикСобытия - СобытияБенчмарков.ПослеВсех, - "Завершение" -); +// Регистрация обработчика, расположенного в сценарии бенчмарка +Конфигурация.ДобавитьОбработчикСобытия("ВыполнитьПослеВсех", СобытияБенчмарков.ПослеВсех); + +// Регистрация обработчика, расположенного в другом модуле/классе +Конфигурация.ДобавитьОбработчикСобытия("МодульОбработчиков.ВыполнитьПослеВсех", СобытияБенчмарков.ПослеВсех); + +// Получение всех обработчиков +Обработчики = Конфигурация.ОбработчикиСобытий(); + +// Получение обработчиков конкретного события +ОбработчикиПослеВсех = Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеВсех); // Удаление обработчиков для события Конфигурация.УдалитьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым); 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 e1c3137..eba144d 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" @@ -6,9 +6,9 @@ ### Аннотации -**Параметры для поля класса, заданные напрямую** +**Общие параметры бенчмарков, заданные напрямую** -Используйте аннотацию `&Параметры` для указания фиксированного набора значений для поля класса. Можно указать значения в одной аннотации или в нескольких. +Используйте аннотацию `&Параметры` для указания значений общего параметра бенчмарков. Можно указать значения в одной аннотации или в нескольких. ```bsl // Вариант 1: Все значения в одной аннотации @@ -21,10 +21,10 @@ Перем АлгоритмХеширования Экспорт; ``` -**Параметры для поля класса, полученные из функции** +**Общие параметры бенчмарков, полученные из функции** -Используйте аннотацию `&ИсточникПараметров` для указания экспортной функции, возвращающей коллекцию значений для поля. -Функция может быть определена в классе бенчмарка или в другом модуле/классе. +Используйте аннотацию `&ИсточникПараметров` для указания экспортной функции, возвращающей коллекцию значений для общего параметра бенчмарков. +Функция может быть определена в самом сценарии бенчмарка, любом другом модуле/классе. ```bsl &ИсточникПараметров("ПолучитьАлгоритмыХеширования") // Экспортная функция внутри класса бенчмарков @@ -41,9 +41,9 @@ КонецФункции ``` -**Параметры для метода бенчмарка, заданные напрямую** +**Параметры бенчмарка, заданные напрямую** -Используйте аннотацию `&Параметры` для указания фиксированного набора параметров для метода бенчмарка. Каждая аннотация задает новый тестовый случай. +Используйте аннотацию `&Параметры` для указания фиксированного набора параметров бенчмарка. Каждая аннотация задает новый тестовый случай. ```bsl &Параметры(50, 100) // Парам1=50, Парам2=100 @@ -54,11 +54,11 @@ КонецПроцедуры ``` -**Параметры для метода бенчмарка, полученные из функции** +**Параметры бенчмарка, полученные из функции** Используйте аннотацию `&ИсточникПараметров` для указания функции, возвращающей коллекцию наборов параметров. Функция должна возвращать `Массив` или `ТаблицаЗначений`, где каждый элемент соответствует набору параметров. -Функция может быть определена в классе бенчмарка или в другом модуле/классе. +Функция может быть определена в самом сценарии бенчмарка, любом другом модуле/классе. ```bsl &ИсточникПараметров("ПолучитьПараметрыБенчмарка") // Экспортная функция внутри класса бенчмарков @@ -115,7 +115,7 @@ ### API -**Добавление параметров для поля класса** +**Добавление общих параметров бенчмарков** ```bsl Конфигурация @@ -123,14 +123,14 @@ .ДобавитьПараметр("АлгоритмХеширования", "SHA256"); ``` -**Указание источника параметров для поля класса по имени функции** +**Указание источника общих параметров бенчмарков** ```bsl Конфигурация.ДобавитьИсточникПараметров("АлгоритмХеширования", "ПолучитьАлгоритмыХеширования"); // Экспортная функция внутри класса бенчмарков Конфигурация.ДобавитьИсточникПараметров("АлгоритмХеширования", "ХранилищеАлгоритмов.ПолучитьАлгоритмыХеширования"); // Экспортная функция класса ХранилищеАлгоритмов ``` -**Добавление параметров для метода бенчмарка** +**Добавление параметров бенчмарка** ```bsl // Набор 1 @@ -146,7 +146,7 @@ ДескрипторБенчмарка.ДобавитьПараметры(НаборПараметров); ``` -**Указание источника параметров для метода бенчмарка по имени функции** +**Указание источника параметров бенчмарка** ```bsl ДескрипторБенчмарка.ДобавитьИсточникПараметров("ПолучитьПараметрыБенчмарка"); // Экспортная функция внутри класса бенчмарков diff --git a/packagedef b/packagedef index a9bd003..240cec8 100644 --- a/packagedef +++ b/packagedef @@ -38,4 +38,5 @@ .ЗависитОт("allocs", "0.1.0") .РазработкаЗависитОт("1testrunner") .РазработкаЗависитОт("coverage") + .РазработкаЗависитОт("strings") .ИсполняемыйФайл("src/BenchmarkOneScript/cmd/main.os", "benchos") \ No newline at end of file diff --git "a/samples/api/\320\224\320\276\320\261\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262\320\241\320\276\320\261\321\213\321\202\320\270\320\271\320\237\321\200\320\270\320\274\320\265\321\200.os" "b/samples/api/\320\224\320\276\320\261\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262\320\241\320\276\320\261\321\213\321\202\320\270\320\271\320\237\321\200\320\270\320\274\320\265\321\200.os" index e72f3c3..f1421fb 100644 --- "a/samples/api/\320\224\320\276\320\261\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262\320\241\320\276\320\261\321\213\321\202\320\270\320\271\320\237\321\200\320\270\320\274\320\265\321\200.os" +++ "b/samples/api/\320\224\320\276\320\261\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262\320\241\320\276\320\261\321\213\321\202\320\270\320\271\320\237\321\200\320\270\320\274\320\265\321\200.os" @@ -21,9 +21,11 @@ Тип = Тип("БенчмаркБазовый"); Конфигурация = Новый КонфигурацияБенчмарков(Тип) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПередВсеми, Новый Делегат(ЭтотОбъект, "Инициализация")) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, Новый Делегат(ЭтотОбъект, "Завершение")) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПередКаждым, Новый Делегат(ЭтотОбъект, "ПередЗапуском")) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, Новый Делегат(ЭтотОбъект, "ПослеЗапуска")); + .ДобавитьОбработчикСобытия("Инициализация", СобытияБенчмарков.ПередВсеми) + .ДобавитьОбработчикСобытия("Завершение", СобытияБенчмарков.ПослеВсех) + .ДобавитьОбработчикСобытия("ПередЗапуском", СобытияБенчмарков.ПередКаждым) + .ДобавитьОбработчикСобытия("ПослеЗапуска", СобытияБенчмарков.ПослеКаждого) +// .ДобавитьОбработчикСобытия("ОбщийМодуль.ВыполнитьПослеЗапуска", СобытияБенчмарков.ПослеКаждого) + ; Бенчмаркинг.Запустить(Тип, Конфигурация); \ No newline at end of file diff --git "a/samples/api/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\237\321\200\320\270\320\274\320\265\321\200.os" "b/samples/api/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\237\321\200\320\270\320\274\320\265\321\200.os" index d982915..f74bf50 100644 --- "a/samples/api/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\237\321\200\320\270\320\274\320\265\321\200.os" +++ "b/samples/api/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\237\321\200\320\270\320\274\320\265\321\200.os" @@ -1,51 +1,17 @@ #Использовать benchmark #Использовать "../benchmarks" -// Метод, возвращающий коллекцию множителей -Функция ПолучитьМножители() Экспорт - Множители = Новый Массив(); - Множители.Добавить(3); - Множители.Добавить(300); - Возврат Множители; -КонецФункции - -// Метод, возвращающий наборы параметров для бенчмарка -Функция ПолучитьПараметрыБенчмарка() Экспорт - - Наборы = Новый ТаблицаЗначений(); - Наборы.Колонки.Добавить("Число"); - Наборы.Колонки.Добавить("ТипАлгоритма"); - - // Набор 1: Маленькое число, итеративный алгоритм - Набор = Наборы.Добавить(); - Набор.Число = 13; - Набор.ТипАлгоритма = "Итеративный"; - - // Набор 2: Среднее число, рекурсивный алгоритм - Набор = Наборы.Добавить(); - Набор.Число = 18; - Набор.ТипАлгоритма = "Рекурсивный"; - - // Набор 3: Большое число, итеративный алгоритм - Набор = Наборы.Добавить(); - Набор.Число = 23; - Набор.ТипАлгоритма = "Итеративный"; - - Возврат Наборы; - -КонецФункции - Тип = Тип("БенчмаркИсточникПараметров"); -// Устанавливаем источник параметров для поля Множитель -Конфигурация = Новый КонфигурацияБенчмарков(Тип); -Конфигурация.ОчиститьИсточникиПараметров(); // Очищаем существуюие источники параметров -Конфигурация.ДобавитьИсточникПараметров("Множитель", Новый Делегат(ЭтотОбъект, "ПолучитьМножители")); +// Устанавливаем источник параметров для общего параметра "Множитель" +Конфигурация = Новый КонфигурацияБенчмарков(Тип) + .ОчиститьИсточникиПараметров() // Очищаем существующие источники параметров + .ДобавитьИсточникПараметров("Множитель", "КоллекцияМножителей.Получить"); -// Устанавливаем источник параметров для параметров метода бенчмарка +// Устанавливаем источник параметров бенчмарка ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); -ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркФакториала"); -ДескрипторБенчмарка.ОчиститьИсточникиПараметров(); // Очищаем существуюие источники параметров -ДескрипторБенчмарка.ДобавитьИсточникПараметров(Новый Делегат(ЭтотОбъект, "ПолучитьПараметрыБенчмарка")); +ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркФакториала") + .ОчиститьИсточникиПараметров() // Очищаем существующие источники параметров + .ДобавитьИсточникПараметров("ПараметрыБенчмаркаФакториала.Получить"); Бенчмаркинг.Запустить(ДескрипторБенчмарка, Конфигурация); \ No newline at end of file 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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 914ddc1..e0c8db9 100644 --- "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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -1,3 +1,5 @@ +#Использовать "../../paramsSources" + &ИсточникПараметров("ПолучитьМножители") Перем Множитель Экспорт; @@ -6,7 +8,7 @@ КонецПроцедуры &Бенчмарк -&ИсточникПараметров("ПолучитьПараметрыБенчмарка") +&ИсточникПараметров("ПараметрыБенчмаркаФакториала.Получить") Процедура БенчмаркФакториала(Число, ТипАлгоритма) Экспорт Если ТипАлгоритма = "Итеративный" Тогда @@ -40,30 +42,4 @@ Множители.Добавить(1); Множители.Добавить(100); Возврат Множители; -КонецФункции - -// Метод, возвращающий наборы параметров для бенчмарка -Функция ПолучитьПараметрыБенчмарка() Экспорт - - Наборы = Новый ТаблицаЗначений(); - Наборы.Колонки.Добавить("Число"); - Наборы.Колонки.Добавить("ТипАлгоритма"); - - // Набор 1: Маленькое число, итеративный алгоритм - Набор = Наборы.Добавить(); - Набор.Число = 10; - Набор.ТипАлгоритма = "Итеративный"; - - // Набор 2: Среднее число, рекурсивный алгоритм - Набор = Наборы.Добавить(); - Набор.Число = 15; - Набор.ТипАлгоритма = "Рекурсивный"; - - // Набор 3: Большое число, итеративный алгоритм - Набор = Наборы.Добавить(); - Набор.Число = 20; - Набор.ТипАлгоритма = "Итеративный"; - - Возврат Наборы; - КонецФункции \ No newline at end of file diff --git "a/samples/paramsSources/\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\234\320\275\320\276\320\266\320\270\321\202\320\265\320\273\320\265\320\271.os" "b/samples/paramsSources/\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\234\320\275\320\276\320\266\320\270\321\202\320\265\320\273\320\265\320\271.os" new file mode 100644 index 0000000..9a7609d --- /dev/null +++ "b/samples/paramsSources/\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\234\320\275\320\276\320\266\320\270\321\202\320\265\320\273\320\265\320\271.os" @@ -0,0 +1,6 @@ +Функция Получить() Экспорт + Множители = Новый Массив(); + Множители.Добавить(3); + Множители.Добавить(300); + Возврат Множители; +КонецФункции \ No newline at end of file diff --git "a/samples/paramsSources/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\244\320\260\320\272\321\202\320\276\321\200\320\270\320\260\320\273\320\260.os" "b/samples/paramsSources/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\244\320\260\320\272\321\202\320\276\321\200\320\270\320\260\320\273\320\260.os" new file mode 100644 index 0000000..cd85bb4 --- /dev/null +++ "b/samples/paramsSources/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\244\320\260\320\272\321\202\320\276\321\200\320\270\320\260\320\273\320\260.os" @@ -0,0 +1,24 @@ +Функция Получить() Экспорт + + Наборы = Новый ТаблицаЗначений(); + Наборы.Колонки.Добавить("Число"); + Наборы.Колонки.Добавить("ТипАлгоритма"); + + // Набор 1: Маленькое число, итеративный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 10; + Набор.ТипАлгоритма = "Итеративный"; + + // Набор 2: Среднее число, рекурсивный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 15; + Набор.ТипАлгоритма = "Рекурсивный"; + + // Набор 3: Большое число, итеративный алгоритм + Набор = Наборы.Добавить(); + Набор.Число = 20; + Набор.ТипАлгоритма = "Итеративный"; + + Возврат Наборы; + +КонецФункции \ 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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index dd3cde6..074f24e 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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -1,20 +1,14 @@ -// Определяет имя экспортного метода, возвращающего коллекцию параметров для публичного поля или метода бенчмарка. +// Определяет имя экспортной функции, возвращающего коллекцию параметров. // -// Позволяет выполнять тестирование с различными наборами входных данных, -// обеспечивая гибкость и масштабируемость сценариев. -// -// Правила обработки возвращаемого значения: -// - Если возвращается Массив или ТаблицаЗначений, -// каждый элемент коллекции интерпретируется как отдельный набор параметров. -// - Для остальных типов возвращаемое значение передается в набор параметров без изменений. -// -// Если метод бенчмарка принимает более одного параметра, возвращаемая коллекция должна быть одного из следующих типов: +// Если бенчмарк принимает более одного параметра, возвращаемая коллекция должна быть одного из следующих типов: // * Массив из Произвольный - Элементы передаются в параметры метода по порядку. // Если количество элементов не совпадает с количеством параметров, // возникает исключение. // * Структура или Соответствие - Ключи коллекции сопоставляются с именами параметров метода. // * СтрокаТаблицыЗначений - Колонки таблицы сопоставляются с именами параметров метода. // +// Применяется к экспортным полям и методам бенчмарков. +// // Параметры: // Значение - Строка - Имя экспортного метода. Может быть задано в формате: // <ИмяТипаИлиМодуля>.<ИмяМетода> или <ИмяМетода> (метод класса бенчмарков) 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 d4be7e8..63cfe73 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" @@ -1,9 +1,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\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 0b46c46..f40896c 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" @@ -1,4 +1,4 @@ -// Аннотация указывает, что метод бенчмарка является эталонным. +// Аннотация указывает, что бенчмарк является эталонным. // // Результаты выполнения эталонного бенчмарка используются как базовая метрика // для оценки эффективности других тестов. 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 e3a22be..8213fff 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" @@ -74,7 +74,7 @@ УстановитьРежимВоркер(); - ПодключенныеТипы = ПодключитьТипы(); + ПодключенныеТипы = ПодключитьБенчмарки(); Настройки = ПрочитатьНастройки(); Конфигурация = ПрочитатьКонфигурацию(Настройки); @@ -111,11 +111,11 @@ КонецФункции -Функция ПодключитьТипы() +Функция ПодключитьБенчмарки() ПодключенныеТипы = Новый Массив(); Для Каждого ИмяФайла Из НайтиФайлыБенчмарков() Цикл - Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); + Тип = Бенчмаркинг.ПодключитьБенчмарк(ИмяФайла); Если Не Тип = Неопределено Тогда ПодключенныеТипы.Добавить(Тип); КонецЕсли; 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 68bba33..7192eb0 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" @@ -31,8 +31,12 @@ ИмяПараметра = ИмяПараметра(Колонка); Для Каждого Параметр Из РезультатЗапускаБенчмарка.Параметры Цикл - Если Параметр.Имя = ИмяПараметра Тогда - Возврат Параметр.Значение; + Если Параметр.Имя() = ИмяПараметра Тогда + Если Параметр.Значение() <> Неопределено И СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Параметр.Значение()) Тогда + Возврат Параметр.Значение(); + Иначе + Возврат Параметр.Представление(); + КонецЕсли; КонецЕсли; КонецЦикла; 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" index 914bbb7..6a97857 100644 --- "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" @@ -31,7 +31,6 @@ ПроверитьЭталоннуюВерсиюИсполняющейСреды(); ПроверитьЭталонныеБенчмарки(); ПроверитьПараметрыНаВозможностьСериализации(); - ПроверитьОтсутствиеДелегатовПриНаличииДругойВерсииИсполняющейСреды(); Возврат _СписокОшибок.Количество() = 0; @@ -129,10 +128,6 @@ Процедура ПроверитьПараметрыНаВозможностьСериализации() - Если Не ЕстьЭталоны() Или _Конфигурация.ИсполняющаяСредаОграниченаТекущей() Тогда - Возврат; - КонецЕсли; - // Параметры полей Для Каждого Параметр Из _Конфигурация.Параметры() Цикл ПроверитьПараметрНаВозможностьСериализации(Параметр); @@ -141,7 +136,7 @@ // Параметры методов Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл Для Каждого НаборыПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл - Для Каждого Параметр Из НаборыПараметров Цикл + Для Каждого Параметр Из НаборыПараметров.ВМассив() Цикл ПроверитьПараметрНаВозможностьСериализации(Параметр); КонецЦикла; КонецЦикла; @@ -152,10 +147,11 @@ Процедура ПроверитьПараметрНаВозможностьСериализации(Параметр) ШаблонОшибки = - "Значение параметра <%1> должно быть примитивным для определения эталонов между разными версиями OneScript"; + "Значение параметра <%1> должно быть примитивного типа. " + + "Параметры составных типов следует передавать через механизм источников параметров."; - Если Не СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Параметр.Значение) Тогда - ТекстОшибки = СтрШаблон(ШаблонОшибки, Параметр.Имя); + Если Не СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Параметр.Значение()) Тогда + ТекстОшибки = СтрШаблон(ШаблонОшибки, Параметр.Имя()); Если _СписокОшибок.Найти(ТекстОшибки) = Неопределено Тогда _СписокОшибок.Добавить(ТекстОшибки); КонецЕсли; @@ -163,31 +159,4 @@ КонецПроцедуры -Процедура ПроверитьОтсутствиеДелегатовПриНаличииДругойВерсииИсполняющейСреды() - - ТекстОшибки = - "Использование делегатов как обработчиков событий не поддерживается при запуске в разных версиях 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 439d2f2..17b9d2e 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" @@ -22,9 +22,7 @@ Перем _Категория; // Строка &Сериализуемое("ParameterSets") -&Тип("Массив") -&ДляКаждого -&Тип("ПараметрыМетодаБенчмарка") +&Тип("Массив") &ДляКаждого &Тип("ПараметрыМетодаБенчмарка") Перем _НаборыПараметров; // Массив из ПараметрыМетодаБенчмарка &Сериализуемое("ParameterSources") @@ -84,12 +82,14 @@ Возврат Новый Массив(Новый ФиксированныйМассив(_НаборыПараметров)); КонецФункции -// Добавляет параметры для выполнения бенчмарка, позволяя запускать тесты с различными наборами входных данных. +// Добавляет параметры бенчмарка, позволяя запускать тесты с различными наборами входных данных. +// Принимает значения только примитивного типа. Для составных типов используйте метод ДобавитьИсточникПараметров(). // // Параметры: -// Параметры - Массив из Произвольный - Параметры метода бенчмарка. Длина массива должна соответствовать +// Параметры - Массив из Произвольный - Параметры бенчмарка. Длина массива должна соответствовать // количеству объявленных параметров метода. -// - Произвольный - Значение единственного параметра метода бенчмарка. +// Значения должны быть примитивного типа. +// - Произвольный - Значение единственного параметра бенчмарка (примитивного типа). // // Возвращаемое значение: // ЭтотОбъект @@ -154,7 +154,7 @@ КонецФункции -// Указывает имя экспортного метода, возвращающего коллекцию параметров для бенчмарка. +// Указывает имя экспортного метода, возвращающего коллекцию параметров для бенчмарка // // Если метод бенчмарка принимает более одного параметра, возвращаемая коллекция должна быть одного из следующих типов: // * Массив из Произвольный - Элементы передаются в параметры метода по порядку. @@ -165,7 +165,7 @@ // // Параметры: // Источник - Строка - Имя экспортного метода. Может быть задано в формате: -// <ИмяТипаИлиМодуля>.<ИмяМетода> или <ИмяМетода> (метод класса бенчмарков). +// <ИмяТипаИлиМодуля>.<ИмяМетода> или <ИмяМетода> (в сценарии бенчмарка). // // Возвращаемое значение: // ЭтотОбъект @@ -179,7 +179,7 @@ КонецФункции -// Источники параметров, используемые для запуска бенчмарков с разными наборами входных данных. +// Источники параметров бенчмарка // // Возвращаемое значение: // Массив из Строка - Имя экспортного метода @@ -187,7 +187,7 @@ Возврат Новый Массив(Новый ФиксированныйМассив(_ИсточникиПараметров)); КонецФункции -// Очищает источники параметров. +// Очищает источники параметров бенчмарка // // Возвращаемое значение: // ЭтотОбъект 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 25add88..c32dd6e 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,16 +1,13 @@ #Использовать fs -#Использовать asserts -#Использовать tempfiles #Использовать logos -#Использовать delegate #Использовать allocs Перем _ОбъектБенчмарков; // Экземпляр класса с бенчмарками Перем _Конфигурация; // КонфигурацияБенчмарков Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков -Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов Перем _МониторПамяти; // МониторПамяти Перем _Хронометр; // Хронометр +Перем _Репортер; // КонсольныйРепортерБенчмарков Перем _Лог; // Лог // Запускает бенчмарки @@ -28,6 +25,7 @@ _ОбъектБенчмарков = ОберткаИсточника.ОбъектБенчмарков(); _ДескрипторыБенчмарков = ОберткаИсточника.Дескрипторы(); _Хронометр = Новый Хронометр(); + _Репортер = Новый КонсольныйРепортерБенчмарков(); Если Не Конфигурация = Неопределено Тогда _Конфигурация = Конфигурация; @@ -39,7 +37,6 @@ _МониторПамяти = Новый МониторПамяти(); КонецЕсли; - _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЗапускательБенчмарков"); КонецПроцедуры @@ -49,33 +46,31 @@ // Запускает бенчмарки // // Возвращаемое значение: -// РезультатыБенчмарков +// РезультатЗапускаБенчмарков Функция Запустить() Экспорт ЭтоВоркер = Бенчмаркинг.ЭтоВоркер(); - ЗапускатьВТекущейСреде = _Конфигурация.ИсполняющаяСредаОграниченаТекущей() Или ЭтоВоркер; Валидатор = Новый ВалидаторЗапускаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация); Если Не Валидатор.ЗапускВозможен() Тогда ВызватьИсключение Валидатор.ПолучитьТекстОшибок(); КонецЕсли; - Если ЗапускатьВТекущейСреде Тогда - Результат = ЗапуститьБенчмаркиВТекущейСреде(); + Если ЭтоВоркер Тогда + Результат = ЗапуститьБенчмарки(); Иначе - Результат = ЗапуститьБенчмаркиВоВсехСредах(); + ИзолированныйЗапускатель = Новый ИзолированныйЗапускательБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, _Репортер); + Результат = ИзолированныйЗапускатель.Запустить(); КонецЕсли; Если Не ЭтоВоркер Тогда - ВывестиРезультатыБенчмарков(Результат); + _Репортер.ВывестиРезультатВыполнения(Результат); Иначе Результат.Конфигурация = Новый КонфигурацияБенчмарков(); Результат.ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); КонецЕсли; ЭкспортироватьРезультаты(Результат); - - _МенеджерВременныхФайлов.Удалить(); Возврат Результат; @@ -85,233 +80,20 @@ #Область СлужебныеПроцедурыИФункции -#Область ЗапускВДругихСредах - -Функция ЗапуститьБенчмаркиВоВсехСредах() - - ПередаваемаяКонфигурация = _Конфигурация - .Скопировать() - .УстановитьКаталогАртефактов(_МенеджерВременныхФайлов.НовоеИмяФайла()) - .УдалитьЭкспортеры() - .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json); - - РезультатыБенчмарков = НовыеРезультатыБенчмарков(); - РезультатыБенчмарков.СредаОкружения.ВерсияИсполняющейСреды = ""; - - Для Каждого ИсполняющаяСреда Из _Конфигурация.ВерсииИсполняющейСреды() Цикл - - ЗапускиБенчмарков = ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, ПередаваемаяКонфигурация); - - Для Каждого РезультатЗапускаБенчмарка Из ЗапускиБенчмарков Цикл - РезультатыБенчмарков.Запуски.Добавить(РезультатЗапускаБенчмарка); - КонецЦикла; - - КонецЦикла; - - РезультатыБенчмарков.ОпределитьЭталоны(); - - Построитель = Новый ПостроительОтчетаБенчмарков( - _ДескрипторыБенчмарков, _Конфигурация, РезультатыБенчмарков.Запуски); - - РезультатыБенчмарков.Отчет = Построитель.Сформировать(); - - Возврат РезультатыБенчмарков; - -КонецФункции - -Функция ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, Конфигурация) - - ТаймаутМинут = 10; - МиллисекундВМинуте = 60000; - КаталогАртефактов = Конфигурация.КаталогАртефактов(); - - _Лог.Отладка("Запуск процесса в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); - - ФС.ОбеспечитьПустойКаталог(КаталогАртефактов); - - ВывестиЗаголовок(ИсполняющаяСреда.Версия); - ВывестиКонфигурацию(); - - Процесс = ПодготовитьПроцесс(Конфигурация, ИсполняющаяСреда.Версия); - Процесс.Запустить(); - - ВремяНачала = ТекущаяУниверсальнаяДата(); - - Пока Не ПроверитьЗавершениеПроцесса(Процесс) Цикл - ПрошлоМинут = (ТекущаяУниверсальнаяДата() - ВремяНачала) / МиллисекундВМинуте; - Если ПрошлоМинут >= ТаймаутМинут Тогда - Процесс.Завершить(); - ВызватьИсключение СтрШаблон("Превышено время ожидания (%1 мин.) завершения дочернего процесса", ТаймаутМинут); - КонецЕсли; - КонецЦикла; - - Если Процесс.КодВозврата <> 0 Тогда - ВызватьИсключение СтрШаблон("Завершение процесса с ошибкой в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); - КонецЕсли; - - ЗапускиБенчмарков = ПрочитатьЗапускиБенчмарковИзJSON(КаталогАртефактов, ИсполняющаяСреда); - - УдалитьФайлы(КаталогАртефактов); - - _Лог.Отладка("Завершение процесса в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); - - Возврат ЗапускиБенчмарков; - -КонецФункции - -Функция ПодготовитьПроцесс(Конфигурация, Версия) - - Тип = _ДескрипторыБенчмарков.ПолучитьПервый().ТипОбъекта(); - ИмяФайлаИсполняющейСреды = ИмяФайлаИсполняющейСреды(Версия); - ИмяФайлаТочкиВхода = ТочкаВходаКонсольногоПриложения(); - ИмяФайлаКонфигурации = ЗаписатьНастройкиВФайл(_ДескрипторыБенчмарков, Конфигурация); - ИмяФайлаТипа = Новый РасширениеТипа(Тип).Источник; - КаталогБиблиотек = ИнформацияСредыБенчмарков.КаталогБиблиотек(); - - ПеременныеСреды = ПеременныеСреды(); - ПеременныеСреды.Вставить("OSCRIPT_CONFIG", СтрШаблон("lib.system=%1; systemlanguage=ru", КаталогБиблиотек)); - - СтрокаКоманды = Новый Массив(); - - // oscript.exe - СтрокаКоманды.Добавить(ИмяФайлаИсполняющейСреды); - - // benchos - СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаТочкиВхода)); - - // run - СтрокаКоманды.Добавить("run"); - - // --worker - СтрокаКоманды.Добавить("--worker"); - - // --settings - СтрокаКоманды.Добавить("--settings"); - СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаКонфигурации)); - - // 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 - НовыйРезультатЗапускаБенчмарка.ИсполняющаяСреда.Наименование = ИсполняющаяСреда.Наименование; - - ЗапускиБенчмарков.Добавить(НовыйРезультатЗапускаБенчмарка); - - КонецЦикла; - - КонецЦикла; - - Возврат ЗапускиБенчмарков; - -КонецФункции - -#КонецОбласти - -#Область ЗапускВТекущейСреде - -Функция ЗапуститьБенчмаркиВТекущейСреде() +Функция ЗапуститьБенчмарки() ПрогретьИнструментыЗамера(); Если Не Бенчмаркинг.ЭтоВоркер() Тогда - ВывестиЗаголовок(); - ВывестиКонфигурацию(); + _Репортер.ВывестиЗаголовок(); + _Репортер.ВывестиКонфигурацию(_Конфигурация); КонецЕсли; // Инициализация результатов - РезультатыБенчмарков = НовыеРезультатыБенчмарков(); - + РезультатЗапуска = Новый РезультатЗапускаБенчмарков(); + РезультатЗапуска.ДескрипторыБенчмарков = _ДескрипторыБенчмарков; + РезультатЗапуска.Конфигурация = _Конфигурация; + // Событие ПередВсеми КонтекстСобытия = Новый Структура(); КонтекстСобытия.Вставить("Конфигурация", _Конфигурация); @@ -321,7 +103,7 @@ // Запуск бенчмарков ПараметрыКонфигурации = _Конфигурация.Параметры(); - ПараметрыКонфигурацииИзИсточников = ПрочитатьИсточникиПараметровПолей(); + ПараметрыКонфигурацииИзИсточников = ПрочитатьОбщиеПараметрыИзИсточников(); Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл @@ -329,7 +111,7 @@ ДополнитьМассив(НаборыПараметров, ПараметрыКонфигурации); ДополнитьМассив(НаборыПараметров, ПараметрыКонфигурацииИзИсточников); ДополнитьМассив(НаборыПараметров, ДескрипторБенчмарка.НаборыПараметров()); - ДополнитьМассив(НаборыПараметров, ПрочитатьИсточникиПараметровМетодаБенчмарка(ДескрипторБенчмарка)); + ДополнитьМассив(НаборыПараметров, ПрочитатьПараметрыБенчмаркаИзИсточников(ДескрипторБенчмарка)); КомбинацииПараметров = КомбинаторПараметровБенчмарка.Комбинировать(НаборыПараметров); @@ -339,38 +121,38 @@ Для Каждого Параметры Из КомбинацииПараметров Цикл РезультатЗапускаБенчмарка = ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры); - РезультатыБенчмарков.Запуски.Добавить(РезультатЗапускаБенчмарка); + РезультатЗапуска.Запуски.Добавить(РезультатЗапускаБенчмарка); КонецЦикла; КонецЦикла; // Подготовка результатов - РезультатыБенчмарков.ОпределитьЭталоны(); - РезультатыБенчмарков.ОбновитьСтатистику(); + РезультатЗапуска.ОпределитьЭталоны(); + РезультатЗапуска.ОбновитьСтатистику(); Построитель = Новый ПостроительОтчетаБенчмарков( - _ДескрипторыБенчмарков, _Конфигурация, РезультатыБенчмарков.Запуски); + _ДескрипторыБенчмарков, _Конфигурация, РезультатЗапуска.Запуски); - РезультатыБенчмарков.Отчет = Построитель.Сформировать(); + РезультатЗапуска.Отчет = Построитель.Сформировать(); // Событие ПослеВсех КонтекстСобытия = Новый Структура(); - КонтекстСобытия.Вставить("Конфигурация", РезультатыБенчмарков.Конфигурация); - КонтекстСобытия.Вставить("ДескрипторыБенчмарков", РезультатыБенчмарков.ДескрипторыБенчмарков); - КонтекстСобытия.Вставить("Запуски", РезультатыБенчмарков.Запуски); - КонтекстСобытия.Вставить("Отчет", РезультатыБенчмарков.Отчет); - КонтекстСобытия.Вставить("СредаОкружения", РезультатыБенчмарков.СредаОкружения); + КонтекстСобытия.Вставить("Конфигурация", РезультатЗапуска.Конфигурация); + КонтекстСобытия.Вставить("ДескрипторыБенчмарков", РезультатЗапуска.ДескрипторыБенчмарков); + КонтекстСобытия.Вставить("Запуски", РезультатЗапуска.Запуски); + КонтекстСобытия.Вставить("Отчет", РезультатЗапуска.Отчет); + КонтекстСобытия.Вставить("СредаОкружения", РезультатЗапуска.СредаОкружения); ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, КонтекстСобытия); - Возврат РезультатыБенчмарков; + Возврат РезультатЗапуска; КонецФункции Функция ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры) - ВывестиЗаголовокБенчмарка(ДескрипторБенчмарка); - ВывестиПараметры(Параметры); + _Репортер.ВывестиЗаголовокБенчмарка(ДескрипторБенчмарка); + _Репортер.ВывестиПараметры(Параметры); ПараметрыМетода = ПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры); УстановитьПараметрыОбъекта(Параметры); @@ -383,7 +165,6 @@ Если Бенчмаркинг.ЭтоВоркер() Тогда РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия = Новый СистемнаяИнформация().Версия; - РезультатЗапускаБенчмарка.ИсполняющаяСреда.Алиас = "current"; КонецЕсли; // Событие ПередКаждым @@ -411,7 +192,7 @@ // Сбор статистики РезультатЗапускаБенчмарка.Статистика.Прочитать(РезультатЗапускаБенчмарка.Замеры); - ВывестиСтатистику(РезультатЗапускаБенчмарка.Статистика); + _Репортер.ВывестиСтатистику(РезультатЗапускаБенчмарка.Статистика); // Событие ПослеКаждого КонтекстСобытия = Новый Структура(); @@ -554,10 +335,10 @@ РезультатИтерации.ВыделяемаяПамятьЗаОперацию = ВыделяемаяПамять / КоличествоВызовов; Если НомерИтерации = 1 Тогда - ВывестиСтроку(" "); + _Репортер.ВывестиСтроку(" "); КонецЕсли; - ВывестиСтроку(ПредставлениеРезультатаИтерации(РезультатИтерации), "Серый"); + _Репортер.ВывестиСтроку(ПредставлениеРезультатаИтерации(РезультатИтерации), "Серый"); Возврат РезультатИтерации; @@ -611,15 +392,16 @@ Процедура ВызватьОбработчикСобытия(ИмяСобытия, Контекст = Неопределено) Экспорт - МассивДелегатов = _Конфигурация.ДелегатыОбработчиковСобытия(ИмяСобытия, _ОбъектБенчмарков, Контекст); - - Для Каждого Делегат Из МассивДелегатов Цикл + Обработчики = _Конфигурация.ОбработчикиСобытия(ИмяСобытия); + + Для Каждого Обработчик Из Обработчики Цикл - _Лог.Отладка("Начало вызова обработчика <%1> события <%2>", Делегат.ИмяМетода(), ИмяСобытия); + _Лог.Отладка("Начало вызова обработчика <%1> события <%2>", Обработчик.ИмяМетода(), ИмяСобытия); - Делегат.Исполнить(); + Делегат = Обработчик.Делегат(_ОбъектБенчмарков); + Делегат.Выполнить(Контекст); - _Лог.Отладка("Завершение вызова обработчика <%1> события <%2>", Делегат.ИмяМетода(), ИмяСобытия); + _Лог.Отладка("Завершение вызова обработчика <%1> события <%2>", Обработчик.ИмяМетода(), ИмяСобытия); КонецЦикла; @@ -636,8 +418,8 @@ ПараметрыМетода = Новый Массив(ИменаПараметров.Количество()); Для Каждого Параметр Из Параметры Цикл - Если Параметр.ЭтоПараметрМетода Тогда - ПараметрыМетода[ИменаПараметров.Найти(Параметр.Имя)] = Параметр.Значение; + Если Параметр.ЭтоПараметрМетода() Тогда + ПараметрыМетода[ИменаПараметров.Найти(Параметр.Имя())] = Параметр.Значение(); КонецЕсли; КонецЦикла; @@ -654,31 +436,31 @@ ШаблонОшибки = "Не удалось задать значение поля <%1> для объекта <%2>"; Для Каждого Параметр Из Параметры Цикл - Если Не Параметр.ЭтоПараметрМетода Тогда + Если Не Параметр.ЭтоПараметрМетода() Тогда Попытка - _ОбъектБенчмарков[Параметр.Имя] = Параметр.Значение; + _ОбъектБенчмарков[Параметр.Имя()] = Параметр.Значение(); Исключение - ВызватьИсключение СтрШаблон(ШаблонОшибки, Параметр.Имя, ТипЗнч(_ОбъектБенчмарков)); + ВызватьИсключение СтрШаблон(ШаблонОшибки, Параметр.Имя(), ТипЗнч(_ОбъектБенчмарков)); КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры -Функция ПрочитатьИсточникиПараметровПолей() +Функция ПрочитатьОбщиеПараметрыИзИсточников() Результат = Новый Массив(); Для Каждого ИсточникПараметров Из _Конфигурация.ИсточникиПараметров() Цикл Читатель = Новый ЧитательПараметровБенчмарков(ИсточникПараметров.Источник, _ОбъектБенчмарков); - ДополнитьМассив(Результат, Читатель.ПрочитатьКакПараметрыПоля(ИсточникПараметров.ИмяПоля)); + ДополнитьМассив(Результат, Читатель.ПрочитатьКакОбщиеПараметры(ИсточникПараметров.ИмяПоля)); КонецЦикла; Возврат Результат; КонецФункции -Функция ПрочитатьИсточникиПараметровМетодаБенчмарка(ДескрипторБенчмарка) +Функция ПрочитатьПараметрыБенчмаркаИзИсточников(ДескрипторБенчмарка) Результат = Новый Массив(); @@ -740,8 +522,6 @@ КонецФункции -#КонецОбласти - Процедура ЭкспортироватьРезультаты(Результаты) КаталогАртефактов = _Конфигурация.КаталогАртефактов(); @@ -769,125 +549,18 @@ Артефакты = НайтиФайлы(КаталогАртефактов, МаскаФайлов); Если Артефакты.Количество() Тогда - ВывестиСтроку(" "); - ВывестиСтроку("// Артефакты", "Малиновый"); + _Репортер.ВывестиСтроку(" "); + _Репортер.ВывестиСтроку("// Артефакты", "Малиновый"); КонецЕсли; Для Каждого Артефакт Из Артефакты Цикл - ВывестиСтроку(Артефакт.ПолноеИмя, "ТемноЖелтый"); + _Репортер.ВывестиСтроку(Артефакт.ПолноеИмя, "ТемноЖелтый"); КонецЦикла; КонецЕсли; КонецПроцедуры -Процедура ВывестиРезультатыБенчмарков(Результат) - - // Среда окружения - ТекстСреды = Результат.СредаОкружения.ВСтроку(); - ТекстСреды = СтрЗаменить(ТекстСреды, Символы.ПС, " \" + Символы.ПС); - - ВывестиСтроку(" "); - ВывестиСтроку("// Сводка", "Малиновый"); - ВывестиСтроку(ТекстСреды, "ТемноЖелтый"); - - // Отчет в Markdown - ВывестиСтроку(" "); - ВывестиСтроку(Результат.Отчет.КакMarkdown(), "Бирюза"); - - // Легенда - ВывестиСтроку(" "); - ВывестиСтроку("// Легенда", "Малиновый"); - ВывестиСтроку(Результат.Отчет.Легенда(), "Синий"); - -КонецПроцедуры - -Процедура ВывестиЗаголовок(Версия = "") - - Если Не ЗначениеЗаполнено(Версия) Тогда - Версия = Новый СистемнаяИнформация().Версия; - КонецЕсли; - - ВывестиСтроку(" "); - ВывестиСтроку(СтрШаблон("*** Запуск бенчмарков в исполняющей среде OneScript <%1> ***", Версия), "Синий"); - -КонецПроцедуры - -Процедура ВывестиКонфигурацию() - - ВывестиСтроку(" "); - ВывестиСтроку("// Конфигурация", "Малиновый"); - ВывестиСтроку(_Конфигурация.ВСтроку(), "ТемноЖелтый"); - -КонецПроцедуры - -Процедура ВывестиСтатистику(Статистика) - - ВывестиСтроку(" "); - ВывестиСтроку("// Статистика", "Малиновый"); - ВывестиСтроку(Статистика.ВСтроку(), "Бирюза"); - -КонецПроцедуры - -Процедура ВывестиЗаголовокБенчмарка(ДескрипторБенчмарка) - - Текст = СтрШаблон("// Бенчмарк: %1.%2", ДескрипторБенчмарка.ТипОбъекта(), ДескрипторБенчмарка.Метод()); - - ВывестиСтроку(" "); - ВывестиСтроку(Текст, "Малиновый"); - -КонецПроцедуры - -Процедура ВывестиПараметры(Параметры) - - Цвет = "ТемноЖелтый"; - - Если Параметры.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Вывести("Параметры: ", Цвет); - - ЭтоПервыйПараметр = Истина; - Для Каждого Параметр Из Параметры Цикл - - Если Не ЭтоПервыйПараметр Тогда - Вывести(", ", Цвет); - КонецЕсли; - - Вывести(СтрШаблон("%1 = %2", Параметр.Имя, Строка(Параметр.Значение)), Цвет); - - ЭтоПервыйПараметр = Ложь; - - КонецЦикла; - - ВывестиСтроку(""); - -КонецПроцедуры - -Процедура ВывестиСтроку(Текст, Цвет = Неопределено) - КонсольныйВыводБенчмаркера.ВывестиСтроку(Текст, Цвет); -КонецПроцедуры - -Процедура Вывести(Текст, Цвет = Неопределено) - КонсольныйВыводБенчмаркера.Вывести(Текст, Цвет); -КонецПроцедуры - -Функция ОбернутьВКавычки(Строка) - Кавычка = ?(ИнформацияСредыБенчмарков.ЭтоWindows(), """", "'"); - Возврат СтрШаблон("%2%1%2", Строка, Кавычка); -КонецФункции - -Функция НовыеРезультатыБенчмарков() Экспорт - - Результаты = Новый РезультатыБенчмарков(); - Результаты.ДескрипторыБенчмарков = _ДескрипторыБенчмарков; - Результаты.Конфигурация = _Конфигурация; - - Возврат Результаты; - -КонецФункции - Процедура ДополнитьМассив(Приемник, Источник) Для Каждого Значение Из Источник Цикл 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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" index e16024e..d0372dc 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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.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\320\230\320\267\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.os" @@ -43,7 +43,7 @@ Для Каждого Файл Из Файлы Цикл - Тип = Бенчмаркинг.ПодключитьКласс(Файл.ПолноеИмя); + Тип = Бенчмаркинг.ПодключитьБенчмарк(Файл.ПолноеИмя); Если Тип = Неопределено Тогда Продолжить; КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\267\320\276\320\273\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\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\230\320\267\320\276\320\273\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\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" new file mode 100644 index 0000000..3a37deb --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\320\267\320\276\320\273\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\271\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" @@ -0,0 +1,530 @@ +#Использовать fs +#Использовать tempfiles +#Использовать logos + +Перем _Конфигурация; // КонфигурацияБенчмарков +Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков +Перем _Репортер; // КонсольныйРепортерБенчмарков +Перем _ЛокаторИсполняющейСреды; // ЛокаторИсполняющейСреды +Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов +Перем _Лог; // Лог +Перем _ЖурналСообщенийПроцесса; // Массив из Строка + +#Область ОбработчикиСобытий + +// Запускает бенчмарки +// +// Параметры: +// ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// Конфигурация - КонфигурацияБенчмарков +// Репортер - КонсольныйРепортерБенчмарков +Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, Репортер) + + _ДескрипторыБенчмарков = ДескрипторыБенчмарков; + _Конфигурация = Конфигурация; + _Репортер = Репортер; + _ЛокаторИсполняющейСреды = Новый ЛокаторИсполняющейСреды(); + _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); + _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ИзолированныйЗапускательБенчмарков"); + _ЖурналСообщенийПроцесса = Новый Массив(); + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Запускает изолированно бенчмарки +// +// Возвращаемое значение: +// РезультатЗапускаБенчмарков +Функция Запустить() Экспорт + + _ЖурналСообщенийПроцесса.Очистить(); + + ПередаваемаяКонфигурация = _Конфигурация + .Скопировать() + .УстановитьКаталогАртефактов(_МенеджерВременныхФайлов.НовоеИмяФайла()) + .УдалитьЭкспортеры() + .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json); + + РезультатЗапуска = Новый РезультатЗапускаБенчмарков(); + РезультатЗапуска.ДескрипторыБенчмарков = _ДескрипторыБенчмарков; + РезультатЗапуска.Конфигурация = _Конфигурация; + + ВерсииИсполняющейСреды = _Конфигурация.ВерсииИсполняющейСреды(); + ВыполнятьВТекущейВерсии = ВерсииИсполняющейСреды.Количество() = 0; + + Если ВыполнятьВТекущейВерсии Тогда + ВерсииИсполняющейСреды.Добавить(); + КонецЕсли; + + Для Каждого ИсполняющаяСреда Из ВерсииИсполняющейСреды Цикл + + Попытка + ТекущиеРезультатыЗапуска = ЗапуститьВИсполняющейСреде(ПередаваемаяКонфигурация, ИсполняющаяСреда); + Исключение + УдалитьАртефакты(); + ВызватьИсключение; + КонецПопытки; + + Если ТекущиеРезультатыЗапуска = Неопределено Тогда + Продолжить; + КонецЕсли; + + РезультатЗапуска.СредаОкружения = ТекущиеРезультатыЗапуска.СредаОкружения; + + Для Каждого РезультатЗапускаБенчмарка Из ТекущиеРезультатыЗапуска.Запуски Цикл + + Если ВыполнятьВТекущейВерсии Тогда + РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия = ""; + Иначе + РезультатЗапускаБенчмарка.ИсполняющаяСреда.Алиас = ИсполняющаяСреда.Версия; + РезультатЗапускаБенчмарка.ИсполняющаяСреда.Наименование = ИсполняющаяСреда.Наименование; + КонецЕсли; + + РезультатЗапуска.Запуски.Добавить(РезультатЗапускаБенчмарка); + + КонецЦикла; + + КонецЦикла; + + Если ВерсииИсполняющейСреды.Количество() > 1 Тогда + РезультатЗапуска.СредаОкружения.ВерсияИсполняющейСреды = ""; + КонецЕсли; + + РезультатЗапуска.ОпределитьЭталоны(); + + Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, РезультатЗапуска.Запуски); + + РезультатЗапуска.Отчет = Построитель.Сформировать(); + + УдалитьАртефакты(); + + Возврат РезультатЗапуска; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЗапуститьВИсполняющейСреде(Конфигурация, ИсполняющаяСреда) + + КаталогАртефактов = Конфигурация.КаталогАртефактов(); + ФС.ОбеспечитьПустойКаталог(КаталогАртефактов); + + Если ЗначениеЗаполнено(ИсполняющаяСреда.Версия) Тогда + ФайлИлиВерсия = ИсполняющаяСреда.Версия; + Версия = ИсполняющаяСреда.Версия; + Иначе + ФайлИлиВерсия = _ЛокаторИсполняющейСреды.НайтиИсполняемыйФайлВКаталоге(КаталогПрограммы()); + Версия = Новый СистемнаяИнформация().Версия; + КонецЕсли; + + _Лог.Отладка("Запуск процесса в версии <%1> исполняющей среды", Версия); + + _Репортер.ВывестиЗаголовок(Версия); + _Репортер.ВывестиКонфигурацию(_Конфигурация); + + Процесс = ПодготовитьПроцесс(Конфигурация, ФайлИлиВерсия); + Процесс.Запустить(); + + ОжидатьЗавершениеПроцесса(Процесс); + ОбработатьВыполнениеПроцесса(Процесс, Версия); + + РезультатЗапуска = ПрочитатьРезультатЗапускаБенчмарковИзJSON(КаталогАртефактов); + + _Лог.Отладка("Завершение процесса в версии <%1> исполняющей среды", Версия); + + Возврат РезультатЗапуска; + +КонецФункции + +Функция ПодготовитьПроцесс(Конфигурация, Версия) + + РабочийКаталог = _МенеджерВременныхФайлов.СоздатьКаталог(); + ПутьИсполняемогоФайла = ОпределитьИсполняемыйФайл(Версия); + ПутьСтартовогоСценария = ПодготовитьСтартовыйСценарий(Конфигурация, РабочийКаталог); + + ПодготовитьКонфигурационныйФайл(РабочийКаталог); + + СтрокаКоманды = Новый Массив(); + СтрокаКоманды.Добавить(ОбернутьВКавычкиДляWindows(ПутьИсполняемогоФайла)); + СтрокаКоманды.Добавить(ОбернутьВКавычки(ПутьСтартовогоСценария)); + СтрокаКоманды = СтрСоединить(СтрокаКоманды, " "); + + _Лог.Отладка("Строка запуска <%1>", СтрокаКоманды); + + Попытка + Процесс = СоздатьПроцесс(СтрокаКоманды, РабочийКаталог, Истина); + Исключение + ТекстОшибки = ИнформацияОбОшибке().ПодробноеОписаниеОшибки(); + ВызватьИсключение СтрШаблон("Не удалось запустить процесс бенчмаркинга для версии <%1>. + |Ошибка: %2", + Версия, + ТекстОшибки); + КонецПопытки; + + Возврат Процесс; + +КонецФункции + +Процедура ОжидатьЗавершениеПроцесса(Процесс) + + ТаймаутСекунд = 600; + + ВремяНачала = ТекущаяУниверсальнаяДата(); + Пока Не ПроверитьЗавершениеПроцесса(Процесс) Цикл + ПрошлоСекунд = (ТекущаяУниверсальнаяДата() - ВремяНачала); + Если ПрошлоСекунд >= ТаймаутСекунд Тогда + Процесс.Завершить(); + ВызватьИсключение СтрШаблон("Превышено время ожидания (%1 сек.) завершения дочернего процесса", ТаймаутСекунд); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ПроверитьЗавершениеПроцесса(Процесс) + + ПериодОпросаВМиллисекундах = 100; + + Приостановить(ПериодОпросаВМиллисекундах); + + Если Процесс.ПотокВывода.ЕстьДанные Тогда + Текст = Процесс.ПотокВывода.Прочитать(); + _Репортер.ВывестиСтроку(Текст); + _ЖурналСообщенийПроцесса.Добавить(Текст); + КонецЕсли; + + Если Процесс.ПотокОшибок.ЕстьДанные Тогда + Текст = Процесс.ПотокОшибок.Прочитать(); + _Репортер.ВывестиСтроку(Текст); + _ЖурналСообщенийПроцесса.Добавить(Текст); + КонецЕсли; + + Возврат Процесс.Завершен; + +КонецФункции + +Процедура ОбработатьВыполнениеПроцесса(Процесс, Версия) + + Если Процесс.КодВозврата = 0 Тогда + Возврат; + КонецЕсли; + + ТекстОшибки = НайтиПоследнююОшибку(); + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ТекстОшибки = ": " + ТекстОшибки; + КонецЕсли; + + ВызватьИсключение СтрШаблон("Завершение процесса с ошибкой в версии <%1> исполняющей среды%2", Версия, ТекстОшибки); + +КонецПроцедуры + +#Область КонфигурационныйФайл + +Процедура ПодготовитьКонфигурационныйФайл(КаталогСохранения) + + ПутьФайла = ОбъединитьПути(КаталогСохранения, "oscript.cfg"); + + ПрочитанныеНастройки = НайтиИПрочитатьКонфигурационныеФайлы(); + ДополнитьСистемныеНастройкиКаталогамиБиблиотек(ПрочитанныеНастройки); + + МассивСтрок = Новый Массив(); + Для Каждого Строка Из ПрочитанныеНастройки Цикл + МассивСтрок.Добавить(СтрШаблон("%1=%2", Строка.Ключ, Строка.Значение)); + КонецЦикла; + + Если МассивСтрок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ТекстКонфигурации = СтрСоединить(МассивСтрок, Символы.ПС); + + ЗаписьТекста = Новый ЗаписьТекста(ПутьФайла); + ЗаписьТекста.Записать(ТекстКонфигурации); + ЗаписьТекста.Закрыть(); + + _Лог.Отладка( + "Текст конфигурационного файла: + |%1", + ТекстКонфигурации + ); + +КонецПроцедуры + +Процедура ДополнитьСистемныеНастройкиКаталогамиБиблиотек(Настройки) + + ИмяДополняемойНастройки = "lib.additional"; + ИменаИсточников = СтрРазделить("lib.additional,lib.system", ","); + + Для Каждого ИмяНастройки Из ИменаИсточников Цикл + + КаталогиБиблиотек = ПолучитьЗначениеСистемнойНастройки(ИмяНастройки); + Если Не ЗначениеЗаполнено(КаталогиБиблиотек) Тогда + Продолжить; + КонецЕсли; + + // Предполагается, что настройка задана через переменную среды, + // поэтому пути разрешаются относительно текущего каталога. + КаталогиБиблиотек = РазрешитьПутиКаталоговБиблиотекИзНастройки(КаталогиБиблиотек, ТекущийКаталог()); + + ИсходноеЗначение = Настройки[ИмяДополняемойНастройки]; + Если ЗначениеЗаполнено(ИсходноеЗначение) Тогда + НовоеЗначение = ИсходноеЗначение + ";" + КаталогиБиблиотек; + Иначе + НовоеЗначение = КаталогиБиблиотек; + КонецЕсли; + + Настройки[ИмяДополняемойНастройки] = НовоеЗначение; + + КонецЦикла; + +КонецПроцедуры + +Функция НайтиИПрочитатьКонфигурационныеФайлы() + + ИмяФайла = "oscript.cfg"; + + КаталогиПоиска = Новый Массив(); + КаталогиПоиска.Добавить(Новый Файл(ПутьКФайлуБенчмарка()).Путь); + КаталогиПоиска.Добавить(СтартовыйСценарий().Каталог); + КаталогиПоиска.Добавить(ТекущийКаталог()); + + ПрочитанныеНастройки = Новый Соответствие(); + + Для Каждого Каталог Из КаталогиПоиска Цикл + + ПутьКФайлу = ОбъединитьПути(Каталог, ИмяФайла); + Если Не ФС.ФайлСуществует(ПутьКФайлу) Тогда + Продолжить; + КонецЕсли; + + ПрочитатьКонфигурационныйФайл(ПутьКФайлу, ПрочитанныеНастройки); + + КонецЦикла; + + Возврат ПрочитанныеНастройки; + +КонецФункции + +Процедура ПрочитатьКонфигурационныйФайл(ПутьКФайлу, ПрочитанныеНастройки) + + КаталогРазрешенияПутей = Новый Файл(ПутьКФайлу).Путь; + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу); + СодержимоеФайла = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + РегулярноеВыражение = Новый РегулярноеВыражение("^(?!\s*#)\s*([^=\r\n]+?)\s*=\s*(.*)$"); + Совпадения = РегулярноеВыражение.НайтиСовпадения(СодержимоеФайла); + + Для Каждого Совпадение Из Совпадения Цикл + + Ключ = НРег(Совпадение.Группы[1].Значение); + Значение = Совпадение.Группы[2].Значение; + + Если Ключ = "lib.system" Или Ключ = "lib.additional" Тогда + Значение = РазрешитьПутиКаталоговБиблиотекИзНастройки(Значение, КаталогРазрешенияПутей); + КонецЕсли; + + ПрочитанныеНастройки.Вставить(Ключ, Значение); + + КонецЦикла; + +КонецПроцедуры + +Функция РазрешитьПутиКаталоговБиблиотекИзНастройки(Значение, КаталогРазрешенияПутей) + Пути = СтрРазделить(Значение, ";"); + Возврат СтрСоединить(РазрешитьПутиФС(Пути, КаталогРазрешенияПутей), ";"); +КонецФункции + +#КонецОбласти + +Функция ЗаписатьНастройкиКонфигурацииВФайл(Конфигурация) + + ПутьКФайлу = _МенеджерВременныхФайлов.СоздатьФайл("json"); + + Сериализатор = Новый СериализаторНастроекБенчмарков(); + Сериализатор.ЗаписатьВJson(_ДескрипторыБенчмарков, Конфигурация, ПутьКФайлу); + + Возврат ПутьКФайлу; + +КонецФункции + +Функция ПодготовитьСтартовыйСценарий(Конфигурация, РабочийКаталог) + + ПутьКСценарию = ОбъединитьПути(РабочийКаталог, "main.os"); + ПутьКБиблиотеке = ФС.НормализоватьПуть(ОбъединитьПути(ТекущийСценарий().Каталог, "../../../..")); + ПутьКФайлуБенчмарка = ПутьКФайлуБенчмарка(); + ПутьФайлаКонфигурации = ЗаписатьНастройкиКонфигурацииВФайл(Конфигурация); + ИмяТипаБенчмарка = Строка(_ДескрипторыБенчмарков.ПолучитьПервый().ТипОбъекта()); + + ТекстСценария = " + |#Использовать """ + ПутьКБиблиотеке + """ + | + |УстановитьПеременнуюСреды(""BENCHMARK_WORKER"", 1); + | + |Тип = Бенчмаркинг.ПодключитьБенчмарк(""" + ПутьКФайлуБенчмарка + """, """ + ИмяТипаБенчмарка + """); + | + |Сериализатор = Новый СериализаторНастроекБенчмарков(); + |Настройки = Сериализатор.ПрочитатьИзJson(""" + ПутьФайлаКонфигурации + """); + | + |Бенчмаркинг.Запустить(Настройки.ДескрипторыБенчмарков, Настройки.Конфигурация);"; + + ЗаписьТекста = Новый ЗаписьТекста(ПутьКСценарию); + ЗаписьТекста.Записать(ТекстСценария); + ЗаписьТекста.Закрыть(); + + _Лог.Отладка( + "Текст стартового сценария: + |%1", + ТекстСценария + ); + + Возврат ПутьКСценарию; + +КонецФункции + +Функция ПутьКФайлуБенчмарка() + ТипОбъектаБенчмарка = _ДескрипторыБенчмарков.ПолучитьПервый().ТипОбъекта(); + Возврат Новый РасширениеТипа(ТипОбъектаБенчмарка).Источник; +КонецФункции + +Функция ОпределитьИсполняемыйФайл(Версия) + + Если ФС.ФайлСуществует(Версия) Тогда + Возврат Версия; + КонецЕсли; + + КаталогУстановки = _ЛокаторИсполняющейСреды.ОпределитьКаталогУстановки(); + Если КаталогУстановки = Неопределено Тогда + ВызватьИсключение + "Не найден каталог с установленными версиями OneScript. + |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно."; + КонецЕсли; + + _Лог.Отладка(СтрШаблон("Каталог с установленными версиями OneScript: %1", КаталогУстановки)); + + ПутьФайла = _ЛокаторИсполняющейСреды.НайтиИсполняемыйФайл(Версия); + Если ПутьФайла = Неопределено Тогда + ВызватьИсключение СтрШаблон( + "Не найдена установленная версия OneScript (%1). Установите её командой: ovm install %1", Версия); + КонецЕсли; + + _Лог.Отладка(СтрШаблон("Найден исполняемый файл OneScript: %1", ПутьФайла)); + + Возврат ПутьФайла; + +КонецФункции + +Функция ПрочитатьРезультатЗапускаБенчмарковИзJSON(Каталог) + + ИмяТипа = Строка(_ДескрипторыБенчмарков.ПолучитьПервый().ТипОбъекта()); + ПутьКОтчету = ОбъединитьПути(Каталог, СтрШаблон("%1-report.json", ИмяТипа)); + + Если Не ФС.ФайлСуществует(ПутьКОтчету) Тогда + Возврат Неопределено; + КонецЕсли; + + Сериализатор = Новый СериализаторРезультатовБенчмарков(); + РезультатЗапуска = Сериализатор.ПрочитатьИзJson(ПутьКОтчету); + + Возврат РезультатЗапуска; + +КонецФункции + +Функция НайтиПоследнююОшибку() + + КоличествоПроверяемыхСообщений = 10; + КускиТекста = Новый Массив(); + КоличествоСообщений = _ЖурналСообщенийПроцесса.Количество(); + + Для ИндексСообщения = 1 По Мин(КоличествоПроверяемыхСообщений, КоличествоСообщений) Цикл + + Текст = _ЖурналСообщенийПроцесса[КоличествоСообщений - ИндексСообщения]; + Строки = СтрРазделить(Текст, Символы.ПС); + КоличествоСтрок = Строки.Количество(); + + Для ИндексСтроки = 1 По КоличествоСтрок Цикл + Строка = Строки[КоличествоСтрок - ИндексСтроки]; + КускиТекста.Добавить(Строка); + + Если СтрНачинаетсяС(Строка, "{Модуль ") Или СтрНачинаетсяС(Строка, "{Module ") Тогда + Возврат ИзвлечьКраткоеОписаниеОшибки(СтрСоединить(КускиТекста, Символы.ПС)); + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + Возврат ""; + +КонецФункции + +Функция ИзвлечьКраткоеОписаниеОшибки(ТекстОшибки) + + Инд = СтрНайти(ТекстОшибки, "Ошибка в строке"); + + Если Инд = 0 Тогда + Инд = СтрНайти(ТекстОшибки, "Error in line"); + КонецЕсли; + + Если Инд = 0 Тогда + Возврат ТекстОшибки; + КонецЕсли; + + Инд = СтрНайти(ТекстОшибки, "/", , Инд); + + Если Инд = 0 Тогда + Возврат ТекстОшибки; + КонецЕсли; + + Возврат Сред(ТекстОшибки, Инд + 2); + +КонецФункции + +Процедура УдалитьАртефакты() + _МенеджерВременныхФайлов.Удалить(); +КонецПроцедуры + +Функция ОбернутьВКавычки(Строка) + Кавычка = ?(ЭтоWindows(), """", "'"); + Возврат СтрШаблон("%2%1%2", Строка, Кавычка); +КонецФункции + +Функция ОбернутьВКавычкиДляWindows(Строка) + Если ЭтоWindows() Тогда + Возврат ОбернутьВКавычки(Строка); + Иначе + Возврат Строка; + КонецЕсли; +КонецФункции + +// Определяет, является ли текущая ОС Windows +// +// Возвращаемое значение: +// Булево +Функция ЭтоWindows() + + СистемнаяИнформация = Новый СистемнаяИнформация(); + ТекущаяПлатформа = СистемнаяИнформация.ТипПлатформы; + + Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 + Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + +КонецФункции + +Функция РазрешитьПутиФС(Пути, КаталогРазрешенияПутей) + + Результат = Новый Массив(); + + Для Каждого Путь Из Пути Цикл + Результат.Добавить(РаботаСПутямиФайловойСистемы.ПолучитьАбсолютныйПуть(Путь, КаталогРазрешенияПутей)); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти \ 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\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\240\320\265\320\277\320\276\321\200\321\202\320\265\321\200\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\201\320\276\320\273\321\214\320\275\321\213\320\271\320\240\320\265\320\277\320\276\321\200\321\202\320\265\321\200\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..22657ec --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\240\320\265\320\277\320\276\321\200\321\202\320\265\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,165 @@ +#Использовать coloratos + +#Область ПрограммныйИнтерфейс + +// Выводит результат запуска бенчмарков +// +// Параметры: +// Результат - РезультатЗапускаБенчмарков +Процедура ВывестиРезультатВыполнения(Результат) Экспорт + + // Среда окружения + ТекстСреды = Строка(Результат.СредаОкружения); + ТекстСреды = СтрЗаменить(ТекстСреды, Символы.ПС, " \" + Символы.ПС); + + ВывестиСтроку(" "); + ВывестиСтроку("// Сводка", "Малиновый"); + ВывестиСтроку(ТекстСреды, "ТемноЖелтый"); + + // Отчет в Markdown + ВывестиСтроку(" "); + ВывестиСтроку(Результат.Отчет.КакMarkdown(), "Бирюза"); + + // Легенда + ВывестиСтроку(" "); + ВывестиСтроку("// Легенда", "Малиновый"); + ВывестиСтроку(Результат.Отчет.Легенда(), "Синий"); + +КонецПроцедуры + +// Выводит заголовок запуска бенчмарков +// +// Параметры: +// Версия - Строка - Версия исполняющей среды OneScript. +// Если не указана, определяется автоматически. +Процедура ВывестиЗаголовок(Версия = "") Экспорт + + Если Не ЗначениеЗаполнено(Версия) Тогда + Версия = Новый СистемнаяИнформация().Версия; + КонецЕсли; + + ВывестиСтроку(" "); + ВывестиСтроку(СтрШаблон("*** Запуск бенчмарков в исполняющей среде OneScript <%1> ***", Версия), "Синий"); + +КонецПроцедуры + +// Выводит информацию о конфигурации запуска бенчмарков +// +// Параметры: +// Конфигурация - КонфигурацияБенчмарков +Процедура ВывестиКонфигурацию(Конфигурация) Экспорт + + ВывестиСтроку(" "); + ВывестиСтроку("// Конфигурация", "Малиновый"); + ВывестиСтроку(Строка(Конфигурация), "ТемноЖелтый"); + +КонецПроцедуры + +// Выводит агрегированную статистику запуска бенчмарков +// +// Параметры: +// Статистика - СтатистикаБенчмарка +Процедура ВывестиСтатистику(Статистика) Экспорт + + ВывестиСтроку(" "); + ВывестиСтроку("// Статистика", "Малиновый"); + ВывестиСтроку(Строка(Статистика), "Бирюза"); + +КонецПроцедуры + +// Выводит заголовок текущего бенчмарка +// +// Параметры: +// ДескрипторБенчмарка - ДескрипторБенчмарка +Процедура ВывестиЗаголовокБенчмарка(ДескрипторБенчмарка) Экспорт + + Текст = СтрШаблон("// Бенчмарк: %1.%2", ДескрипторБенчмарка.ТипОбъекта(), ДескрипторБенчмарка.Метод()); + + ВывестиСтроку(" "); + ВывестиСтроку(Текст, "Малиновый"); + +КонецПроцедуры + +// Выводит список параметров +// +// Параметры: +// Параметры - Массив из ПараметрБенчмарка - Коллекция параметров бенчмарка +Процедура ВывестиПараметры(Параметры) Экспорт + + Цвет = "ТемноЖелтый"; + + Если Параметры.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Вывести("Параметры: ", Цвет); + + ЭтоПервыйПараметр = Истина; + Для Каждого Параметр Из Параметры Цикл + + Если Не ЭтоПервыйПараметр Тогда + Вывести(", ", Цвет); + КонецЕсли; + + Вывести(СтрШаблон("%1 = %2", Параметр.Имя(), Строка(Параметр.Представление())), Цвет); + + ЭтоПервыйПараметр = Ложь; + + КонецЦикла; + + ВывестиСтроку(""); + +КонецПроцедуры + +// Выводит строку в консоль с переводом строки +// +// Параметры: +// Текст - Строка - Выводимый текст +// Цвет - Строка - Имя цвета для оформления вывода +Процедура ВывестиСтроку(Текст, Цвет = Неопределено) Экспорт + + Если Бенчмаркинг.ЭтоВоркер() И Не Цвет = Неопределено Тогда + ЦветнойВывод.ВывестиСтроку(ТекстСЦветом(Текст, Цвет)); + Иначе + ЦветнойВывод.ВывестиСтроку(ПодготовитьТекст(Текст), Цвет); + КонецЕсли; + +КонецПроцедуры + +// Выводит текст в консоль без добавления перевода строки +// +// Параметры: +// Текст - Строка - Выводимый текст +// Цвет - Строка - Имя цвета для оформления вывода +Процедура Вывести(Текст, Цвет = Неопределено) Экспорт + + Если Бенчмаркинг.ЭтоВоркер() И Не Цвет = Неопределено Тогда + ЦветнойВывод.Вывести(ТекстСЦветом(Текст, Цвет)); + Иначе + ЦветнойВывод.Вывести(ПодготовитьТекст(Текст), Цвет); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПодготовитьТекст(Знач Текст) + Возврат СтрЗаменить(Текст, "|!#color=", "|#color="); +КонецФункции + +Функция ТекстСЦветом(Текст, Цвет) + + Шаблон = "(%1|!#color=%2)"; + МассивСтрок = СтрРазделить(Текст, Символы.ПС); + + Для Инд = 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\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 30ecaf0..c97b925 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" @@ -1,5 +1,4 @@ #Использовать asserts -#Использовать delegate #Использовать validate #Использовать reflector #Использовать fluent @@ -50,9 +49,7 @@ Перем _КаталогАртефактов; // Строка &Сериализуемое("Parameters") -&Тип("Массив") -&ДляКаждого -&Тип("ПараметрБенчмарка") +&Тип("Массив") &ДляКаждого &Тип("ПараметрБенчмарка") &Геттер("Параметры") Перем _Параметры; // Массив из ПараметрБенчмарка @@ -63,9 +60,10 @@ &Геттер("ИсточникиПараметров") Перем _ИсточникиПараметров; // ТаблицаЗначений -&Несериализуемое +&Сериализуемое("Handlers") +&Тип("Массив") &ДляКаждого &Тип("ОбработчикСобытияБенчмарка") &Геттер("ОбработчикиСобытий") -Перем _Обработчики; // ТаблицаЗначений +Перем _Обработчики; // Массив из ОбработчикСобытияБенчмарка &Сериализуемое("Columns") &Тип("Массив") @@ -96,7 +94,7 @@ &Несериализуемое Перем _Рефлектор; // Рефлектор -#Область Конструктор +#Область ОбработчикиСобытий // Конфигурация бенчмарков // @@ -116,7 +114,7 @@ _Параметры = Новый Массив(); _ИсточникиПараметров = ПустаяТаблицаИсточникиПараметров(); - _Обработчики = ПустаяТаблицаОбработчикиСобытий(); + _Обработчики = Новый Массив(); _Колонки = Новый Массив(); _Экспортеры = Новый Массив(); _ВерсииИсполняющейСреды = ПустаяТаблицаВерсииИсполняющейСреды(); @@ -142,6 +140,46 @@ КонецПроцедуры +Процедура ОбработкаПолученияПредставления(Значение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Подстроки = Новый Массив(); + Подстроки.Добавить(СтрШаблон("Стратегия = ""%1""", Стратегия())); + Подстроки.Добавить("Измерительных итераций = " + КоличествоИтераций()); + + Если Стратегия() = СтратегииЗапускаБенчмарка.ПропускнаяСпособность Тогда + + Подстроки.Добавить(Символы.ПС); + Подстроки.Добавить("Прогревочных итераций = " + КоличествоПрогревочныхИтераций()); + + Если КоличествоВызововЗаИтерацию() = 0 Тогда + Подстроки.Добавить(СтрШаблон("Мин. время итерации = %1 мс", МинимальноеВремяИтерации())); + Подстроки.Добавить("Мин. вызовов за итерацию = " + МинимальноеКоличествоВызововЗаИтерацию()); + Иначе + Подстроки.Добавить("Вызовов за итерацию = " + КоличествоВызововЗаИтерацию()); + КонецЕсли; + + КонецЕсли; + + Экспортеры = Экспортеры(); + Если Экспортеры.Количество() > 0 Тогда + + Расширения = Новый Массив(); + Для Каждого Экспортер Из Экспортеры Цикл + Расширения.Добавить(Экспортер.Расширение()); + КонецЦикла; + + Подстроки.Добавить(Символы.ПС); + Подстроки.Добавить("Форматы экспорта = " + СтрСоединить(Расширения, ", ")); + Подстроки.Добавить("Каталог артефактов = " + КаталогАртефактов()); + + КонецЕсли; + + Значение = СтрЗаменить(СтрСоединить(Подстроки, ", "), ", " + Символы.ПС + ", ", Символы.ПС); + +КонецПроцедуры + #КонецОбласти #Область ПрограммныйИнтерфейс @@ -353,27 +391,25 @@ КонецФункции -// Добавляет параметр в набор, позволяя запускать тесты с разными наборами входных данных -// -// Метод бенчмарка будет выполнен для каждой уникальной комбинации значений параметров. -// Позволяет анализировать производительность в зависимости от входных условий. +// Добавляет общий параметр бенчмарков, позволяя запускать тесты с разными наборами входных данных. +// Принимает значения только примитивного типа. Для составных типов используйте метод ДобавитьИсточникПараметров(). // // Параметры: -// Имя - Строка - Имя публичного поля класса бенчмарка -// Значение - Произвольный +// ИмяПоля - Строка - Имя экспортного поля в сценарии бенчмарка +// Значение - Произвольный - Значение параметра примитивного типа // // Возвращаемое значение: // ЭтотОбъект -Функция ДобавитьПараметр(Имя, Значение) Экспорт +Функция ДобавитьПараметр(ИмяПоля, Значение) Экспорт - _Параметры.Добавить(Новый ПараметрБенчмарка(Имя, Значение, Ложь)); + _Параметры.Добавить(Новый ПараметрБенчмарка(ИмяПоля, Значение, Ложь)); УстановитьМодифицированность(ИмяПоля_Параметры()); Возврат ЭтотОбъект; КонецФункции -// Параметры, используемые для запуска бенчмарков с разными наборами входных данных +// Общие параметры бенчмарков // // Возвращаемое значение: // Массив из ПараметрБенчмарка @@ -383,7 +419,7 @@ КонецФункции -// Очищает набор параметров +// Очищает общие параметры бенчмарков // // Возвращаемое значение: // ЭтотОбъект @@ -396,17 +432,12 @@ КонецФункции -// Указывает имя экспортного метода, возвращающего параметры для указанного поля. -// -// Правила обработки возвращаемого значения: -// - Если возвращается Массив или ТаблицаЗначений, -// каждый элемент коллекции интерпретируется отдельный параметр. -// - Для остальных типов возвращаемое значение передается в набор параметров без изменений. +// Указывает имя экспортного метода, возвращающего значения для общего параметра бенчмарков // // Параметры: -// ИмяПоля - Строка - Имя поля класса бенчмарков +// ИмяПоля - Строка - Имя экспортного поля в сценарии бенчмарка // Источник - Строка - Имя экспортного метода. Может быть задано в формате: -// <ИмяТипаИлиМодуля>.<ИмяМетода> или <ИмяМетода> (метод класса бенчмарков). +// <ИмяТипаИлиМодуля>.<ИмяМетода> или <ИмяМетода> (в сценарии бенчмарков). // // Возвращаемое значение: // ЭтотОбъект @@ -427,11 +458,11 @@ КонецФункции -// Источники параметров, используемые для запуска бенчмарков с разными наборами входных данных. +// Источники общих параметров бенчмарков // // Возвращаемое значение: // ТаблицаЗначений: -// * ИмяПоля - Строка - Имя поля класса бенчмарков +// * ИмяПоля - Строка - Имя экспортного поля в сценарии бенчмарка // * Источник - Строка - Имя экспортного метода Функция ИсточникиПараметров() Экспорт Возврат _ИсточникиПараметров.Скопировать(); @@ -548,22 +579,17 @@ // ** Статистика - СтатистикаБенчмарка // // Параметры: -// ИмяСобытия - Строка - см. СобытияБенчмарков -// Обработчик - Строка - Имя экспортного метода экземпляра класса бенчмарков -// - Делегат - Делегат +// КвалифицированноеИмяМетода - Строка - Имя метода в формате: +// - <ИмяМетода> - Имя метода класса бенчмарков +// - <ИмяМодуля>.<ИмяМетода> - Метод модуля +// - <ИмяТипа>.<ИмяМетода> - Метод экземпляра указанного типа +// Событие - Строка - см. СобытияБенчмарков // // Возвращаемое значение: // ЭтотОбъект -Функция ДобавитьОбработчикСобытия(ИмяСобытия, Обработчик) Экспорт - - Отбор = Новый Структура("Событие, Обработчик", ИмяСобытия, Обработчик); - Если _Обработчики.НайтиСтроки(Отбор).Количество() > 0 Тогда - Возврат ЭтотОбъект; - КонецЕсли; +Функция ДобавитьОбработчикСобытия(КвалифицированноеИмяМетода, Событие) Экспорт - СтрокаТаблицы = _Обработчики.Добавить(); - СтрокаТаблицы.Событие = ИмяСобытия; - СтрокаТаблицы.Обработчик = Обработчик; + _Обработчики.Добавить(Новый ОбработчикСобытияБенчмарка(КвалифицированноеИмяМетода, Событие)); УстановитьМодифицированность(ИмяПоля_ОбработчикиСобытий()); @@ -580,10 +606,9 @@ // ЭтотОбъект Функция УдалитьОбработчикиСобытия(ИмяСобытия) Экспорт - НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); - Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл - _Обработчики.Удалить(СтрокаТаблицы); - КонецЦикла; + _Обработчики = ПроцессорыКоллекций.ИзКоллекции(_Обработчики) + .Фильтровать("Обработчик -> Обработчик.Событие() <> ИмяСобытия", Новый Структура("ИмяСобытия", ИмяСобытия)) + .Получить(Тип("Массив")); УстановитьМодифицированность(ИмяПоля_ОбработчикиСобытий()); @@ -607,12 +632,9 @@ // Обработчики событий // // Возвращаемое значение: -// ТаблицаЗначений: -// * Событие - Строка - см. СобытияБенчмарков -// * Обработчик - Строка - Экспортный метод экземпляра класса бенчмарков -// - Делегат - Делегат +// Массив из ОбработчикСобытияБенчмарка Функция ОбработчикиСобытий() Экспорт - Возврат _Обработчики.Скопировать(); + Возврат Новый Массив(Новый ФиксированныйМассив(_Обработчики)); КонецФункции // Обработчики события @@ -621,48 +643,14 @@ // ИмяСобытия - Строка - см. СобытияБенчмарков // // Возвращаемое значение: -// Массив из Строка - Экспортный метод экземпляра класса бенчмарков -// Массив из Делегат +// Массив из ОбработчикСобытияБенчмарка Функция ОбработчикиСобытия(ИмяСобытия) Экспорт - Результат = Новый Массив(); - - НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); - Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл - Результат.Добавить(СтрокаТаблицы.Обработчик); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Делегаты обработчиков по имени события -// -// Параметры: -// ИмяСобытия - Строка - см. СобытияБенчмарков -// ОбъектБенчмарков - Произвольный - Экземпляр класса бенчмарков -// Контекст - Произвольный - Параметры, которые будут переданы в делегат -// -// Возвращаемое значение: -// Массив из Делегат -Функция ДелегатыОбработчиковСобытия(ИмяСобытия, ОбъектБенчмарков, Контекст = Неопределено) Экспорт - - МассивДелегатов = Новый Массив(); - - НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); - Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл - - Делегат = ДелегатОбработчика(СтрокаТаблицы.Обработчик, ОбъектБенчмарков); - - Если ЕстьПараметрыМетода(Делегат) Тогда - Делегат.УстановитьПараметры(Контекст); - КонецЕсли; + Обработчики = ПроцессорыКоллекций.ИзКоллекции(_Обработчики) + .Фильтровать("Обработчик -> Обработчик.Событие() = ИмяСобытия", Новый Структура("ИмяСобытия", ИмяСобытия)) + .Получить(Тип("Массив")); - МассивДелегатов.Добавить(Делегат); - - КонецЦикла; - - Возврат МассивДелегатов; + Возврат Обработчики; КонецФункции @@ -832,19 +820,6 @@ КонецФункции -// Версия исполняющей среды OneScript ограничена текущей -// -// Возвращаемое значение: -// Булево -Функция ИсполняющаяСредаОграниченаТекущей() Экспорт - - КоличествоВерсий = _ВерсииИсполняющейСреды.Количество(); - - Возврат КоличествоВерсий = 0 - Или КоличествоВерсий = 1 И НРег(_ВерсииИсполняющейСреды[0].Версия) = "current"; - -КонецФункции - // Возвращает эталонную версию исполняющей среды OneScript // // Возвращаемое значение: @@ -971,7 +946,7 @@ Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл СтрокаТаблицы = Таблица.Добавить(); СтрокаТаблицы.Имя = ОписаниеПоля.Имя; - СтрокаТаблицы.Значение = ОписаниеПоля.Геттер.Исполнить(); + СтрокаТаблицы.Значение = ОписаниеПоля.Геттер.Выполнить(); СтрокаТаблицы.Модифицирован = _МодифицированныеПоля[ОписаниеПоля.Имя]; КонецЦикла; @@ -979,82 +954,19 @@ КонецФункции -// Строковое представление конфигурации -// -// Возвращаемое значение: -// Строка -Функция ВСтроку() Экспорт - - Подстроки = Новый Массив(); - Подстроки.Добавить(СтрШаблон("Стратегия = ""%1""", Стратегия())); - Подстроки.Добавить("Измерительных итераций = " + КоличествоИтераций()); - - Если Стратегия() = СтратегииЗапускаБенчмарка.ПропускнаяСпособность Тогда - - Подстроки.Добавить(Символы.ПС); - Подстроки.Добавить("Прогревочных итераций = " + КоличествоПрогревочныхИтераций()); - - Если КоличествоВызововЗаИтерацию() = 0 Тогда - Подстроки.Добавить(СтрШаблон("Мин. время итерации = %1 мс", МинимальноеВремяИтерации())); - Подстроки.Добавить("Мин. вызовов за итерацию = " + МинимальноеКоличествоВызововЗаИтерацию()); - Иначе - Подстроки.Добавить("Вызовов за итерацию = " + КоличествоВызововЗаИтерацию()); - КонецЕсли; - - КонецЕсли; - - Экспортеры = Экспортеры(); - Если Экспортеры.Количество() > 0 Тогда - - Расширения = Новый Массив(); - Для Каждого Экспортер Из Экспортеры Цикл - Расширения.Добавить(Экспортер.Расширение()); - КонецЦикла; - - Подстроки.Добавить(Символы.ПС); - Подстроки.Добавить("Форматы экспорта = " + СтрСоединить(Расширения, ", ")); - Подстроки.Добавить("Каталог артефактов = " + КаталогАртефактов()); - - КонецЕсли; - - Текст = СтрЗаменить(СтрСоединить(Подстроки, ", "), ", " + Символы.ПС + ", ", Символы.ПС); - Возврат Текст; - -КонецФункции - #КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции -Функция ДелегатОбработчика(Обработчик, ОбъектБенчмарков) - - Если ТипЗнч(Обработчик) = Тип("Делегат") Тогда - Возврат Обработчик; - Иначе - Возврат Новый Делегат(ОбъектБенчмарков, Обработчик); - КонецЕсли; - -КонецФункции - -Функция ЕстьПараметрыМетода(Делегат) - - РефлекторОбъекта = Новый РефлекторОбъекта(Делегат.Объект()); - ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь); - СвойстваМетода = ТаблицаМетодов.Найти(Делегат.ИмяМетода(), "Имя"); - - Возврат СвойстваМетода.Параметры.Количество() > 0; - -КонецФункции - Процедура ОпределитьМодифицированныеПоля() Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл Значение = _Рефлектор.ПолучитьСвойство(ЭтотОбъект, ОписаниеПоля.ИмяВнутреннее); ЗначениеПоУмолчанию = _ЗначенияПолейПоУмолчанию[ОписаниеПоля.Имя]; - Если Не Компаратор.Совпадают(Значение, ЗначениеПоУмолчанию) Тогда + Если Не КомпараторОбъектов.Равны(Значение, ЗначениеПоУмолчанию) Тогда УстановитьМодифицированность(ОписаниеПоля.Имя); КонецЕсли; КонецЦикла; @@ -1097,20 +1009,13 @@ ОписаниеПоля = _ОписанияПолей.Добавить(); ОписаниеПоля.Имя = ИмяПоля; ОписаниеПоля.ИмяВнутреннее = Свойство.Имя; - ОписаниеПоля.Геттер = Новый Делегат(ЭтотОбъект, Геттер); + ОписаниеПоля.Геттер = Новый Действие(ЭтотОбъект, Геттер); КонецЦикла; Возврат _ОписанияПолей; КонецФункции -Функция ПустаяТаблицаОбработчикиСобытий() - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("Событие"); - Таблица.Колонки.Добавить("Обработчик"); - Возврат Таблица; -КонецФункции - Функция ПустаяТаблицаВерсииИсполняющейСреды() Таблица = Новый ТаблицаЗначений(); Таблица.Колонки.Добавить("Версия"); @@ -1138,7 +1043,6 @@ &ПослеДесериализации Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт - ДесериализоватьОбработчики(ПрочитанныеСвойства); ДесериализоватьЭкспортеры(ПрочитанныеСвойства); ОпределитьМодифицированныеПоля(); @@ -1146,22 +1050,8 @@ КонецПроцедуры -&Сериализуемое("Handlers") -Функция СериализацияПолучитьОбработчикиСобытий() Экспорт - - Таблица = ПроцессорыКоллекций.ИзКоллекции(_Обработчики) - .Фильтровать("Элемент -> ТипЗнч(Элемент.Обработчик) = Тип(""Строка"")") - .Получить(Тип("ТаблицаЗначений")); - - Таблица.Колонки.Событие.Имя = "Event"; - Таблица.Колонки.Обработчик.Имя = "Handler"; - - Возврат Таблица; - -КонецФункции - &Сериализуемое("Exporters") -Функция СериализацияПолучитьИменаЭкспортеров() Экспорт +Функция СериализоватьЭкспортеры() Экспорт Экспортеры = Новый Массив; @@ -1184,18 +1074,6 @@ КонецПроцедуры -Процедура ДесериализоватьОбработчики(ПрочитанныеСвойства) - - Если Не ПрочитанныеСвойства.Свойство("Handlers") Тогда - Возврат; - КонецЕсли; - - Для Каждого Строка Из ПрочитанныеСвойства["Handlers"] Цикл - ДобавитьОбработчикСобытия(Строка["Event"], Строка["Handler"]); - КонецЦикла; - -КонецПроцедуры - Процедура ДесериализоватьЭкспортеры(ПрочитанныеСвойства) Если Не ПрочитанныеСвойства.Свойство("Exporters") Тогда @@ -1276,8 +1154,8 @@ УдалитьОбработчикиСобытий(); - Для Каждого СтрокаСобытия Из ЗначенияМодифицированныхПолей[ИмяПоля_ОбработчикиСобытий()] Цикл - ДобавитьОбработчикСобытия(СтрокаСобытия.Событие, СтрокаСобытия.Обработчик); + Для Каждого Обработчик Из ЗначенияМодифицированныхПолей[ИмяПоля_ОбработчикиСобытий()] Цикл + ДобавитьОбработчикСобытия(Обработчик.ИмяМетода(), Обработчик.Событие()); КонецЦикла; КонецПроцедуры @@ -1291,7 +1169,7 @@ ОчиститьПараметры(); Для Каждого Параметр Из ЗначенияМодифицированныхПолей[ИмяПоля_Параметры()] Цикл - ДобавитьПараметр(Параметр.Имя, Параметр.Значение); + ДобавитьПараметр(Параметр.Имя(), Параметр.Значение()); КонецЦикла; КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\233\320\265\320\275\320\270\320\262\321\213\320\271\320\224\320\265\320\273\320\265\320\263\320\260\321\202.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\233\320\265\320\275\320\270\320\262\321\213\320\271\320\224\320\265\320\273\320\265\320\263\320\260\321\202.os" new file mode 100644 index 0000000..f13e37a --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\233\320\265\320\275\320\270\320\262\321\213\320\271\320\224\320\265\320\273\320\265\320\263\320\260\321\202.os" @@ -0,0 +1,90 @@ +Перем _КвалифицированноеИмяМетода; // Строка +Перем _Объект; // Произвольный +Перем _Действие; // Действие, Неопределено + +#Область ОбработчикиСобытий + +// Конструктор делегата. Инициализирует параметры для последующего создания делегата. +// +// Параметры: +// КвалифицированноеИмяМетода - Строка - Имя метода в формате: +// - <ИмяМетода> - Имя метода объекта. Требует указания параметра Объект +// - <ИмяМодуля>.<ИмяМетода> - Метод модуля +// - <ИмяТипа>.<ИмяМетода> - Метод экземпляра указанного типа +// Объект - Произвольный - Объект, содержащий метод. Обязателен для формата <ИмяМетода>. +// +Процедура ПриСозданииОбъекта(КвалифицированноеИмяМетода, Объект = Неопределено) + _КвалифицированноеИмяМетода = КвалифицированноеИмяМетода; + _Объект = Объект; +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Создает и возвращает объект Действие для указанного метода. +// Анализирует квалифицированное имя метода и определяет способ создания делегата. +// +// Возвращаемое значение: +// Действие - Делегат для вызова метода +Функция Получить() Экспорт + + Если _Действие <> Неопределено Тогда + Возврат _Действие; + КонецЕсли; + + Части = СтрРазделить(_КвалифицированноеИмяМетода, "."); + КоличествоЧастей = Части.Количество(); + + Если КоличествоЧастей = 1 Тогда + + Если Не ЗначениеЗаполнено(_Объект) Тогда + ВызватьИсключение СтрШаблон( + "Для создания делегата <%1> не указан объект", _КвалифицированноеИмяМетода); + КонецЕсли; + + _Действие = Новый Действие(_Объект, _КвалифицированноеИмяМетода); + + ИначеЕсли КоличествоЧастей = 2 Тогда + + Имя = Части[0]; + Метод = Части[1]; + + Объект = ПолучитьМодуль(Имя); + Если Объект = Неопределено Тогда + Объект = Новый(Имя); + КонецЕсли; + + _Действие = Новый Действие(Объект, Метод); + + Иначе + + ВызватьИсключение СтрШаблон("Квалифицированное имя метода <%1> задано некорректно", _КвалифицированноеИмяМетода); + + КонецЕсли; + + Возврат _Действие; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьМодуль(ИмяМодуля) + + Попытка + Модуль = Вычислить(ИмяМодуля); + Исключение + Возврат Неопределено; + КонецПопытки; + + Если ТипЗнч(Модуль) <> Тип("Сценарий") Тогда + ВызватьИсключение СтрШаблон("Модуль <%1> не является сценарием", ИмяМодуля); + КонецЕсли; + + Возврат Модуль; + +КонецФункции + +#КонецОбласти \ 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\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217\320\241\321\200\320\265\320\264\321\213\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\233\320\276\320\272\320\260\321\202\320\276\321\200\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" similarity index 60% rename from "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217\320\241\321\200\320\265\320\264\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" rename to "src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\233\320\276\320\272\320\260\321\202\320\276\321\200\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" index c8c7792..2dedb0b 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\321\217\320\241\321\200\320\265\320\264\321\213\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\233\320\276\320\272\320\260\321\202\320\276\321\200\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" @@ -5,43 +5,40 @@ #Область ПрограммныйИнтерфейс -// Поиск исполняемого файла OneScript в системе с учетом версии +// Выполняет поиск исполняемого файла OneScript для указанной версии или алиаса. // // Параметры: -// Версия - Строка - Версия OneScript (например: "1.9.3", "dev") +// Версия - Строка - Требуемая версия или алиас OneScript (например, "2.0.0" или "stable") // // Возвращаемое значение: -// Строка, Неопределено +// Строка - Полный путь к исполняемому файлу, если найден +// Неопределено - Если каталог установки не найден или исполняемый файл отсутствует Функция НайтиИсполняемыйФайл(Версия) Экспорт - КаталогУстановки = КаталогУстановки(); + Если Не _КаталогУстановки = Неопределено Тогда + КаталогУстановки = _КаталогУстановки; + Иначе + КаталогУстановки = ОпределитьКаталогУстановки(); + КонецЕсли; + Если Не ЗначениеЗаполнено(КаталогУстановки) Тогда Возврат Неопределено; КонецЕсли; КаталогBin = ОбъединитьПути(КаталогУстановки, Версия, "bin"); - Если ЭтоWindows() Тогда - ИмяФайла = ОбъединитьПути(КаталогBin, "oscript.exe"); - Иначе - ИмяФайла = ОбъединитьПути(КаталогBin, "oscript"); - КонецЕсли; - - Если ФС.ФайлСуществует(ИмяФайла) Тогда - Возврат ИмяФайла; - КонецЕсли; + Возврат НайтиИсполняемыйФайлВКаталоге(КаталогBin); КонецФункции -// Определяет каталог установленных версий OneScript +// Определяет каталог, в котором установлены версии OneScript. // // Возвращаемое значение: -// Строка, Неопределено -Функция КаталогУстановки() Экспорт +// Строка - Путь к каталогу установки версий OneScript +// Неопределено - Если каталог установки не удалось определить ни одним из способов +Функция ОпределитьКаталогУстановки() Экспорт - Если Не _КаталогУстановки = Неопределено Тогда - Возврат _КаталогУстановки; - КонецЕсли; + _КаталогУстановки = Неопределено; // Из переменной среды OVM_INSTALL_PATH КаталогУстановки = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH"); @@ -61,17 +58,6 @@ КонецЕсли; КонецЕсли; - // Из каталога по умолчанию - СистемнаяИнформация = Новый СистемнаяИнформация(); - КаталогУстановки = ОбъединитьПути( - СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений), - "ovm" - ); - Если ФС.КаталогСуществует(КаталогУстановки) Тогда - _КаталогУстановки = КаталогУстановки; - Возврат КаталогУстановки; - КонецЕсли; - // Через ovm which КаталогУстановки = ОпределитьКаталогУстановкиЧерезWhich(); Если ЗначениеЗаполнено(КаталогУстановки) Тогда @@ -81,25 +67,29 @@ КонецФункции -// Получает системный каталог для хранения библиотек +// Находит исполняемый файл в каталоге. // -// Возвращаемое значение: -// Строка -Функция КаталогБиблиотек() Экспорт - Возврат ПолучитьЗначениеСистемнойНастройки("lib.system"); -КонецФункции - -// Определяет, является ли текущая ОС Windows +// Параметры: +// Каталог - Строка - Каталог поиска // // Возвращаемое значение: -// Булево -Функция ЭтоWindows() Экспорт +// Строка - Полный путь к исполняемому файлу, если найден +// Неопределено - Если каталог установки не найден или исполняемый файл отсутствует +Функция НайтиИсполняемыйФайлВКаталоге(Каталог) Экспорт + + ВариантыИмени = Новый Массив(); + ВариантыИмени.Добавить("oscript.exe"); + ВариантыИмени.Добавить("oscript"); + + Для Каждого ИмяФайла Из ВариантыИмени Цикл - СистемнаяИнформация = Новый СистемнаяИнформация(); - ТекущаяПлатформа = СистемнаяИнформация.ТипПлатформы; + ПутьКФайлу = ОбъединитьПути(Каталог, ИмяФайла); - Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64 - Или ТекущаяПлатформа = ТипПлатформы.Windows_x86; + Если ФС.ФайлСуществует(ПутьКФайлу) Тогда + Возврат ПутьКФайлу; + КонецЕсли; + + КонецЦикла; КонецФункции @@ -123,6 +113,7 @@ КаталогФайла = Новый Файл(ПутьКФайлу).Путь; КаталогУстановки = ФС.НормализоватьПуть(ОбъединитьПути(КаталогФайла, "../..")); + Возврат КаталогУстановки; КонецФункции diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\241\320\276\320\261\321\213\321\202\320\270\321\217\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\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\241\320\276\320\261\321\213\321\202\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" new file mode 100644 index 0000000..7638967 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\241\320\276\320\261\321\213\321\202\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -0,0 +1,73 @@ + +&Сериализуемое("Event") +Перем _Событие; // Строка - см. СобытияБенчмарков + +&Сериализуемое("Handler") +Перем _КвалифицированноеИмяМетода; // Строка + +&Несериализуемое +Перем _Объект; // Произвольный + +&Несериализуемое +Перем _Делегат; // Действие + +#Область ОбработчикиСобытий + +// Конструктор обработчика события. +// Инициализирует связь между событием бенчмарка и методом-обработчиком. +// +// Параметры: +// КвалифицированноеИмяМетода - Строка - Имя метода в формате: +// - <ИмяМетода> - Имя метода класса бенчмарков +// - <ИмяМодуля>.<ИмяМетода> - Метод модуля +// - <ИмяТипа>.<ИмяМетода> - Метод экземпляра указанного типа +// Событие - Строка - см. СобытияБенчмарков +Процедура ПриСозданииОбъекта(КвалифицированноеИмяМетода = "", Событие = "") + _КвалифицированноеИмяМетода = КвалифицированноеИмяМетода; + _Событие = Событие; +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Возвращает тип события бенчмарка, для которого предназначен обработчик. +// +// Возвращаемое значение: +// Строка - см. СобытияБенчмарков +Функция Событие() Экспорт + Возврат _Событие; +КонецФункции + +// Возвращает квалифицированное имя метода. +// +// Возвращаемое значение: +// Строка +Функция ИмяМетода() Экспорт + Возврат _КвалифицированноеИмяМетода; +КонецФункции + +// Возвращает делегат для вызова метода-обработчика. +// Кэширует созданный делегат для последнего переданного объекта. +// +// Параметры: +// Объект - Произвольный - Объект для создания делегата. +// +// Возвращаемое значение: +// Действие +Функция Делегат(Объект = Неопределено) Экспорт + + Если _Делегат <> Неопределено И _Объект = Объект Тогда + Возврат _Делегат; + КонецЕсли; + + ЛенивыйДелегат = Новый ЛенивыйДелегат(_КвалифицированноеИмяМетода, Объект); + + _Объект = Объект; + _Делегат = ЛенивыйДелегат.Получить(); + + Возврат _Делегат; + +КонецФункции + +#КонецОбласти \ 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\260\321\200\320\260\320\274\320\265\321\202\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index cc184d2..bddd5b7 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -1,18 +1,66 @@ -// BSLLS:ExportVariables-off - &Сериализуемое("Name") -Перем Имя Экспорт; // Строка +Перем _Имя; // Строка &Сериализуемое("Value") -Перем Значение Экспорт; // Произвольный +Перем _Значение; // Произвольный + +&Сериализуемое("TextValue") +Перем _Представление; // Строка &Сериализуемое("IsMethodParameter") -Перем ЭтоПараметрМетода Экспорт; // Булево +Перем _ЭтоПараметрМетода; // Булево + +#Область ОбработчикиСобытий + +// Конструктор параметра бенчмарка +// +// Параметры: +// Имя - Строка - Имя параметра +// Значение - Произвольный - Значение примитивного типа +// ЭтоПараметрМетода - Булево - Истина, если параметр передаётся в метод бенчмарка +Процедура ПриСозданииОбъекта(Имя = "", Значение = Неопределено, ЭтоПараметрМетода = Ложь) + + _Имя = Имя; + _Значение = Значение; + _Представление = Строка(Значение); + _ЭтоПараметрМетода = ЭтоПараметрМетода; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Возвращает имя параметра +// +// Возвращаемое значение: +// Строка +Функция Имя() Экспорт + Возврат _Имя; +КонецФункции + +// Возвращает значение параметра +// +// Возвращаемое значение: +// Произвольный +Функция Значение() Экспорт + Возврат _Значение; +КонецФункции -Процедура ПриСозданииОбъекта(пИмя = "", пЗначение = Неопределено, пЭтоПараметрМетода = Ложь) +// Возвращает строковое представление значения параметра +// +// Возвращаемое значение: +// Строка +Функция Представление() Экспорт + Возврат _Представление; +КонецФункции - Имя = пИмя; - Значение = пЗначение; - ЭтоПараметрМетода = пЭтоПараметрМетода; +// Возвращает признак того, что параметр передаётся в метод бенчмарка. +// +// Возвращаемое значение: +// Булево +Функция ЭтоПараметрМетода() Экспорт + Возврат _ЭтоПараметрМетода; +КонецФункции -КонецПроцедуры \ No newline at end of file +#КонецОбласти \ 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\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index e5acb1a..07fb98f 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\234\320\265\321\202\320\276\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -14,7 +14,7 @@ Процедура Добавить(Параметр) Экспорт Ожидаем.Что(Параметр).ИмеетТип("ПараметрБенчмарка"); - Ожидаем.Что(Параметр.ЭтоПараметрМетода).ЭтоИстина(); + Ожидаем.Что(Параметр.ЭтоПараметрМетода()).ЭтоИстина(); _Параметры.Добавить(Параметр); 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 0620160..a944ea6 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" @@ -87,9 +87,9 @@ Для Каждого РезультатЗапускаБенчмарка Из _ЗапускиБенчмарков Цикл Для Каждого Параметр Из РезультатЗапускаБенчмарка.Параметры Цикл - Если ДобавленныеИмена[Параметр.Имя] = Неопределено Тогда - ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Параметр.Имя)); - ДобавленныеИмена.Вставить(Параметр.Имя, Истина); + Если ДобавленныеИмена[Параметр.Имя()] = Неопределено Тогда + ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Параметр.Имя())); + ДобавленныеИмена.Вставить(Параметр.Имя(), Истина); КонецЕсли; КонецЦикла; КонецЦикла; @@ -414,29 +414,17 @@ Для Каждого Колонка Из _Отчет.Колонки Цикл ИмяПараметра = КолонкаОтчетаБенчмарковПараметр.ИмяПараметра(Колонка); - Если ЗначениеЗаполнено(ИмяПараметра) И КолонкаСодержитТолькоПримитивы(Колонка.Имя) Тогда + Если ЗначениеЗаполнено(ИмяПараметра) Тогда ДобавитьСортировку(Сортировка, Колонка.Имя); КонецЕсли; КонецЦикла; КонецПроцедуры -Функция КолонкаСодержитТолькоПримитивы(ИмяКолонки) - - Для Каждого Строка Из _Отчет.Таблица Цикл - Если Не СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Строка[ИмяКолонки]) Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Истина; - -КонецФункции - Процедура ДобавитьСортировку(Сортировка, ИмяКолонки, Направление = "") Если Не _Отчет.Таблица.Колонки.Найти(ИмяКолонки) = Неопределено Тогда - Сортировка.Добавить(ИмяКолонки + " " + Направление); + Сортировка.Добавить(СокрЛП(ИмяКолонки + " " + Направление)); КонецЕсли; КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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" similarity index 92% rename from "src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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" rename to "src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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" index 31cfcdd..98d1fd2 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\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/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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" @@ -13,9 +13,7 @@ Перем ДескрипторыБенчмарков Экспорт; // КоллекцияДескрипторовБенчмарков &Сериализуемое("Runs") -&Тип("Массив") -&ДляКаждого -&Тип("РезультатЗапускаБенчмаркаДто") +&Тип("Массив") &ДляКаждого &Тип("РезультатЗапускаБенчмаркаДто") Перем Запуски Экспорт; // Массив из РезультатЗапускаБенчмаркаДто &Несериализуемое @@ -117,8 +115,9 @@ ПараметрНайден = Ложь; Для Каждого ПараметрВторой Из СтрокаВторая.Параметры Цикл - Если ПараметрПервой.Имя = ПараметрВторой.Имя - И ПараметрПервой.Значение = ПараметрВторой.Значение Тогда + Если ПараметрПервой.Имя() = ПараметрВторой.Имя() + И ПараметрПервой.Значение() = ПараметрВторой.Значение() + И ПараметрПервой.Представление() = ПараметрВторой.Представление() Тогда ПараметрНайден = Истина; Прервать; КонецЕсли; @@ -144,6 +143,9 @@ ОпределитьЭталоны(); ОбновитьСтатистику(); + ПостроительОтчета = Новый ПостроительОтчетаБенчмарков(ДескрипторыБенчмарков, Конфигурация, Запуски); + Отчет = ПостроительОтчета.Сформировать(); + КонецПроцедуры Процедура ПереопределитьДескрипторыВЗапусках() 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" index 2d444ae..f6f2f89 100644 --- "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" @@ -13,30 +13,30 @@ #Область ПрограммныйИнтерфейс -// Сериализует результаты бенчмарков в JSON-файл +// Сериализует результат запуска бенчмарков в JSON-файл // // Параметры: -// РезультатыБенчмарков - РезультатыБенчмарков -// ПолноеИмяФайла - Строка - Полный путь к файлу, в который будут записаны результаты бенчмарков -Процедура ЗаписатьВJson(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт +// РезультатЗапускаБенчмарков - РезультатЗапускаБенчмарков +// ПолноеИмяФайла - Строка - Полный путь к файлу, в который будут записаны результат запуска бенчмарков +Процедура ЗаписатьВJson(РезультатЗапускаБенчмарков, ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало сериализации результатов в JSON-файл: %1", ПолноеИмяФайла); ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, "UTF-8"); - ЗаписьТекста.Записать(СериализацияОбъектовБенчмаркинга.ВJson(РезультатыБенчмарков)); + ЗаписьТекста.Записать(СериализацияОбъектовБенчмаркинга.ВJson(РезультатЗапускаБенчмарков)); ЗаписьТекста.Закрыть(); _Лог.Отладка("Сериализация в JSON-файл завершена: %1", ПолноеИмяФайла); КонецПроцедуры -// Десериализует результаты бенчмарков из JSON-файла +// Десериализует результат запуска бенчмарков из JSON-файла // // Параметры: // ПолноеИмяФайла - Строка - Полный путь к JSON-файлу с результатами бенчмарков // // Возвращаемое значение: -// РезультатыБенчмарков +// РезультатЗапускаБенчмарков Функция ПрочитатьИзJson(ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало десериализации из JSON-файла: %1", ПолноеИмяФайла); @@ -45,11 +45,11 @@ Json = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); - РезультатыБенчмарков = СериализацияОбъектовБенчмаркинга.ИзJson(Json, Тип("РезультатыБенчмарков")); + РезультатЗапускаБенчмарков = СериализацияОбъектовБенчмаркинга.ИзJson(Json, Тип("РезультатЗапускаБенчмарков")); _Лог.Отладка("Десериализация из JSON-файла завершена: %1", ПолноеИмяФайла); - Возврат РезультатыБенчмарков; + Возврат РезультатЗапускаБенчмарков; КонецФункции 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 153da6e..367b721 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" @@ -35,6 +35,8 @@ &Тип("Число") Перем КоличествоЛогическихПроцессоров; // Число +#Область ОбработчикиСобытий + Процедура ПриСозданииОбъекта() СистемнаяИнформация = Новый СистемнаяИнформация(); @@ -46,23 +48,23 @@ КонецПроцедуры -#Область ПрограммныйИнтерфейс +Процедура ОбработкаПолученияПредставления(Значение, СтандартнаяОбработка) -Функция ВСтроку() Экспорт - - Процессор = ИнформацияОПроцессоре.ПолноеОписание(); + СтандартнаяОбработка = Ложь; + + Процессор = ИнформацияОПроцессоре.ПолноеОписание(); Если ПустаяСтрока(ВерсияИсполняющейСреды) Тогда - Возврат СтрШаблон("BenchmarkOneScript v%1, %2 + Значение = СтрШаблон("BenchmarkOneScript v%1, %2 |%3", ВерсияБиблиотеки, ВерсияОС, Процессор ); Иначе - Возврат СтрШаблон("BenchmarkOneScript v%1, OneScript v%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 ba3528d..a98c74b 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" @@ -63,6 +63,8 @@ &НеСериализуемое Перем _ТекущаяЕдиницаВремени; // ЕдиницаИзмеренияБенчмарка +#Область ОбработчикиСобытий + // Статистика бенчмарка // // Параметры: @@ -84,6 +86,93 @@ КонецПроцедуры +Процедура ОбработкаПолученияПредставления(Значение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Результат = Новый Массив(); + + // Mean + СреднееЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + Среднее, + _ТекущаяЕдиницаВремени); + + Результат.Добавить(СтрШаблон("Mean = %1, ", СреднееЧитаемое)); + + // StdDev + СтандартноеОтклонениеЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + СтандартноеОтклонение, + _ТекущаяЕдиницаВремени); + + Результат.Добавить(СтрШаблон("StdDev = %1, ", СтандартноеОтклонениеЧитаемое)); + + // StdErr + СтандартнаяОшибкаСреднегоЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + СтандартнаяОшибкаСреднего, + _ТекущаяЕдиницаВремени); + + Результат.Добавить(СтрШаблон("StdErr = %1, ", СтандартнаяОшибкаСреднегоЧитаемое)); + + // N + Результат.Добавить(СтрШаблон("N = %1, ", _ЗамерыВремени.Количество())); + + // Op/s + Результат.Добавить(СтрШаблон("Op/s = %1", ПредставленияПоказателейБенчмарков.Представление(ОперацийВСекунду))); + + // Перенос + Результат.Добавить(Символы.ПС); + + // Min + МинЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + Мин, + _ТекущаяЕдиницаВремени); + + Результат.Добавить(СтрШаблон("Min = %1, ", МинЧитаемое)); + + // Q1 + НижнийКвартильЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + НижнийКвартиль, + _ТекущаяЕдиницаВремени); + + Результат.Добавить(СтрШаблон("Q1 = %1, ", НижнийКвартильЧитаемое)); + + // Median + МедианаЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + Медиана, + _ТекущаяЕдиницаВремени); + + Результат.Добавить(СтрШаблон("Median = %1, ", МедианаЧитаемое)); + + // Q3 + ВерхнийКвартильЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + ВерхнийКвартиль, + _ТекущаяЕдиницаВремени); + + Результат.Добавить(СтрШаблон("Q3 = %1, ", ВерхнийКвартильЧитаемое)); + + // Max + МаксЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + Макс, + _ТекущаяЕдиницаВремени); + + Результат.Добавить(СтрШаблон("Max = %1", МаксЧитаемое)); + + // Allocated + Если ЗначениеЗаполнено(ВыделяемаяПамять) Тогда + ВыделяемаяПамятьЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( + ВыделяемаяПамять, + ЕдиницыИзмеренийБенчмарков.Байт); + + Результат.Добавить(Символы.ПС); + Результат.Добавить(СтрШаблон("Allocated = %1", ВыделяемаяПамятьЧитаемое)); + КонецЕсли; + + Значение = СтрСоединить(Результат, ""); + +КонецПроцедуры + +#КонецОбласти + #Область ПрограммныйИнтерфейс // Квантиль @@ -202,93 +291,6 @@ Возврат Новый Массив(Новый ФиксированныйМассив(_ЗамерыПамяти)); КонецФункции -// Строковое представление статистики -// -// Возвращаемое значение: -// Строка -Функция ВСтроку() Экспорт - - Результат = Новый Массив(); - - // Mean - СреднееЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - Среднее, - _ТекущаяЕдиницаВремени); - - Результат.Добавить(СтрШаблон("Mean = %1, ", СреднееЧитаемое)); - - // StdDev - СтандартноеОтклонениеЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - СтандартноеОтклонение, - _ТекущаяЕдиницаВремени); - - Результат.Добавить(СтрШаблон("StdDev = %1, ", СтандартноеОтклонениеЧитаемое)); - - // StdErr - СтандартнаяОшибкаСреднегоЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - СтандартнаяОшибкаСреднего, - _ТекущаяЕдиницаВремени); - - Результат.Добавить(СтрШаблон("StdErr = %1, ", СтандартнаяОшибкаСреднегоЧитаемое)); - - // N - Результат.Добавить(СтрШаблон("N = %1, ", _ЗамерыВремени.Количество())); - - // Op/s - Результат.Добавить(СтрШаблон("Op/s = %1", ПредставленияПоказателейБенчмарков.Представление(ОперацийВСекунду))); - - // Перенос - Результат.Добавить(Символы.ПС); - - // Min - МинЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - Мин, - _ТекущаяЕдиницаВремени); - - Результат.Добавить(СтрШаблон("Min = %1, ", МинЧитаемое)); - - // Q1 - НижнийКвартильЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - НижнийКвартиль, - _ТекущаяЕдиницаВремени); - - Результат.Добавить(СтрШаблон("Q1 = %1, ", НижнийКвартильЧитаемое)); - - // Median - МедианаЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - Медиана, - _ТекущаяЕдиницаВремени); - - Результат.Добавить(СтрШаблон("Median = %1, ", МедианаЧитаемое)); - - // Q3 - ВерхнийКвартильЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - ВерхнийКвартиль, - _ТекущаяЕдиницаВремени); - - Результат.Добавить(СтрШаблон("Q3 = %1, ", ВерхнийКвартильЧитаемое)); - - // Max - МаксЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - Макс, - _ТекущаяЕдиницаВремени); - - Результат.Добавить(СтрШаблон("Max = %1", МаксЧитаемое)); - - // Allocated - Если ЗначениеЗаполнено(ВыделяемаяПамять) Тогда - ВыделяемаяПамятьЧитаемое = ПредставленияПоказателейБенчмарков.ПредставлениеЧитаемое( - ВыделяемаяПамять, - ЕдиницыИзмеренийБенчмарков.Байт); - - Результат.Добавить(Символы.ПС); - Результат.Добавить(СтрШаблон("Allocated = %1", ВыделяемаяПамятьЧитаемое)); - КонецЕсли; - - Возврат СтрСоединить(Результат, ""); - -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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 cb7818c..9ce8eed 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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\247\320\270\321\202\320\260\321\202\320\265\320\273\321\214\320\237\320\260\321\200\320\260\320\274\320\265\321\202\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" @@ -10,14 +10,14 @@ #Область ПрограммныйИнтерфейс -// Получает значения из источника и формирует параметры поля бенчмарка. +// Получает значения из источника и формирует общие параметры бенчмарков. // // Параметры: // ИмяПоля - Строка - Имя поля класса бенчмарков. // // Возвращаемое значение: // Массив из ПараметрБенчмарка -Функция ПрочитатьКакПараметрыПоля(ИмяПоля) Экспорт +Функция ПрочитатьКакОбщиеПараметры(ИмяПоля) Экспорт Результат = Новый Массив(); @@ -30,7 +30,7 @@ КонецФункции -// Получает значения из источника и формирует наборы параметров метода бенчмарка. +// Получает значения из источника и формирует наборы параметров бенчмарка. // // Параметры: // ДескрипторБенчмарка - ДескрипторБенчмарка - Дескриптор бенчмарка. @@ -56,8 +56,8 @@ Функция ПрочитатьЗначения() - Делегат = ПолучитьДелегат(); - Значение = Делегат.Выполнить(); + ЛенивыйДелегат = Новый ЛенивыйДелегат(_Источник, _ОбъектБенчмарков); + Значение = ЛенивыйДелегат.Получить().Выполнить(); Тип = ТипЗнч(Значение); Если Не (Тип = Тип("Массив") Или Тип = Тип("ТаблицаЗначений")) Тогда @@ -70,40 +70,6 @@ КонецФункции -Функция ПолучитьДелегат() - - Части = СтрРазделить(_Источник, "."); - КоличествоЧастей = Части.Количество(); - - Если КоличествоЧастей = 1 Тогда - - Возврат Новый Действие(_ОбъектБенчмарков, _Источник); - - ИначеЕсли КоличествоЧастей = 2 Тогда - - Имя = Части[0]; - Метод = Части[1]; - - Модуль = ПолучитьМодуль(Имя); - Если Модуль <> Неопределено Тогда - Возврат Новый Действие(Модуль, Метод); - КонецЕсли; - - Объект = СоздатьОбъектТипа(Имя); - Если Объект <> Неопределено Тогда - Возврат Новый Действие(Объект, Метод); - КонецЕсли; - - ВызватьИсключение СтрШаблон("Тип не зарегистрирован (%1)", Имя); - - Иначе - - ВызватьИсключение СтрШаблон("Источник параметров бенчмарков <%1> не валиден", _Источник); - - КонецЕсли; - -КонецФункции - Функция ПреобразоватьВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров(); @@ -217,28 +183,4 @@ КонецФункции -Функция ПолучитьМодуль(Имя) - - Попытка - Модуль = Вычислить(Имя); - Исключение - Возврат Неопределено; - КонецПопытки; - - Если ТипЗнч(Модуль) = Тип("Сценарий") Тогда - Возврат Модуль; - КонецЕсли; - -КонецФункции - -Функция СоздатьОбъектТипа(ИмяТипа) - - Попытка - Возврат Новый(ИмяТипа); - Исключение - Возврат Неопределено; - КонецПопытки; - -КонецФункции - #КонецОбласти \ 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\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\222Html.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\222Html.os" index 9966cff..800e594 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\222Html.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\222Html.os" @@ -3,17 +3,17 @@ Перем _Лог; // Лог -// Экспортирует результаты бенчмарков в файл HTML +// Экспортирует результат запуска бенчмарков в файл HTML Процедура ПриСозданииОбъекта() _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЭкспортерРезультатовБенчмарковВHtml"); КонецПроцедуры -// Экспортирует результаты бенчмарков в файл HTML +// Экспортирует результат запуска бенчмарков в файл HTML // // Параметры: -// РезультатыБенчмарков - см. Бенчмаркинг.Запустить +// РезультатЗапускаБенчмарков - см. Бенчмаркинг.Запустить // ПолноеИмяФайла - Строка - Полное имя файла -Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт +Процедура Записать(РезультатЗапускаБенчмарков, ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало формирования файла: %1", ПолноеИмяФайла); @@ -26,13 +26,13 @@ Части.Добавить(""); Части.Добавить("
"); - Части.Добавить(СтрШаблон("%1", РезультатыБенчмарков.СредаОкружения.ВСтроку()));
+ Части.Добавить(СтрШаблон("%1", Строка(РезультатЗапускаБенчмарков.СредаОкружения)));
Части.Добавить("| "); Части.Добавить(Колонка.Заголовок); Части.Добавить(" | "); @@ -43,11 +43,11 @@ Части.Добавить("
|---|
| "); Части.Добавить(Колонка.ПредставлениеЗначения(СтрокаОтчета[Колонка.Имя], СтрокаОтчета)); Части.Добавить(" | "); 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 f6d5251..985bd47 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,12 +1,12 @@ -// Экспортирует результаты бенчмарков в JSON-файл +// Экспортирует результат запуска бенчмарков в JSON-файл // // Параметры: -// РезультатыБенчмарков - см. Бенчмаркинг.Запустить +// РезультатЗапускаБенчмарков - см. Бенчмаркинг.Запустить // ПолноеИмяФайла - Строка - Полное имя файла -Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт +Процедура Записать(РезультатЗапускаБенчмарков, ПолноеИмяФайла) Экспорт Сериализатор = Новый СериализаторРезультатовБенчмарков(); - Сериализатор.ЗаписатьВJson(РезультатыБенчмарков, ПолноеИмяФайла); + Сериализатор.ЗаписатьВ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\222Markdown.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\222Markdown.os" index 64511fc..5ea7b77 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\222Markdown.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\222Markdown.os" @@ -3,24 +3,24 @@ Перем _Лог; // Лог -// Экспортирует результаты бенчмарков в файл Markdown +// Экспортирует результат запуска бенчмарков в файл Markdown Процедура ПриСозданииОбъекта() _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЭкспортерРезультатовБенчмарковВMarkdown"); КонецПроцедуры -// Экспортирует результаты бенчмарков в файл Markdown +// Экспортирует результат запуска бенчмарков в файл Markdown // // Параметры: -// РезультатыБенчмарков - см. Бенчмаркинг.Запустить +// РезультатЗапускаБенчмарков - см. Бенчмаркинг.Запустить // ПолноеИмяФайла - Строка - Полное имя файла -Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт +Процедура Записать(РезультатЗапускаБенчмарков, ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало формирования файла: %1", ПолноеИмяФайла); ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, КодировкаТекста.UTF8); - ЗаписьТекста.ЗаписатьСтроку(РезультатыБенчмарков.СредаОкружения.ВСтроку()); + ЗаписьТекста.ЗаписатьСтроку(Строка(РезультатЗапускаБенчмарков.СредаОкружения)); ЗаписьТекста.ЗаписатьСтроку(""); - ЗаписьТекста.ЗаписатьСтроку(РезультатыБенчмарков.Отчет.КакMarkdown()); + ЗаписьТекста.ЗаписатьСтроку(РезультатЗапускаБенчмарков.Отчет.КакMarkdown()); ЗаписьТекста.Закрыть(); _Лог.Отладка("Завершение формирования файла: %1", ПолноеИмяФайла); 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 9d689da..ae9a09f 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" @@ -15,7 +15,7 @@ // Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков // // Возвращаемое значение: -// РезультатыБенчмарков: +// РезультатЗапускаБенчмарков: // * СредаОкружения - СредаОкруженияБенчмарков // * Конфигурация - КонфигурацияБенчмарков // * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков @@ -71,36 +71,48 @@ #Область СлужебныйПрограммныйИнтерфейс -// Подключает класс бенчмарков +// Подключает файл бенчмарка как сценарий и возвращает его тип для дальнейшего запуска. +// +// Если ИмяТипа не задано, оно формируется из имени файла без расширения. +// При конфликте имён к нему добавляется уникальный суффикс. // // Параметры: -// ПутьКФайлу - Строка - Путь к файлу класса бенчмарков +// ПутьКФайлу - Строка - Полный к файлу бенчмарка (.os) +// ИмяТипа - Строка - Имя типа для регистрации сценария. Если не задано, +// вычисляется из имени файла автоматически. // // Возвращаемое значение: -// Тип, Неопределено -Функция ПодключитьКласс(ПутьКФайлу) Экспорт +// Тип - Тип подключённого сценария, если он содержит хотя бы один бенчмарк +// Неопределено - Если файл не удалось подключить или бенчмарки в сценарии не найдены +Функция ПодключитьБенчмарк(ПутьКФайлу, ИмяТипа = "") Экспорт - ИмяКласса = ИмяКлассаИзСтроки(Новый Файл(ПутьКФайлу).ИмяБезРасширения); + Если Не ЗначениеЗаполнено(ИмяТипа) Тогда + ИмяТипа = ИмяТипаИзСтроки(Новый Файл(ПутьКФайлу).ИмяБезРасширения); - Если СценарийПодключенПоИмени(ИмяКласса) Тогда - ИмяКласса = ИмяКласса + "_" + СтрЗаменить(Новый УникальныйИдентификатор(), "-", ""); + Если ТипСуществует(ИмяТипа) Тогда + ИмяТипа = ИмяТипа + "_" + СтрЗаменить(Новый УникальныйИдентификатор(), "-", ""); + КонецЕсли; КонецЕсли; Попытка - ПодключитьСценарий(ПутьКФайлу, ИмяКласса); - Тип = Тип(ИмяКласса); + ПодключитьСценарий(ПутьКФайлу, ИмяТипа); + Тип = Тип(ИмяТипа); Исключение - _Лог.Ошибка("Не удалось подключить сценарий бенчмарков <%1> по причине: %2", ПутьКФайлу, ОписаниеОшибки()); + _Лог.Ошибка( + "Не удалось подключить файл бенчмарка <%1> по причине: %2", + ПутьКФайлу, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + ); Возврат Неопределено; КонецПопытки; ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); Если ДескрипторыБенчмарков.Количество() = 0 Тогда - _Лог.Предупреждение("Класс <%1> не содержит бенчмарков", ИмяКласса); + _Лог.Предупреждение("Сценарий <%1> не содержит бенчмарков", ИмяТипа); Возврат Неопределено; КонецЕсли; - _Лог.Отладка("Найдено бенчмарков в классе <%1>: %2 шт.", ИмяКласса, ДескрипторыБенчмарков.Количество()); + _Лог.Отладка("Найдено бенчмарков в сценарии <%1>: %2 шт.", ИмяТипа, ДескрипторыБенчмарков.Количество()); Возврат Тип; @@ -114,20 +126,25 @@ #Область СлужебныеПроцедурыИФункции -Функция ИмяКлассаИзСтроки(Строка) +Функция ИмяТипаИзСтроки(Строка) + Если _РегуляркаЗапрещенныеСимволыВИмени = Неопределено Тогда _РегуляркаЗапрещенныеСимволыВИмени = Новый РегулярноеВыражение("[^a-zA-Zа-яА-Я0-9_]"); КонецЕсли; - Возврат _РегуляркаЗапрещенныеСимволыВИмени.Заменить(Строка, ""); + + Возврат _РегуляркаЗапрещенныеСимволыВИмени.Заменить(Строка, ""); + КонецФункции -Функция СценарийПодключенПоИмени(ИмяСценария) +Функция ТипСуществует(ИмяТипа) + Попытка - Объект = Новый(ИмяСценария); // BSLLS:UnusedLocalVariable-off + Тип = Тип(ИмяТипа); // BSLLS:UnusedLocalVariable-off Возврат Истина; Исключение Возврат Ложь; КонецПопытки; + КонецФункции #КонецОбласти 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 c493a4b..e4c511f 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" @@ -203,7 +203,7 @@ КонецЕсли; Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл - Конфигурация.ДобавитьОбработчикСобытия(ИмяСобытия, СвойстваМетода.Имя); + Конфигурация.ДобавитьОбработчикСобытия(СвойстваМетода.Имя, ИмяСобытия); КонецЦикла; КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\261\320\270\320\275\320\260\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\261\320\270\320\275\320\260\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index f2ee90f..0d6c9b4 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\261\320\270\320\275\320\260\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\261\320\270\320\275\320\260\321\202\320\276\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -32,8 +32,8 @@ ТипЭлемента = ТипЗнч(Параметр); Если ТипЭлемента = Тип("ПараметрБенчмарка") Тогда - Имя = Параметр.Имя; - ЭтоПараметрМетода = Параметр.ЭтоПараметрМетода; + Имя = Параметр.Имя(); + ЭтоПараметрМетода = Параметр.ЭтоПараметрМетода(); ИначеЕсли ТипЭлемента = Тип("Массив") Или ТипЭлемента = Тип("ПараметрыМетодаБенчмарка") Тогда @@ -141,8 +141,8 @@ Для Инд = 0 По Комбинация.ВГраница() Цикл ТекущийПараметр = Комбинация[Инд]; - Если ТекущийПараметр.Имя = Параметр.Имя - И ТекущийПараметр.ЭтоПараметрМетода = Параметр.ЭтоПараметрМетода Тогда + Если ТекущийПараметр.Имя() = Параметр.Имя() + И ТекущийПараметр.ЭтоПараметрМетода() = Параметр.ЭтоПараметрМетода() Тогда Комбинация.Удалить(Инд); Прервать; КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262.os" similarity index 69% rename from "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" rename to "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262.os" index 9c14d01..4a2593c 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\274\320\277\320\260\321\200\320\260\321\202\320\276\321\200\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262.os" @@ -1,6 +1,6 @@ #Область ПрограммныйИнтерфейс -// Определяет, совпадают ли значения двух объектов по их внутреннему содержанию. +// Определяет, равны ли значения двух объектов по их внутреннему содержанию. // // Параметры: // Значение1 - Произвольный - Первый объект для сравнения @@ -8,20 +8,20 @@ // // Возвращаемое значение: // Булево -Функция Совпадают(Значение1, Значение2) Экспорт +Функция Равны(Значение1, Значение2) Экспорт Тип = ТипЗнч(Значение1); Если Тип <> ТипЗнч(Значение2) Тогда Возврат Ложь; ИначеЕсли Тип = Тип("Массив") Тогда - Возврат МассивыСовпадают(Значение1, Значение2); + Возврат МассивыРавны(Значение1, Значение2); ИначеЕсли Тип = Тип("Соответствие") Тогда - Возврат СоответствияСовпадают(Значение1, Значение2); + Возврат СоответствияРавны(Значение1, Значение2); ИначеЕсли Тип = Тип("Структура") Тогда - Возврат СтруктурыСовпадают(Значение1, Значение2); + Возврат СтруктурыРавны(Значение1, Значение2); ИначеЕсли Тип = Тип("ТаблицаЗначений") Тогда - Возврат ТаблицыСовпадают(Значение1, Значение2); + Возврат ТаблицыРавны(Значение1, Значение2); Иначе Возврат Значение1 = Значение2; КонецЕсли; @@ -32,14 +32,14 @@ #Область СлужебныеПроцедурыИФункции -Функция МассивыСовпадают(Массив1, Массив2) +Функция МассивыРавны(Массив1, Массив2) Если Массив1.Количество() <> Массив2.Количество() Тогда Возврат Ложь; КонецЕсли; Для Инд = 0 По Массив1.ВГраница() Цикл - Если Не Совпадают(Массив1[Инд], Массив2[Инд]) Тогда + Если Не Равны(Массив1[Инд], Массив2[Инд]) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; @@ -48,7 +48,7 @@ КонецФункции -Функция СоответствияСовпадают(Соответствие1, Соответствие2) +Функция СоответствияРавны(Соответствие1, Соответствие2) Если Соответствие1.Количество() <> Соответствие2.Количество() Тогда Возврат Ложь; @@ -56,7 +56,7 @@ Для Каждого КлючЗначение Из Соответствие1 Цикл Ключ = КлючЗначение.Ключ; - Если Не Совпадают(Соответствие1[Ключ], Соответствие2[КлючЗначение.Ключ]) Тогда + Если Не Равны(Соответствие1[Ключ], Соответствие2[КлючЗначение.Ключ]) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; @@ -65,7 +65,7 @@ КонецФункции -Функция СтруктурыСовпадают(Структура1, Структура2) +Функция СтруктурыРавны(Структура1, Структура2) Если Структура1.Количество() <> Структура2.Количество() Тогда Возврат Ложь; @@ -77,7 +77,7 @@ Возврат Ложь; КонецЕсли; - Если Не Совпадают(Структура1[Ключ], Структура2[Ключ]) Тогда + Если Не Равны(Структура1[Ключ], Структура2[Ключ]) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; @@ -86,7 +86,7 @@ КонецФункции -Функция ТаблицыСовпадают(Таблица1, Таблица2) +Функция ТаблицыРавны(Таблица1, Таблица2) Если Таблица1.Количество() <> Таблица2.Количество() Или Таблица1.Колонки.Количество() <> Таблица2.Колонки.Количество() Тогда @@ -103,7 +103,7 @@ СтрокаТаблицы1 = Таблица1[Инд]; СтрокаТаблицы2 = Таблица2[Инд]; Для Каждого Колонка Из Таблица1.Колонки Цикл - Если Не Совпадают(СтрокаТаблицы1[Колонка.Имя], СтрокаТаблицы2[Колонка.Имя]) Тогда + Если Не Равны(СтрокаТаблицы1[Колонка.Имя], СтрокаТаблицы2[Колонка.Имя]) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; 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" deleted file mode 100644 index 894b1c3..0000000 --- "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" +++ /dev/null @@ -1,56 +0,0 @@ -#Использовать 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\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\321\203\321\202\321\217\320\274\320\270\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\271\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\321\203\321\202\321\217\320\274\320\270\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\271\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" new file mode 100644 index 0000000..57c7950 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\237\321\203\321\202\321\217\320\274\320\270\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\271\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -0,0 +1,63 @@ +#Использовать fs + +Функция ПолучитьАбсолютныйПуть(Путь, КаталогРазрешенияПутей) Экспорт + + Если ЭтоАбсолютныйПуть(Путь) Тогда + Возврат Путь; + КонецЕсли; + + Возврат ФС.НормализоватьПуть(ОбъединитьПути(КаталогРазрешенияПутей, Путь)); + +КонецФункции + +Функция ЭтоАбсолютныйПуть(Знач Путь) Экспорт + Если ЭтоWindows() Тогда + Возврат ЭтоАбсолютныйПутьWindows(Путь); + Иначе + Возврат ЭтоАбсолютныйПутьUnix(Путь); + КонецЕсли; +КонецФункции + +Функция ЭтоАбсолютныйПутьUnix(Знач Путь) Экспорт + Путь = СокрЛП(Путь); + Возврат Лев(Путь, 1) = "/"; +КонецФункции + +Функция ЭтоАбсолютныйПутьWindows(Знач Путь) Экспорт + + Путь = СокрЛП(Путь); + ПервыйСимвол = Лев(Путь, 1); + + Если ПервыйСимвол = "\" Или ПервыйСимвол = "/" Тогда + Возврат Истина; + КонецЕсли; + + // C:\ или C:/ + Если СтрДлина(Путь) >= 3 Тогда + ВторойСимвол = Сред(Путь, 2, 1); + ТретийСимвол = Сред(Путь, 3, 1); + + Если ЭтоДопустимаяБукваДискаWindows(ПервыйСимвол) + И ВторойСимвол = ":" + И (ТретийСимвол = "\" Или ТретийСимвол = "/") Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ЭтоДопустимаяБукваДискаWindows(Символ) + + Код = КодСимвола(Символ); + + Возврат (Код >= КодСимвола("A") И Код <= КодСимвола("Z")) + ИЛИ (Код >= КодСимвола("a") И Код <= КодСимвола("z")); + +КонецФункции + +Функция ЭтоWindows() + Платформа = Новый СистемнаяИнформация().ТипПлатформы; + Возврат Платформа = ТипПлатформы.Windows_x86 Или Платформа = ТипПлатформы.Windows_x86_64; +КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" index 53962e7..bd22ecc 100644 --- "a/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\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\260\320\224\321\202\320\276.os" @@ -16,7 +16,8 @@ &Тип("Строка") Перем Категория; // Строка -&Несериализуемое +&Сериализуемое("Parameters") +&Тип("Массив") &ДляКаждого &Тип("ПараметрБенчмарка") Перем Параметры Экспорт; // Массив из ПараметрБенчмарка &Несериализуемое @@ -35,9 +36,7 @@ Перем ИсполняющаяСреда Экспорт; // ИсполняющаяСредаБенчмарковДто &Сериализуемое("Measurements") -&Тип("Массив") -&ДляКаждого -&Тип("РезультатИтерацииБенчмаркаДто") +&Тип("Массив") &ДляКаждого &Тип("РезультатИтерацииБенчмаркаДто") Перем Замеры Экспорт; // Массив из РезультатИтерацииБенчмаркаДто Процедура ПриСозданииОбъекта() @@ -68,26 +67,6 @@ &ПослеДесериализации Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт - ДесериализоватьПараметры(ПрочитанныеСвойства); - -КонецПроцедуры - -&Сериализуемое("Parameters") -Функция ПолучитьПодготовленныеКСериализацииПараметры() Экспорт - - ПодготовленныеПараметры = Новый Структура(); - - Для Каждого Параметр Из Параметры Цикл - Значение = СериализацияОбъектовБенчмаркинга.ПривестиКПримитиву(Параметр.Значение); - ПодготовленныеПараметры.Вставить(Параметр.Имя, Значение); - КонецЦикла; - - Возврат ПодготовленныеПараметры; - -КонецФункции - -Процедура ДесериализоватьПараметры(ПрочитанныеСвойства) - ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Тип, Метод); Если ПрочитанныеСвойства.Свойство("Category") Тогда @@ -98,24 +77,6 @@ ДескрипторБенчмарка.ИспользоватьКакЭталон(ПрочитанныеСвойства["Baseline"]); КонецЕсли; - Если ПрочитанныеСвойства.Свойство("Parameters") Тогда - ИменаПараметровБенчмарка = ДескрипторБенчмарка.ИменаПараметров(); - КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); - - Для Каждого ДанныеПараметр Из ПрочитанныеСвойства["Parameters"] Цикл - - Имя = ДанныеПараметр.Ключ; - Значение = ДанныеПараметр.Значение; - - ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя); - ЭтоПараметрМетода = Не ИндексПараметра = Неопределено; - - ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); - Параметры.Добавить(ПараметрБенчмарка); - - КонецЦикла; - КонецЕсли; - КонецПроцедуры #КонецОбласти diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg index 745ac9b..768af52 100644 --- a/tasks/oscript.cfg +++ b/tasks/oscript.cfg @@ -1,2 +1,3 @@ lib.system = ../oscript_modules -systemlanguage = ru \ No newline at end of file +systemlanguage = ru +lang.explicitImports = off \ 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\221\320\265\320\267\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/fixtures/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\221\320\265\320\267\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.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\221\320\265\320\267\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" rename to "tests/fixtures/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\221\320\265\320\267\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" 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\221\321\203\321\204\320\265\321\200\320\224\320\262\320\276\320\270\321\207\320\275\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205.os" "b/tests/fixtures/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\221\321\203\321\204\320\265\321\200\320\224\320\262\320\276\320\270\321\207\320\275\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205.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\221\321\203\321\204\320\265\321\200\320\224\320\262\320\276\320\270\321\207\320\275\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205.os" rename to "tests/fixtures/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\221\321\203\321\204\320\265\321\200\320\224\320\262\320\276\320\270\321\207\320\275\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205.os" 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\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" "b/tests/fixtures/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\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 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\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" rename to "tests/fixtures/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\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" 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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/tests/fixtures/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\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" similarity index 99% 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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" rename to "tests/fixtures/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\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index 05bd19f..6450761 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\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/tests/fixtures/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\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -1,3 +1,5 @@ +#Использовать "../../paramsSources" + &ИсточникПараметров("ПолучитьЧисловыеЗначения") Перем Поле Экспорт; 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/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\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" similarity index 67% 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\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" rename to "tests/fixtures/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\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 c360e20..431f2e5 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/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\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" @@ -1,4 +1,5 @@ -Перем События Экспорт; +Перем ПутьКЛогу Экспорт; +Перем ЗаписьЛога; // ЗаписьТекста &Бенчмарк Процедура Бенчмарк() Экспорт @@ -10,8 +11,10 @@ Конфигурация = Контекст.Конфигурация; ДескрипторыБенчмарков = Контекст.ДескрипторыБенчмарков; - События.Добавить("ПередВсеми"); - + ПутьКФайлу = Конфигурация.Параметры()[0].Значение(); + ЗаписьЛога = Новый ЗаписьТекста(ПутьКФайлу); + ЗаписьЛога.ЗаписатьСтроку("ПередВсеми"); + КонецПроцедуры &ПослеВсех @@ -23,7 +26,8 @@ Отчет = Контекст.Отчет; СредаОкружения = Контекст.СредаОкружения; - События.Добавить("ПослеВсех"); + ЗаписьЛога.ЗаписатьСтроку("ПослеВсех"); + ЗаписьЛога.Закрыть(); КонецПроцедуры @@ -33,8 +37,8 @@ ДескрипторБенчмарка = Контекст.ДескрипторБенчмарка; ПараметрыМетода = Контекст.ПараметрыМетода; - События.Добавить("ПередКаждым"); - + ЗаписьЛога.ЗаписатьСтроку("ПередКаждым"); + КонецПроцедуры &ПослеКаждого @@ -45,16 +49,10 @@ Замеры = Контекст.Замеры; Статистика = Контекст.Статистика; - События.Добавить("ПослеКаждого"); - -КонецПроцедуры - -Процедура ПередЗапускомБезПараметров() Экспорт - - События.Добавить("ПередЗапускомБезПараметров"); + ЗаписьЛога.ЗаписатьСтроку("ПослеКаждого"); КонецПроцедуры -Процедура ПриСозданииОбъекта() - События = Новый Массив(); +Процедура БезАннотации(Контекст) Экспорт + ЗаписьЛога.ЗаписатьСтроку("БезАннотации"); КонецПроцедуры \ 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\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.os" "b/tests/fixtures/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\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.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\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.os" rename to "tests/fixtures/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\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.os" diff --git "a/tests/fixtures/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\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/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\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" new file mode 100644 index 0000000..d162930 --- /dev/null +++ "b/tests/fixtures/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\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" @@ -0,0 +1,35 @@ +#Использовать "../../paramsSources" +#Использовать "../../handlers" + +&Параметры(1, 2) +Перем ПолеОбщее Экспорт; + +&Бенчмарк +&Параметры(3, 4) +&Параметры(5, 6) +Процедура Бенчмарк(Парам1, Парам2) Экспорт +КонецПроцедуры + +Функция СоставныеПараметры() Экспорт + + Результат = Новый Массив(); + + // Таблица + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("Колонка"); + Таблица.Добавить().Колонка = 1; + + Результат.Добавить(Таблица); + + // Несериализуемый + Результат.Добавить(Новый ЧтениеXML()); + + // Сериализуемый объект класса + Объект = Новый БенчмаркСПараметрамиМетодаИПоля(); + Объект.ПолеОбщее = Истина; + + Результат.Добавить(Объект); + + Возврат Результат; + +КонецФункции 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\237\320\276\320\273\321\217.os" "b/tests/fixtures/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\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\237\320\276\320\273\321\217.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\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\237\320\276\320\273\321\217.os" rename to "tests/fixtures/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\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\237\320\276\320\273\321\217.os" 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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" "b/tests/fixtures/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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" similarity index 94% 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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" rename to "tests/fixtures/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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" index 59bb2d9..90764de 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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" +++ "b/tests/fixtures/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\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" @@ -1,3 +1,5 @@ +#Использовать "../../handlers" + &Параметры(100) Перем Значение Экспорт; 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\270\320\237\320\276\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217\320\274.os" "b/tests/fixtures/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\270\320\237\320\276\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217\320\274.os" similarity index 99% 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\270\320\237\320\276\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217\320\274.os" rename to "tests/fixtures/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\270\320\237\320\276\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217\320\274.os" index 78315a6..79df090 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\270\320\237\320\276\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217\320\274.os" +++ "b/tests/fixtures/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\270\320\237\320\276\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217\320\274.os" @@ -1,4 +1,3 @@ - &Бенчмарк &Категория("А") Процедура БенчмаркА1() Экспорт 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\270\320\241\320\227\320\260\320\264\320\265\321\200\320\266\320\272\320\276\320\271.os" "b/tests/fixtures/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\270\320\241\320\227\320\260\320\264\320\265\321\200\320\266\320\272\320\276\320\271.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\270\320\241\320\227\320\260\320\264\320\265\321\200\320\266\320\272\320\276\320\271.os" rename to "tests/fixtures/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\270\320\241\320\227\320\260\320\264\320\265\321\200\320\266\320\272\320\276\320\271.os" 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\270\320\241\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\274\320\270.os" "b/tests/fixtures/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\270\320\241\320\232\320\276\320\273\320\276\320\275\320\272\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\270\320\241\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\274\320\270.os" rename to "tests/fixtures/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\270\320\241\320\232\320\276\320\273\320\276\320\275\320\272\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\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\241\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\276\320\271.os" "b/tests/fixtures/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\270\320\241\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\276\320\271.os" similarity index 93% 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\270\320\241\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\276\320\271.os" rename to "tests/fixtures/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\270\320\241\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\276\320\271.os" index 915ac03..71eb771 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\270\320\241\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\276\320\271.os" +++ "b/tests/fixtures/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\270\320\241\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\276\320\271.os" @@ -1,3 +1,5 @@ +#Использовать "../../handlers" + &Параметры(2, 1) Перем Параметр Экспорт; 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\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.os" "b/tests/fixtures/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\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.os" similarity index 99% 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\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.os" rename to "tests/fixtures/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\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.os" index e1f5551..5ca8f78 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\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.os" +++ "b/tests/fixtures/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\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.os" @@ -1,4 +1,3 @@ - &Бенчмарк Процедура Бенчмарк() Экспорт КонецПроцедуры 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\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" "b/tests/fixtures/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\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\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" rename to "tests/fixtures/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\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\237\321\203\321\201\321\202\320\276\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" "b/tests/fixtures/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\321\201\321\202\320\276\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" similarity index 100% rename from "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\321\201\321\202\320\276\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" rename to "tests/fixtures/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\321\201\321\202\320\276\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" diff --git "a/tests/fixtures/handlers/\320\234\320\276\320\264\321\203\320\273\320\270/\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\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/fixtures/handlers/\320\234\320\276\320\264\321\203\320\273\320\270/\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\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..b97b324 --- /dev/null +++ "b/tests/fixtures/handlers/\320\234\320\276\320\264\321\203\320\273\320\270/\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\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,47 @@ + +Процедура УстановкаВремени(Контекст) Экспорт + + Задержка = Неопределено; + Для Каждого Параметр Из Контекст.Параметры Цикл + Если Параметр.Имя() = "Задержка" Тогда + Задержка = Параметр.Значение(); + КонецЕсли; + КонецЦикла; + + Если Задержка = Неопределено Тогда + Задержка = 1; + КонецЕсли; + + Задержка = Задержка * ЕдиницыИзмеренийБенчмарков.Миллисекунда.ОтношениеКБазовой; + + Для Каждого СтрокаТаблицы Из Контекст.Замеры Цикл + Если СтрокаТаблицы.Этап = ЭтапыБенчмарка.Измерение Тогда + СтрокаТаблицы.НаносекундЗаОперацию = Задержка; + СтрокаТаблицы.Наносекунд = Задержка * СтрокаТаблицы.КоличествоОпераций; + КонецЕсли; + КонецЦикла; + + Контекст.Статистика.Прочитать(Контекст.Замеры); + +КонецПроцедуры + +Процедура УстановкаМокСредыОкружения(Контекст) Экспорт + + Контекст.СредаОкружения.ВерсияБиблиотеки = "0.1.x-mock"; + Контекст.СредаОкружения.ВерсияОС = "Microsoft Windows NT 10.0.x.mock"; + Контекст.СредаОкружения.ВерсияИсполняющейСреды = "2.0.0-mock"; + Контекст.СредаОкружения.ИнформацияОПроцессоре.ИмяПроцессора = "MockIntel Core i7-6700HQ CPU 2.60GHz"; + Контекст.СредаОкружения.ИнформацияОПроцессоре.КоличествоПроцессоров = 1; + Контекст.СредаОкружения.ИнформацияОПроцессоре.КоличествоЯдер = 4; + Контекст.СредаОкружения.ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров = 8; + Контекст.СредаОкружения.ИнформацияОПроцессоре.НоминальнаяЧастота = 3100000000; + + ПостроительОтчета = Новый ПостроительОтчетаБенчмарков( + Контекст.ДескрипторыБенчмарков, + Контекст.Конфигурация, + Контекст.Запуски + ); + + Контекст.Отчет = ПостроительОтчета.Сформировать(); + +КонецПроцедуры \ No newline at end of file diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/tests/fixtures/paramsSources/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" similarity index 100% rename from "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" rename to "tests/fixtures/paramsSources/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" diff --git "a/tests/fixtures/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\276\320\264\321\203\320\273\321\214\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/tests/fixtures/paramsSources/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\276\320\264\321\203\320\273\321\214\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" similarity index 100% rename from "tests/fixtures/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\276\320\264\321\203\320\273\321\214\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" rename to "tests/fixtures/paramsSources/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\276\320\264\321\203\320\273\321\214\320\241\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\274\320\270\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" diff --git a/tests/fixtures/verified-report.html b/tests/fixtures/verified-report.html index c7857be..54868fe 100644 --- a/tests/fixtures/verified-report.html +++ b/tests/fixtures/verified-report.html @@ -12,7 +12,7 @@