diff --git a/.bsl-language-server.json b/.bsl-language-server.json index a748b4f..8eda71d 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -5,7 +5,11 @@ "listOfIncorrectFirstSymbol": ";|,\\s*\\S+" }, "Typo": { - "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас" + "userWordsToIgnore": "Дто,Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарками,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Десериализованный,Десериализуемые,Сериализуемый,Сериализуемое,Несериализуемое,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Десериализатор,Сериализовать,Сериализации,Сериализуемые,Сериализацией,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Десериализации,Несериализуемых,Валидатор,Валидировать,Алиас" + }, + "LatinAndCyrillicSymbolInWord": false, + "MagicNumber": { + "authorizedNumbers": "-1,0,1,2" } } } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59f1e0f..4abd088 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,5 +12,6 @@ jobs: with: package_mask: "benchmark-*.ospx" dotnet_version: "8.x.x" + locale: "en_US" secrets: PUSH_TOKEN: ${{ secrets.PUSH_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 1c4d7bf..bdb75ea 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -13,5 +13,6 @@ jobs: github_repository: Stivo182/BenchmarkOneScript dotnet_version: "8.x.x" build_package: true + locale: "en_US" secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index aba7b2e..8e87019 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,4 +15,5 @@ jobs: with: oscript_version: ${{ matrix.oscript_version }} dotnet_version: "8.x.x" - build_package: true \ No newline at end of file + build_package: true + locale: "en_US" \ No newline at end of file diff --git "a/BenchmarkArtifacts/\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-report.html" "b/BenchmarkArtifacts/\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-report.html" new file mode 100644 index 0000000..c7857be --- /dev/null +++ "b/BenchmarkArtifacts/\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-report.html" @@ -0,0 +1,128 @@ + + + + + + + + +
BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock
+MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method + +Значение + +П1 + +П2 + +П + +Mean + +StdErr + +StdDev + +Min + +Max + +Op/s +
+БенчмаркВторой + +100 + + + + + +Массив + +1.0 ms + +0.0 ns + +0.0 ns + +1.0 ms + +1.0 ms + +1,000 +
+БенчмаркПервый + +100 + +1 + +Тест + + + +1.0 ms + +0.0 ns + +0.0 ns + +1.0 ms + +1.0 ms + +1,000 +
+ + \ No newline at end of file diff --git a/README.md b/README.md index 5e60e28..0123af0 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ - **Мониторинг памяти:** отслеживание аллокации памяти во время выполнения. - **Мультиверсионное сравнение:** запуск бенчмарков на указанных версиях исполняющей среды OneScript с консолидацией результатов. - **Метрики:** время выполнения (среднее, минимум, максимум), стандартное отклонение и ошибка, операций в секунду (Op/s), квартили и произвольные процентили. -- **Экспорт результатов:** сохранение результатов выполнения бенчмарков в Markdown, JSON, XML, HTML. +- **Экспорт результатов:** сохранение результатов выполнения бенчмарков в Markdown, JSON, HTML. ## 🚀 Быстрый старт diff --git a/docs/CLI.md b/docs/CLI.md index 0401683..00c9912 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -20,10 +20,10 @@ benchos run [OPTIONS] [FILE] | `--throughput` | Стратегия выполнения [`ПропускнаяСпособность`](СтратегииЗапуска.md#пропускная-способность-throughput) | | | `--coldstart` | Стратегия выполнения [`ХолодныйЗапуск`](СтратегииЗапуска.md#холодный-запуск-cold-start) | | | `-m`, `--memory` | Включить [мониторинг использования памяти](МониторингПамяти.md) | | -| `-e`, `--exporters` | Форматы [экспорта результатов](ЭкспортРезультатов.md) (`md`, `json`, `xml`, `html`) | `-e json,xml` | +| `-e`, `--exporters` | Форматы [экспорта результатов](ЭкспортРезультатов.md) (`md`, `json`, `html`) | `-e json,html` | | `-a`, `--artifacts` | Каталог для сохранения результатов | `-a path/to/file` | | `-r`, `--recursive` | Рекурсивный поиск в поддиректориях | | -| `-c`, `--config` | Файл конфигурации бенчмарков в формате JSON | `-c path/to/config.json` | +| `--settings` | Файл настроек бенчмарков в формате JSON | `--settings path/to/settings.json` | ## Примеры 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 fe187d6..f8ed076 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" @@ -27,10 +27,11 @@ ```bsl // Параметры: // * Контекст - Структура: -// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // ** Конфигурация - КонфигурацияБенчмарков -// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// ** Запуски - Массив из РезультатЗапускаБенчмаркаДто // ** Отчет - ОтчетБенчмарков +// ** СредаОкружения - СредаОкруженияБенчмарков &ПослеВсех Процедура ПослеВсех(Контекст) Экспорт ``` @@ -57,7 +58,7 @@ // * Контекст - Структура: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка -// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// ** Замеры - Массив из РезультатИтерацииБенчмаркаДто // ** Статистика - СтатистикаБенчмарка &ПослеКаждого Процедура ПослеКаждого(Контекст) Экспорт diff --git "a/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" "b/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" index 56ea7d5..e0cd4b0 100644 --- "a/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" +++ "b/docs/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.md" @@ -25,7 +25,6 @@ ```bsl &ЭкспортMarkdown &ЭкспортJson -&ЭкспортXml &ЭкспортHtml Процедура ПриСозданииОбъекта() ``` @@ -35,7 +34,6 @@ ```bsl // Добавление экспортера (например, для JSON) Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json); -// ЭкспортерыРезультатовБенчмарков.Xml // ЭкспортерыРезультатовБенчмарков.Html // ЭкспортерыРезультатовБенчмарков.Markdown @@ -51,7 +49,6 @@ ```bsl &ЭкспортMarkdown &ЭкспортJson -&ЭкспортXml &ЭкспортHtml &КаталогАртефактов("./АртефкатыЗапускаБенчмарков") Процедура ПриСозданииОбъекта() @@ -85,5 +82,4 @@ Op/s : Операций в секунду C:\myapp\АртефкатыЗапускаБенчмарков\ИмяКласса-report.html C:\myapp\АртефкатыЗапускаБенчмарков\ИмяКласса-report.json C:\myapp\АртефкатыЗапускаБенчмарков\ИмяКласса-report.md -C:\myapp\АртефкатыЗапускаБенчмарков\ИмяКласса-report.xml ``` \ No newline at end of file diff --git a/packagedef b/packagedef index 4bcc7b0..df71714 100644 --- a/packagedef +++ b/packagedef @@ -7,6 +7,7 @@ .Версия("0.6.0") .Автор("Dmitry Ivanov") .АдресАвтора("https://github.com/Stivo182") + .АдресРепозитория("https://github.com/Stivo182/BenchmarkOneScript") .Описание("Бенчмаркинг на OneScript") .ВерсияСреды("1.9.3") .ВключитьФайл("src/BenchmarkOneScript") @@ -26,12 +27,14 @@ .ЗависитОт("coloratos", "0.3.0") .ЗависитОт("fluent", "0.6.1") .ЗависитОт("lambdas", "0.3.2") - .ЗависитОт("xml-parser", "0.1.1") .ЗависитОт("logos", "1.7.1") .ЗависитОт("fs", "1.2.0") .ЗависитОт("tempfiles", "1.1.1") .ЗависитОт("packageinfo", "1.1.1") .ЗависитОт("1commands", "1.5.0") + .ЗависитОт("validate", "0.3.0") + .ЗависитОт("reflector", "0.7.1") + .ЗависитОт("collectionos", "0.8.2") .РазработкаЗависитОт("1testrunner") .РазработкаЗависитОт("coverage") .ИсполняемыйФайл("src/BenchmarkOneScript/cmd/main.os", "benchos") \ No newline at end of file diff --git "a/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" "b/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" index 66da71d..93170e8 100644 --- "a/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" +++ "b/samples/api/\320\227\320\260\320\277\321\203\321\201\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\242\320\265\321\201\321\202\320\260\321\205\320\237\321\200\320\270\320\274\320\265\321\200.os" @@ -8,7 +8,7 @@ Порог = 150; // мс Результат = Бенчмаркинг.Запустить(Тип("БенчмаркБазовый")); - Статистика = Результат.Расшифровка[0].Статистика.ВМиллисекунды(); + Статистика = Результат.Запуски[0].Статистика.ВМиллисекунды(); Ожидаем.Что(Статистика.Среднее).Меньше(Порог); @@ -23,7 +23,7 @@ ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("А2"); Результат = Бенчмаркинг.Запустить(ДескрипторБенчмарка); - Статистика = Результат.Расшифровка[0].Статистика.ВМиллисекунды(); + Статистика = Результат.Запуски[0].Статистика.ВМиллисекунды(); Ожидаем.Что(Статистика.Среднее).Меньше(Порог); diff --git "a/samples/benchmarks/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.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\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" index 05fd177..6c4eb23 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\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.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\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262.os" @@ -1,6 +1,5 @@ &ЭкспортMarkdown &ЭкспортJson -&ЭкспортXml &ЭкспортHtml Процедура ПриСозданииОбъекта() КонецПроцедуры diff --git a/src/BenchmarkOneScript.Extensions/ObjectExtension.cs b/src/BenchmarkOneScript.Extensions/ObjectExtension.cs deleted file mode 100644 index 9bbca9d..0000000 --- a/src/BenchmarkOneScript.Extensions/ObjectExtension.cs +++ /dev/null @@ -1,28 +0,0 @@ -#if NET6_0_OR_GREATER -using OneScript.Contexts; -#endif - -using ScriptEngine.Machine; -using ScriptEngine.Machine.Contexts; - -namespace BenchmarkOneScript.Extensions; - -[ContextClass("РасширениеОбъекта")] -public class ObjectExtension : AutoContext -{ - [ContextProperty("ХешКод", "HashCode")] - public string HashCode => _Object.GetHashCode().ToString("X"); - - IValue _Object; - - public ObjectExtension(IValue obj) - { - _Object = obj; - } - - [ScriptConstructor] - public static ObjectExtension Constructor(IValue obj) - { - return new ObjectExtension(obj); - } -} \ No newline at end of file diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" index 1dc370e..1217453 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" @@ -5,9 +5,9 @@ // // Параметры: // Контекст - Структура: -// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // * Конфигурация - КонфигурацияБенчмарков -// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// * Запуски - Массив из РезультатЗапускаБенчмаркаДто // * Отчет - ОтчетБенчмарков // * СредаОкружения - СредаОкруженияБенчмарков // diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" index bf14c6c..77087d4 100644 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" +++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" @@ -7,7 +7,7 @@ // Контекст - Структура: // * ДескрипторБенчмарка - ДескрипторБенчмарка // * Параметры - Массив из ПараметрБенчмарка -// * Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// * Замеры - Массив из РезультатИтерацииБенчмаркаДто // * Статистика - СтатистикаБенчмарка // // Примеры: diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" deleted file mode 100644 index aa1ce58..0000000 --- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" +++ /dev/null @@ -1,12 +0,0 @@ -// Автоматически генерирует отчет о результатах бенчмарков в формате XML (.xml). -// -// Применяется только к методу ПриСозданииОбъекта. -// -// Примеры: -// &ЭкспортXml -// Процедура ПриСозданииОбъекта() -// // ... -// КонецПроцедуры -&Аннотация("ЭкспортXml") -Процедура ПриСозданииОбъекта() -КонецПроцедуры \ No newline at end of file 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 3ce69bf..e3a22be 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" @@ -28,7 +28,7 @@ &ТЧисло Перем _КоличествоВызововЗаИтерацию; // Число -&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов через запятую (md, json, xml, html)") +&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов через запятую (md, json, html)") &ТСтрока Перем _Экспортеры; // Строка @@ -44,9 +44,9 @@ &Флаг Перем _ПропускнаяСпособность; // Булево, Неопределено -&Опция(Имя = "c config", Описание = "Файл конфигурации бенчмарков в формате JSON") +&Опция(Имя = "settings", Описание = "Файл настроек бенчмарков в формате JSON") &ТСтрока -Перем _ФайлКонфигурации; // Строка +Перем _ФайлНастроек; // Строка &Опция(Имя = "runtime", Описание = "Версии OneScript через запятую (current, stable, dev, x.x.x)") &ТСтрока @@ -62,8 +62,11 @@ &ТМассивСтрок Перем _МассивФайлов; // Массив из Строка +Перем _Лог; // Лог + &КомандаПриложения(Имя = "run", Описание = "Запуск бенчмарков") Процедура ПриСозданииОбъекта() + _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark"); КонецПроцедуры &ВыполнениеКоманды @@ -71,42 +74,74 @@ УстановитьРежимВоркер(); - Для Каждого Каталог Из КаталогиБенчмарков() Цикл - Бенчмаркинг.ЗапуститьИзКаталога(Каталог, _Рекурсивно, ПрочитатьКонфигурацию()); - КонецЦикла; + ПодключенныеТипы = ПодключитьТипы(); + Настройки = ПрочитатьНастройки(); + Конфигурация = ПрочитатьКонфигурацию(Настройки); - Для Каждого ИмяФайла Из ФайлыБенчмарков() Цикл - Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); - Если Не Тип = Неопределено Тогда - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - Конфигурация.Объединить(ПрочитатьКонфигурацию()); - Бенчмаркинг.Запустить(Тип, Конфигурация); + Если ПодключенныеТипы.Количество() = 0 Тогда + _Лог.Предупреждение("Не найдено ни одного файла с бенчмарками для запуска"); + Возврат; + КонецЕсли; + + Для Каждого Тип Из ПодключенныеТипы Цикл + + КонфигурацияТипа = Новый КонфигурацияБенчмарков(Тип); + КонфигурацияТипа.Объединить(Конфигурация); + + Если Не Настройки = Неопределено И Настройки.ДескрипторыБенчмарков.Количество() > 0 Тогда + Источник = Настройки.ДескрипторыБенчмарков; + Иначе + Источник = Тип; КонецЕсли; + + Бенчмаркинг.Запустить(Источник, КонфигурацияТипа); + КонецЦикла; КонецПроцедуры -Функция КаталогиБенчмарков() - - Каталоги = Новый Массив(); +Функция ПрочитатьНастройки() - Для Каждого ИмяФайла Из _МассивФайлов Цикл - Если ФС.КаталогСуществует(ИмяФайла) Тогда - Каталоги.Добавить(ИмяФайла); + Если Не ЗначениеЗаполнено(_ФайлНастроек) Тогда + Возврат Неопределено; + КонецЕсли; + + Сериализатор = Новый СериализаторНастроекБенчмарков(); + Возврат Сериализатор.ПрочитатьИзJson(_ФайлНастроек); + +КонецФункции + +Функция ПодключитьТипы() + + ПодключенныеТипы = Новый Массив(); + Для Каждого ИмяФайла Из НайтиФайлыБенчмарков() Цикл + Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); + Если Не Тип = Неопределено Тогда + ПодключенныеТипы.Добавить(Тип); КонецЕсли; КонецЦикла; - Возврат Каталоги; + Возврат ПодключенныеТипы; КонецФункции -Функция ФайлыБенчмарков() +Функция НайтиФайлыБенчмарков() Файлы = Новый Массив(); Для Каждого ИмяФайла Из _МассивФайлов Цикл - Если Не ФС.КаталогСуществует(ИмяФайла) Тогда - Файлы.Добавить(ПолноеИмяФайлаСценария(ИмяФайла)); + Если ФС.КаталогСуществует(ИмяФайла) Тогда + НайденныеФайлы = НайтиФайлы(ИмяФайла, "*.os", _Рекурсивно); + Для Каждого Файл Из НайденныеФайлы Цикл + Если Файлы.Найти(Файл.ПолноеИмя) = Неопределено Тогда + Файлы.Добавить(Файл.ПолноеИмя); + КонецЕсли; + КонецЦикла; + Иначе + ПолноеИмяФайла = ПолноеИмяФайлаСценария(ИмяФайла); + Если Файлы.Найти(ПолноеИмяФайла) = Неопределено Тогда + Файлы.Добавить(ПолноеИмяФайла); + КонецЕсли; КонецЕсли; КонецЦикла; @@ -131,11 +166,10 @@ КонецФункции -Функция ПрочитатьКонфигурацию() +Функция ПрочитатьКонфигурацию(Настройки) - Если ЗначениеЗаполнено(_ФайлКонфигурации) Тогда - Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); - Конфигурация = Сериализатор.ДесериализоватьИзJSON(_ФайлКонфигурации); + Если Настройки <> Неопределено Тогда + Конфигурация = Настройки.Конфигурация; Иначе Конфигурация = Новый КонфигурацияБенчмарков(); КонецЕсли; @@ -188,14 +222,13 @@ ДопустимыеЗначения = Новый Соответствие(); ДопустимыеЗначения.Вставить("markdown", "Markdown"); ДопустимыеЗначения.Вставить("json", "Json"); - ДопустимыеЗначения.Вставить("xml", "Xml"); ДопустимыеЗначения.Вставить("html", "Html"); Для Каждого Экспортер Из СтрРазделить(_Экспортеры, ", ", Ложь) Цикл Имя = ДопустимыеЗначения[НРег(Экспортер)]; - ТекстОшибки = СтрШаблон("Неизвестный экспортер %1. Допустимые значения: markdown, json, xml, html", Экспортер); + ТекстОшибки = СтрШаблон("Неизвестный экспортер %1. Допустимые значения: markdown, json, html", Экспортер); Ожидаем.Что(Имя, ТекстОшибки).Заполнено(); Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков[Имя]); diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" index 3db6d92..c013fd2 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" @@ -26,22 +26,22 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Если СтрокаРезультата.ЭтоЭталон Тогда + Если РезультатЗапускаБенчмарка.ЭтоЭталон Тогда Возврат 0; КонецЕсли; - Если СтрокаРезультата.Эталон = Неопределено Тогда + Если РезультатЗапускаБенчмарка.Эталон = Неопределено Тогда Возврат "?"; КонецЕсли; - Статистика = СтрокаРезультата.Статистика.Разделить(СтрокаРезультата.Эталон.Статистика); + Статистика = РезультатЗапускаБенчмарка.Статистика.Разделить(РезультатЗапускаБенчмарка.Эталон.Статистика); Возврат Статистика.СтандартноеОтклонение; diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" index 9dd095b..4d6b952 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" @@ -17,18 +17,18 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Строка -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - ИсполняющаяСреда = СтрокаРезультата.ИсполняющаяСреда; + ИсполняющаяСреда = РезультатЗапускаБенчмарка.ИсполняющаяСреда; Если ЗначениеЗаполнено(ИсполняющаяСреда.Наименование) Тогда Возврат СтрШаблон("%1 (%2)", ИсполняющаяСреда.Наименование, ИсполняющаяСреда.Версия); КонецЕсли; - Возврат СтрокаРезультата.ИсполняющаяСреда.Версия; + Возврат РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" index 1d6d1e3..e700db7 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().ВерхнийКвартиль; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().ВерхнийКвартиль; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" index cc0428b..ccbc31f 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВыделяемаяПамять; + Возврат РезультатЗапускаБенчмарка.Статистика.ВыделяемаяПамять; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" index 00b3aef..d30c49e 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" @@ -17,13 +17,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.ДескрипторБенчмарка.Категория(); + Возврат РезультатЗапускаБенчмарка.ДескрипторБенчмарка.Категория(); КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" index bdc4af0..0598b29 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" @@ -24,22 +24,22 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Если СтрокаРезультата.ЭтоЭталон Тогда + Если РезультатЗапускаБенчмарка.ЭтоЭталон Тогда Возврат 1; КонецЕсли; - Если СтрокаРезультата.Эталон = Неопределено Тогда + Если РезультатЗапускаБенчмарка.Эталон = Неопределено Тогда Возврат "?"; КонецЕсли; - Статистика = СтрокаРезультата.Статистика.Разделить(СтрокаРезультата.Эталон.Статистика); + Статистика = РезультатЗапускаБенчмарка.Статистика.Разделить(РезультатЗапускаБенчмарка.Эталон.Статистика); Возврат Статистика.Среднее; diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" index 8ae23b5..4f31cf7 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Макс; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Макс; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" index 8d47e23..893149c 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" @@ -22,13 +22,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Медиана; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Медиана; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" index 4715fac..c64006a 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" @@ -17,13 +17,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.ДескрипторБенчмарка.Метод(); + Возврат РезультатЗапускаБенчмарка.ДескрипторБенчмарка.Метод(); КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" index f2985fe..47f0875 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Мин; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Мин; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" index f56dee8..9334799 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().НижнийКвартиль; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().НижнийКвартиль; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" index 02aa94b..4150d5f 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().ОперацийВСекунду; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().ОперацийВСекунду; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\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 221833d..68bba33 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" @@ -21,16 +21,16 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт ИмяПараметра = ИмяПараметра(Колонка); - Для Каждого Параметр Из СтрокаРезультата.Параметры Цикл + Для Каждого Параметр Из РезультатЗапускаБенчмарка.Параметры Цикл Если Параметр.Имя = ИмяПараметра Тогда Возврат Параметр.Значение; КонецЕсли; diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" index f835c83..df86a81 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" @@ -24,16 +24,16 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Число -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off Процентиль = ПроцентильПоКолонке(Колонка.Имя); - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Квантиль(Процентиль / 100); + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Квантиль(Процентиль / 100); КонецФункции diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" index 9c0d647..77a503a 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().Среднее; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().Среднее; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" index 0d24a5a..e38ace5 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().СтандартнаяОшибкаСреднего; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().СтандартнаяОшибкаСреднего; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" index a0be12e..9ad6672 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" @@ -20,13 +20,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.Статистика.ВНаносекунды().СтандартноеОтклонение; + Возврат РезультатЗапускаБенчмарка.Статистика.ВНаносекунды().СтандартноеОтклонение; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" index a24378e..d2d966a 100644 --- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" +++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" @@ -18,13 +18,13 @@ // Возвращает значение колонки // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт // BSLLS:UnusedParameters-off - Возврат СтрокаРезультата.ЭтоЭталон; + Возврат РезультатЗапускаБенчмарка.ЭтоЭталон; КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 523d3b8..914bbb7 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" @@ -152,9 +152,9 @@ Процедура ПроверитьПараметрНаВозможностьСериализации(Параметр) ШаблонОшибки = - "Значение параметра <%1> должно быть сериализуемым для определения эталонов между разными версиями OneScript"; + "Значение параметра <%1> должно быть примитивным для определения эталонов между разными версиями OneScript"; - Если Не СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Параметр.Значение) Тогда + Если Не СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Параметр.Значение) Тогда ТекстОшибки = СтрШаблон(ШаблонОшибки, Параметр.Имя); Если _СписокОшибок.Найти(ТекстОшибки) = Неопределено Тогда _СписокОшибок.Добавить(ТекстОшибки); @@ -173,7 +173,7 @@ КонецЕсли; Для Каждого ОбработчикСобытия Из _Конфигурация.ОбработчикиСобытий() Цикл - Если ТипЗнч(ОбработчикСобытия.Обработчик) = Тип("Делегат") Тогда + Если ТипЗнч(ОбработчикСобытия.Обработчик) <> Тип("Строка") Тогда _СписокОшибок.Добавить(ТекстОшибки); Возврат; КонецЕсли; 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 b2280d6..99a44a8 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" @@ -1,21 +1,47 @@ #Использовать delegate +#Использовать validate +#Использовать reflector +#Использовать "../../dto" +&Сериализуемое("Type") +&Тип("Тип") +&Заполнено Перем _Тип; // Тип - Класс бенчмарков + +&Сериализуемое("Method") +&Тип("Строка") +&Заполнено Перем _Метод; // Строка - Метод бенчмарка + +&Сериализуемое("Baseline") +&Тип("Булево") Перем _ЭтоЭталон; // Булево + +&Сериализуемое("Category") +&Тип("Строка") Перем _Категория; // Строка -Перем _НаборыПараметров; // Массив из Массив из ПараметрБенчмарка -Перем _ИменаПараметров; // Массив из Строка + +&Сериализуемое("ParameterSets") +&Тип("Массив") +&ДляКаждого +&Тип("ПараметрыМетодаБенчмарка") +Перем _НаборыПараметров; // Массив из ПараметрыМетодаБенчмарка + +&Сериализуемое("ParameterSources") +&Тип("Массив") Перем _ИсточникиПараметров; // Массив из Строка, Делегат +&Несериализуемое +Перем _ИменаПараметров; // Массив из Строка + #Область Конструктор // Дескриптор бенчмарка // // Параметры: -// Объект - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// Объект - Произвольный - Тип или экземпляр класса бенчмарков // Метод - Строка - Метод бенчмарка -Процедура ПриСозданииОбъекта(Объект, Метод) +Процедура ПриСозданииОбъекта(Объект = Неопределено, Метод = "") _Тип = ?(ТипЗнч(Объект) = Тип("Тип"), Объект, ТипЗнч(Объект)); _Метод = Метод; @@ -24,7 +50,9 @@ _Категория = ""; _ИсточникиПараметров = Новый Массив(); - ИзвлечьИменаПараметров(Объект); + Если Не Объект = Неопределено Тогда + ИзвлечьИменаПараметров(Объект); + КонецЕсли; КонецПроцедуры @@ -51,7 +79,7 @@ // Наборы параметров, используемые для запуска бенчмарков с различными входными данными. // // Возвращаемое значение: -// Массив из Массив из ПараметрБенчмарка +// Массив из ПараметрыМетодаБенчмарка Функция НаборыПараметров() Экспорт Возврат Новый Массив(Новый ФиксированныйМассив(_НаборыПараметров)); КонецФункции @@ -67,7 +95,7 @@ // ЭтотОбъект Функция ДобавитьПараметры(Параметры) Экспорт - МассивПараметров = Новый Массив(); + ПараметрыМетода = Новый ПараметрыМетодаБенчмарка(); КоличествоТребуемыхПараметров = _ИменаПараметров.Количество(); Если КоличествоТребуемыхПараметров = 0 Тогда @@ -90,7 +118,7 @@ Для ИндексПараметра = 0 По Параметры.ВГраница() Цикл Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); - МассивПараметров.Добавить(Параметр); + ПараметрыМетода.Добавить(Параметр); КонецЦикла; Иначе @@ -104,11 +132,11 @@ КонецЕсли; Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[0], Параметры, Истина); - МассивПараметров.Добавить(Параметр); + ПараметрыМетода.Добавить(Параметр); КонецЕсли; - _НаборыПараметров.Добавить(МассивПараметров); + _НаборыПараметров.Добавить(ПараметрыМетода); Возврат ЭтотОбъект; @@ -243,6 +271,29 @@ #Область СлужебныеПроцедурыИФункции +#Область Сериализация + +&ПослеДесериализации +Процедура ПослеДесериализации() Экспорт + + Валидировать(); + ИзвлечьИменаПараметров(Новый(_Тип)); + +КонецПроцедуры + +Процедура Валидировать() + + Валидатор = Новый Валидатор; + + Результат = Валидатор.Валидировать(ЭтотОбъект); + Если Результат.Количество() > 0 Тогда + ВызватьИсключение Валидатор.ОписаниеОшибокВалидации(Результат); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + Процедура ИзвлечьИменаПараметров(Объект) РефлекторОбъекта = Новый РефлекторОбъекта(Объект); diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\225\320\264\320\270\320\275\320\270\321\206\320\260\320\230\320\267\320\274\320\265\321\200\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\260.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\225\320\264\320\270\320\275\320\270\321\206\320\260\320\230\320\267\320\274\320\265\321\200\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\260.os" index 6d580c1..41b6336 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\225\320\264\320\270\320\275\320\270\321\206\320\260\320\230\320\267\320\274\320\265\321\200\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\260.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\225\320\264\320\270\320\275\320\270\321\206\320\260\320\230\320\267\320\274\320\265\321\200\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\260.os" @@ -10,7 +10,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 c770a46..2dc99c1 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" @@ -48,30 +48,7 @@ // Запускает бенчмарки // // Возвращаемое значение: -// Структура: -// * ИмяКласса - Строка - Имя класса -// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков -// * Конфигурация - КонфигурацияБенчмарков -// * Отчет - ОтчетБенчмарков -// * СредаОкружения - СредаОкруженияБенчмарков -// * Расшифровка - ТаблицаЗначений: -// ** ДескрипторБенчмарка - ДескрипторБенчмарка -// ** Параметры - Массив из ПараметрБенчмарка -// ** Эталон - СтрокаТаблицыЗначений, Неопределено -// ** ЭтоЭталон - Булево -// ** Статистика - СтатистикаБенчмарка -// ** ИсполняющаяСреда - Структура: -// *** Версия - Строка -// *** Алиас - Строка -// *** Наименование - Строка -// ** Замеры - ТаблицаЗначений: -// *** Этап - см. ЭтапыБенчмарка -// *** НомерИтерации - Число -// *** КоличествоОпераций - Число -// *** Наносекунд - Число - Наносекунд за итерацию -// *** НаносекундЗаОперацию - Число - Наносекунд за операцию -// *** ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию -// *** ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию +// РезультатыБенчмарков Функция Запустить() Экспорт ЭтоВоркер = Бенчмаркинг.ЭтоВоркер(); @@ -83,13 +60,16 @@ КонецЕсли; Если ЗапускатьВТекущейСреде Тогда - Результат = ЗапуститьВсеБенчмарки(); + Результат = ЗапуститьБенчмаркиВТекущейСреде(); Иначе - Результат = ЗапуститьБенчмаркиВКаждойВерсии(); + Результат = ЗапуститьБенчмаркиВоВсехСредах(); КонецЕсли; Если Не ЭтоВоркер Тогда ВывестиРезультатыБенчмарков(Результат); + Иначе + Результат.Конфигурация = Новый КонфигурацияБенчмарков(); + Результат.ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); КонецЕсли; ЭкспортироватьРезультаты(Результат); @@ -106,7 +86,7 @@ #Область ЗапускВДругихСредах -Функция ЗапуститьБенчмаркиВКаждойВерсии() +Функция ЗапуститьБенчмаркиВоВсехСредах() ПередаваемаяКонфигурация = _Конфигурация .Скопировать() @@ -114,24 +94,31 @@ .УдалитьЭкспортеры() .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json); - МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); - Результат = НовыйРезультат(МенеджерРасшифровкиРезультатов); - Результат.СредаОкружения.ВерсияИсполняющейСреды = ""; + РезультатыБенчмарков = НовыеРезультатыБенчмарков(); + РезультатыБенчмарков.СредаОкружения.ВерсияИсполняющейСреды = ""; Для Каждого ИсполняющаяСреда Из _Конфигурация.ВерсииИсполняющейСреды() Цикл - ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, ПередаваемаяКонфигурация, Результат.Расшифровка); + + ЗапускиБенчмарков = ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, ПередаваемаяКонфигурация); + + Для Каждого РезультатЗапускаБенчмарка Из ЗапускиБенчмарков Цикл + РезультатыБенчмарков.Запуски.Добавить(РезультатЗапускаБенчмарка); + КонецЦикла; + КонецЦикла; - МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(_Конфигурация); + РезультатыБенчмарков.ОпределитьЭталоны(); - Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, Результат.Расшифровка); - Результат.Отчет = Построитель.Сформировать(); + Построитель = Новый ПостроительОтчетаБенчмарков( + _ДескрипторыБенчмарков, _Конфигурация, РезультатыБенчмарков.Запуски); - Возврат Результат; + РезультатыБенчмарков.Отчет = Построитель.Сформировать(); + + Возврат РезультатыБенчмарков; КонецФункции -Процедура ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, Конфигурация, РасшифровкаРезультатов) +Функция ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, Конфигурация) ТаймаутМинут = 10; МиллисекундВМинуте = 60000; @@ -161,20 +148,24 @@ ВызватьИсключение СтрШаблон("Завершение процесса с ошибкой в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); КонецЕсли; - ПрочитатьРасшифровкуЗамеровИзJSON(РасшифровкаРезультатов, КаталогАртефактов, ИсполняющаяСреда); + ЗапускиБенчмарков = ПрочитатьЗапускиБенчмарковИзJSON(КаталогАртефактов, ИсполняющаяСреда); + + УдалитьФайлы(КаталогАртефактов); _Лог.Отладка("Завершение процесса в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия); -КонецПроцедуры + Возврат ЗапускиБенчмарков; + +КонецФункции Функция ПодготовитьПроцесс(Конфигурация, Версия) Тип = _ДескрипторыБенчмарков.ПолучитьПервый().ТипОбъекта(); ИмяФайлаИсполняющейСреды = ИмяФайлаИсполняющейСреды(Версия); ИмяФайлаТочкиВхода = ТочкаВходаКонсольногоПриложения(); - ИмяФайлаКонфигурации = ПолучитьИмяФайлаКонфигурацииДляПроцесса(Конфигурация); + ИмяФайлаКонфигурации = ЗаписатьНастройкиВФайл(_ДескрипторыБенчмарков, Конфигурация); ИмяФайлаТипа = Новый РасширениеТипа(Тип).Источник; - КаталогБиблиотек = ИсполняющаяСредаБенчмарков.КаталогБиблиотек(); + КаталогБиблиотек = ИнформацияСредыБенчмарков.КаталогБиблиотек(); ПеременныеСреды = ПеременныеСреды(); ПеременныеСреды.Вставить("OSCRIPT_CONFIG", СтрШаблон("lib.system=%1; systemlanguage=ru", КаталогБиблиотек)); @@ -193,8 +184,8 @@ // --worker СтрокаКоманды.Добавить("--worker"); - // --config - СтрокаКоманды.Добавить("--config"); + // --settings + СтрокаКоманды.Добавить("--settings"); СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаКонфигурации)); // FILE @@ -238,12 +229,12 @@ КонецФункции -Функция ПолучитьИмяФайлаКонфигурацииДляПроцесса(Конфигурация) +Функция ЗаписатьНастройкиВФайл(ДескрипторыБенчмарков, Конфигурация) ПутьКФайлу = _МенеджерВременныхФайлов.СоздатьФайл("json"); - Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); - Сериализатор.СериализоватьВJSON(Конфигурация, ПутьКФайлу); + Сериализатор = Новый СериализаторНастроекБенчмарков(); + Сериализатор.ЗаписатьВJson(ДескрипторыБенчмарков, Конфигурация, ПутьКФайлу); Возврат ПутьКФайлу; @@ -259,7 +250,7 @@ Возврат Версия; КонецЕсли; - КаталогУстановки = ИсполняющаяСредаБенчмарков.КаталогУстановки(); + КаталогУстановки = ИнформацияСредыБенчмарков.КаталогУстановки(); Если КаталогУстановки = Неопределено Тогда ВызватьИсключение "Не найден каталог с установленными версиями OneScript. |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно."; @@ -267,7 +258,7 @@ _Лог.Отладка(СтрШаблон("Каталог с установленными версиями OneScript: %1", КаталогУстановки)); - ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + ИмяФайла = ИнформацияСредыБенчмарков.НайтиИсполняемыйФайл(Версия); Если ИмяФайла = Неопределено Тогда ВызватьИсключение СтрШаблон("Не найден OneScript версии %1 в каталоге OVM (OneScript Version Manager)", Версия); @@ -277,28 +268,38 @@ КонецФункции -Процедура ПрочитатьРасшифровкуЗамеровИзJSON(РасшифровкаРезультатов, Каталог, ИсполняющаяСреда) +Функция ПрочитатьЗапускиБенчмарковИзJSON(Каталог, ИсполняющаяСреда) + ЗапускиБенчмарков = Новый Массив(); Сериализатор = Новый СериализаторРезультатовБенчмарков(); Файлы = НайтиФайлы(Каталог, "*-report.json"); Для Каждого Файл Из Файлы Цикл - Данные = Сериализатор.ДесериализоватьИзJSON(Файл.ПолноеИмя, _Конфигурация); - Для Каждого СтрокаРезультата Из Данные.Расшифровка Цикл - НоваяСтрокаТаблицы = РасшифровкаРезультатов.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрокаТаблицы, СтрокаРезультата); - НоваяСтрокаТаблицы.ИсполняющаяСреда.Алиас = ИсполняющаяСреда.Версия; // Заменяем current - НоваяСтрокаТаблицы.ИсполняющаяСреда.Наименование = ИсполняющаяСреда.Наименование; + + Данные = Сериализатор.ПрочитатьИзJson(Файл.ПолноеИмя); + + Для Каждого РезультатЗапускаБенчмарка Из Данные.Запуски Цикл + + НовыйРезультатЗапускаБенчмарка = Новый РезультатЗапускаБенчмаркаДто(); + ЗаполнитьЗначенияСвойств(НовыйРезультатЗапускаБенчмарка, РезультатЗапускаБенчмарка); + НовыйРезультатЗапускаБенчмарка.ИсполняющаяСреда.Алиас = ИсполняющаяСреда.Версия; // Заменяем current + НовыйРезультатЗапускаБенчмарка.ИсполняющаяСреда.Наименование = ИсполняющаяСреда.Наименование; + + ЗапускиБенчмарков.Добавить(НовыйРезультатЗапускаБенчмарка); + КонецЦикла; + КонецЦикла; -КонецПроцедуры + Возврат ЗапускиБенчмарков; + +КонецФункции #КонецОбласти #Область ЗапускВТекущейСреде -Функция ЗапуститьВсеБенчмарки() +Функция ЗапуститьБенчмаркиВТекущейСреде() ПрогретьИнструментыЗамера(); @@ -308,8 +309,7 @@ КонецЕсли; // Инициализация результатов - МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); - Результат = НовыйРезультат(МенеджерРасшифровкиРезультатов); + РезультатыБенчмарков = НовыеРезультатыБенчмарков(); // Событие ПередВсеми КонтекстСобытия = Новый Структура(); @@ -337,26 +337,36 @@ КонецЕсли; Для Каждого Параметры Из КомбинацииПараметров Цикл - ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры, МенеджерРасшифровкиРезультатов); + РезультатЗапускаБенчмарка = ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры); + РезультатыБенчмарков.Запуски.Добавить(РезультатЗапускаБенчмарка); КонецЦикла; КонецЦикла; // Подготовка результатов - МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(_Конфигурация); - МенеджерРасшифровкиРезультатов.ОбновитьСтатистику(); + РезультатыБенчмарков.ОпределитьЭталоны(); + РезультатыБенчмарков.ОбновитьСтатистику(); - Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, Результат.Расшифровка); - Результат.Отчет = Построитель.Сформировать(); + Построитель = Новый ПостроительОтчетаБенчмарков( + _ДескрипторыБенчмарков, _Конфигурация, РезультатыБенчмарков.Запуски); + + РезультатыБенчмарков.Отчет = Построитель.Сформировать(); // Событие ПослеВсех - ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, Результат); + КонтекстСобытия = Новый Структура(); + КонтекстСобытия.Вставить("Конфигурация", РезультатыБенчмарков.Конфигурация); + КонтекстСобытия.Вставить("ДескрипторыБенчмарков", РезультатыБенчмарков.ДескрипторыБенчмарков); + КонтекстСобытия.Вставить("Запуски", РезультатыБенчмарков.Запуски); + КонтекстСобытия.Вставить("Отчет", РезультатыБенчмарков.Отчет); + КонтекстСобытия.Вставить("СредаОкружения", РезультатыБенчмарков.СредаОкружения); - Возврат Результат; + ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, КонтекстСобытия); + + Возврат РезультатыБенчмарков; КонецФункции -Процедура ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры, МенеджерРасшифровкиРезультатов) +Функция ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры) ВывестиЗаголовокБенчмарка(ДескрипторБенчмарка); ВывестиПараметры(Параметры); @@ -365,14 +375,14 @@ УстановитьПараметрыОбъекта(Параметры); // Инициализация результата - Результат = МенеджерРасшифровкиРезультатов.Добавить(); - Результат.ДескрипторБенчмарка = ДескрипторБенчмарка; - Результат.Параметры = Параметры; - Результат.Статистика = Новый СтатистикаБенчмарка(); + РезультатЗапускаБенчмарка = Новый РезультатЗапускаБенчмаркаДто(); + РезультатЗапускаБенчмарка.ДескрипторБенчмарка = ДескрипторБенчмарка; + РезультатЗапускаБенчмарка.Параметры = Параметры; + РезультатЗапускаБенчмарка.Статистика = Новый СтатистикаБенчмарка(); Если Бенчмаркинг.ЭтоВоркер() Тогда - Результат.ИсполняющаяСреда.Версия = Новый СистемнаяИнформация().Версия; - Результат.ИсполняющаяСреда.Алиас = "current"; + РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия = Новый СистемнаяИнформация().Версия; + РезультатЗапускаБенчмарка.ИсполняющаяСреда.Алиас = "current"; КонецЕсли; // Событие ПередКаждым @@ -392,26 +402,28 @@ ЗапуститьЭтапПрогрева(Делегат, КоличествоВызововЗаИтерацию); КонецЕсли; - ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, Результат.Замеры); + ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, РезультатЗапускаБенчмарка.Замеры); Если _Конфигурация.ТребуетсяМониторингПамяти() Тогда - ЗапуститьМониторингПамяти(Делегат, КоличествоВызововЗаИтерацию, Результат.Замеры); + ЗапуститьМониторингПамяти(Делегат, КоличествоВызововЗаИтерацию, РезультатЗапускаБенчмарка.Замеры); КонецЕсли; // Сбор статистики - Результат.Статистика.Прочитать(Результат.Замеры); - ВывестиСтатистику(Результат.Статистика); + РезультатЗапускаБенчмарка.Статистика.Прочитать(РезультатЗапускаБенчмарка.Замеры); + ВывестиСтатистику(РезультатЗапускаБенчмарка.Статистика); // Событие ПослеКаждого КонтекстСобытия = Новый Структура(); КонтекстСобытия.Вставить("ДескрипторБенчмарка", ДескрипторБенчмарка); КонтекстСобытия.Вставить("Параметры", Параметры); - КонтекстСобытия.Вставить("Замеры", Результат.Замеры); - КонтекстСобытия.Вставить("Статистика", Результат.Статистика); + КонтекстСобытия.Вставить("Замеры", РезультатЗапускаБенчмарка.Замеры); + КонтекстСобытия.Вставить("Статистика", РезультатЗапускаБенчмарка.Статистика); ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, КонтекстСобытия); + + Возврат РезультатЗапускаБенчмарка; -КонецПроцедуры +КонецФункции Функция РассчитатьКоличествоВызововЗаИтерацию(Делегат) @@ -484,7 +496,7 @@ Для НомерИтерации = 1 По _Конфигурация.КоличествоИтераций() Цикл РезультатИтерации = ВыполнитьИтерацию(Делегат, ЭтапыБенчмарка.Измерение, НомерИтерации, КоличествоВызововЗаИтерацию); - ЗаполнитьЗначенияСвойств(Замеры.Добавить(), РезультатИтерации); + Замеры.Добавить(РезультатИтерации); КонецЦикла; @@ -495,7 +507,7 @@ Для НомерИтерации = 1 По _Конфигурация.КоличествоИтераций() Цикл РезультатИтерации = ВыполнитьИтерацию(Делегат, ЭтапыБенчмарка.Память, НомерИтерации, КоличествоВызововЗаИтерацию); - ЗаполнитьЗначенияСвойств(Замеры.Добавить(), РезультатИтерации); + Замеры.Добавить(РезультатИтерации); КонецЦикла; @@ -531,7 +543,7 @@ Наносекунд = ЗамеритьВремя(Делегат, КоличествоВызовов); КонецЕсли; - РезультатИтерации = НовыйРезультатИтерации(); + РезультатИтерации = Новый РезультатИтерацииБенчмаркаДто(); РезультатИтерации.Этап = Этап; РезультатИтерации.НомерИтерации = НомерИтерации; РезультатИтерации.КоличествоОпераций = КоличествоВызовов; @@ -692,10 +704,10 @@ КонецЕсли; Если КоличествоПараметровМетода = 1 Тогда - Параметр = Новый ПараметрБенчмарка(ИменаПараметров[0], Параметры, Истина); - Результат = Новый Массив(); - Результат.Добавить(Параметр); - Возврат Результат; + ПараметрБенчмарка = Новый ПараметрБенчмарка(ИменаПараметров[0], Параметры, Истина); + ПараметрыМетодаБенчмарка = Новый ПараметрыМетодаБенчмарка(); + ПараметрыМетодаБенчмарка.Добавить(ПараметрБенчмарка); + Возврат ПараметрыМетодаБенчмарка; КонецЕсли; ТипКоллекции = ТипЗнч(Параметры); @@ -718,7 +730,7 @@ Функция ПреобразоватьМассивВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) - Результат = Новый Массив(); + ПараметрыМетодаБенчмарка = Новый ПараметрыМетодаБенчмарка(); ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров(); КоличествоТребуемыхПараметров = ИменаПараметров.Количество(); @@ -732,17 +744,17 @@ КонецЕсли; Для ИндексПараметра = 0 По Параметры.ВГраница() Цикл - Параметр = Новый ПараметрБенчмарка(ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); - Результат.Добавить(Параметр); + ПараметрБенчмарка = Новый ПараметрБенчмарка(ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); + ПараметрыМетодаБенчмарка.Добавить(ПараметрБенчмарка); КонецЦикла; - Возврат Результат; + Возврат ПараметрыМетодаБенчмарка; КонецФункции Функция ПреобразоватьСтруктуруВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) - Результат = Новый Массив(); + ПараметрыМетодаБенчмарка = Новый ПараметрыМетодаБенчмарка(); ТипКоллекции = ТипЗнч(Параметры); Для Каждого ИмяПараметра Из ДескрипторБенчмарка.ИменаПараметров() Цикл @@ -762,18 +774,18 @@ ); КонецЕсли; - Параметр = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); - Результат.Добавить(Параметр); + ПараметрБенчмарка = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); + ПараметрыМетодаБенчмарка.Добавить(ПараметрБенчмарка); КонецЦикла; - Возврат Результат; + Возврат ПараметрыМетодаБенчмарка; КонецФункции Функция ПреобразоватьСтрокуТаблицыЗначенийВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) - Результат = Новый Массив(); + ПараметрыМетодаБенчмарка = Новый ПараметрыМетодаБенчмарка(); Колонки = Параметры.Владелец().Колонки; Для Каждого ИмяПараметра Из ДескрипторБенчмарка.ИменаПараметров() Цикл @@ -786,12 +798,12 @@ ); КонецЕсли; - Параметр = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); - Результат.Добавить(Параметр); + ПараметрБенчмарка = Новый ПараметрБенчмарка(ИмяПараметра, Параметры[ИмяПараметра], Истина); + ПараметрыМетодаБенчмарка.Добавить(ПараметрБенчмарка); КонецЦикла; - Возврат Результат; + Возврат ПараметрыМетодаБенчмарка; КонецФункции @@ -875,7 +887,8 @@ Процедура ЭкспортироватьРезультаты(Результаты) КаталогАртефактов = _Конфигурация.КаталогАртефактов(); - МаскаФайлов = СтрШаблон("%1-*", Результаты.ИмяКласса); + ИмяФайла = СтрШаблон("%1-report", Строка(ТипЗнч(_ОбъектБенчмарков))); + МаскаФайлов = СтрШаблон("%1.*", ИмяФайла); Экспортеры = _Конфигурация.Экспортеры(); Если Не ЗначениеЗаполнено(КаталогАртефактов) Или Экспортеры.Количество() = 0 Тогда @@ -886,10 +899,16 @@ ФС.УдалитьФайлы(КаталогАртефактов, МаскаФайлов); Для Каждого Экспортер Из _Конфигурация.Экспортеры() Цикл - Экспортер.Записать(Результаты); + + ИмяФайлаСРасширением = СтрШаблон("%1.%2", ИмяФайла, Экспортер.Расширение()); + ПолноеИмяФайла = ОбъединитьПути(КаталогАртефактов, ИмяФайлаСРасширением); + + Экспортер.Записать(Результаты, ПолноеИмяФайла); + КонецЦикла; Если Не Бенчмаркинг.ЭтоВоркер() Тогда + Артефакты = НайтиФайлы(КаталогАртефактов, МаскаФайлов); Если Артефакты.Количество() Тогда ВывестиСтроку(" "); @@ -899,6 +918,7 @@ Для Каждого Артефакт Из Артефакты Цикл ВывестиСтроку(Артефакт.ПолноеИмя, "ТемноЖелтый"); КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -996,36 +1016,17 @@ КонецПроцедуры Функция ОбернутьВКавычки(Строка) - Кавычка = ?(ИсполняющаяСредаБенчмарков.ЭтоWindows(), """", "'"); + Кавычка = ?(ИнформацияСредыБенчмарков.ЭтоWindows(), """", "'"); Возврат СтрШаблон("%2%1%2", Строка, Кавычка); КонецФункции -Функция НовыйРезультатИтерации() - - Результат = Новый Структура(); - Результат.Вставить("Этап", ""); - Результат.Вставить("НомерИтерации", 0); - Результат.Вставить("КоличествоОпераций", 0); - Результат.Вставить("Наносекунд", 0); - Результат.Вставить("НаносекундЗаОперацию",0); - Результат.Вставить("ВыделяемаяПамять", 0); - Результат.Вставить("ВыделяемаяПамятьЗаОперацию", 0); +Функция НовыеРезультатыБенчмарков() Экспорт - Возврат Результат; - -КонецФункции - -Функция НовыйРезультат(МенеджерРасшифровкиРезультатов) Экспорт - - Результат = Новый Структура(); - Результат.Вставить("ИмяКласса", Строка(ТипЗнч(_ОбъектБенчмарков))); - Результат.Вставить("ДескрипторыБенчмарков", _ДескрипторыБенчмарков); - Результат.Вставить("Конфигурация", _Конфигурация); - Результат.Вставить("Расшифровка", МенеджерРасшифровкиРезультатов.ВТаблицу()); - Результат.Вставить("Отчет", Неопределено); - Результат.Вставить("СредаОкружения", Новый СредаОкруженияБенчмарков()); + Результаты = Новый РезультатыБенчмарков(); + Результаты.ДескрипторыБенчмарков = _ДескрипторыБенчмарков; + Результаты.Конфигурация = _Конфигурация; - Возврат Результат; + Возврат Результаты; КонецФункции 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 4eb6454..e16024e 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" @@ -26,7 +26,6 @@ // Возвращаемое значение: // ТаблицаЗначений: // * Результат - см. Бенчмаркинг.Запустить, Неопределено -// * ИмяКласса - Строка - Имя класса // * ИмяФайла - Строка - Имя файла // * ПолноеИмяФайла - Строка - Путь к файлу сценария // * Успешно - Булево - Индикатор корректного выполнения @@ -50,7 +49,6 @@ КонецЕсли; СтрокаРезультата = Результат.Добавить(); - СтрокаРезультата.ИмяКласса = Строка(Тип); СтрокаРезультата.ПолноеИмяФайла = Файл.ПолноеИмя; СтрокаРезультата.ИмяФайла = Файл.ИмяБезРасширения; СтрокаРезультата.Результат = Неопределено; @@ -65,8 +63,8 @@ СтрокаРезультата.Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); Исключение СтрокаРезультата.Успешно = Ложь; - _Лог.Ошибка("Возникла ошибка при запуске бенчмарков класса <%1>: %2", - СтрокаРезультата.ИмяКласса, + _Лог.Ошибка("Возникла ошибка при запуске бенчмарков <%1>: %2", + СтрокаРезультата.ИмяФайла, ОписаниеОшибки()); КонецПопытки; @@ -85,7 +83,6 @@ ТипСтрока = Новый ОписаниеТипов("Строка"); Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("ИмяКласса", ТипСтрока); Таблица.Колонки.Добавить("ПолноеИмяФайла", ТипСтрока); Таблица.Колонки.Добавить("ИмяФайла", ТипСтрока); Таблица.Колонки.Добавить("Результат"); diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 442efb4..5c370c3 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,17 +1,19 @@ #Использовать fluent +&Несериализуемое Перем _ДескрипторыБенчмарков; // Массив из ДескрипторБенчмарка // Коллекция дескрипторов бенчмарков // // Параметры: -// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков, +// откуда будут прочитаны дескрипторы Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено) Экспорт _ДескрипторыБенчмарков = Новый Массив(); Если Не ИсточникБенчмарков = Неопределено Тогда - ИзвлекательДескрипторовБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект); + Прочитать(ИсточникБенчмарков); КонецЕсли; КонецПроцедуры @@ -47,13 +49,18 @@ Возврат _ДескрипторыБенчмарков.Количество(); КонецФункции +// Очищает коллекцию +Процедура Очистить() Экспорт + _ДескрипторыБенчмарков.Очистить(); +КонецПроцедуры + // Дескриптор бенчмарка по имени метода // // Параметры: // Имя - Строка - Имя метода бенчмарка // // Возвращаемое значение: -// ДескрипторБенчмарка +// ДескрипторБенчмарка, Неопределено Функция НайтиПоИмени(Имя) Экспорт Возврат ПроцессорыКоллекций @@ -63,6 +70,25 @@ КонецФункции +// Дескриптор бенчмарка по имени метода +// +// Параметры: +// Тип - Тип - Класс бенчмарков +// Имя - Строка - Имя метода бенчмарка +// +// Возвращаемое значение: +// ДескрипторБенчмарка, Неопределено +Функция НайтиПоТипуИИмени(Тип, Имя) Экспорт + + Контекст = Новый Структура("Тип, Имя", Тип, Имя); + + Возврат ПроцессорыКоллекций + .ИзКоллекции(_ДескрипторыБенчмарков) + .Фильтровать("Элемент -> Элемент.Метод() = Имя И Элемент.ТипОбъекта() = Тип", Контекст) + .ПолучитьПервый(); + +КонецФункции + // Первый в наборе дескриптор бенчмарка // // Возвращаемое значение: @@ -80,7 +106,12 @@ // Возвращаемое значение: // КоллекцияДескрипторовБенчмарков Функция ПолучитьЭталонные() Экспорт - Возврат Скопировать().Фильтровать("Бенчмарк -> Бенчмарк.ЭтоЭталон() = Истина"); + + Коллекция = Скопировать(); + Коллекция.Фильтровать("Бенчмарк -> Бенчмарк.ЭтоЭталон() = Истина"); + + Возврат Коллекция; + КонецФункции // Создает копию коллекции дескрипторов бенчмарков @@ -103,20 +134,26 @@ // // Параметры: // ФункцияФильтрации - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент, -// и которая возвращает Булево, Истина если элемент проходит фильтр, Ложь в противном случае -// -// Возвращаемое значение: -// ЭтотОбъект -Функция Фильтровать(ФункцияФильтрации) Экспорт +// и которая возвращает Булево, Истина если элемент проходит фильтр, +// Ложь в противном случае +// ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение +Процедура Фильтровать(ФункцияФильтрации, ДополнительныеПараметры = Неопределено) Экспорт _ДескрипторыБенчмарков = ПроцессорыКоллекций .ИзКоллекции(_ДескрипторыБенчмарков) - .Фильтровать(ФункцияФильтрации) + .Фильтровать(ФункцияФильтрации, ДополнительныеПараметры) .ВМассив(); - Возврат ЭтотОбъект; +КонецПроцедуры -КонецФункции +// Читает дескрипторы бенчмарков из класса +// +// Параметры: +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков +Процедура Прочитать(ИсточникБенчмарков) Экспорт + Очистить(); + ИзвлекательДескрипторовБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект); +КонецПроцедуры // Массив дескрипторов бенчмарков // @@ -124,4 +161,29 @@ // Массив из ДескрипторБенчмарка Функция ВМассив() Экспорт Возврат Новый Массив(Новый ФиксированныйМассив(_ДескрипторыБенчмарков)); -КонецФункции \ 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\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 0646644..9d8df64 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -38,15 +38,15 @@ // Значение по результатам замеров // // Параметры: -// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// РезультатЗапускаБенчмарка - РезультатЗапускаБенчмаркаДто // Колонка - КолонкаОтчетаБенчмарков // // Возвращаемое значение: // Произвольный -Функция Значение(СтрокаРезультата, Колонка) Экспорт +Функция Значение(РезультатЗапускаБенчмарка, Колонка) Экспорт МассивПараметров = Новый Массив(); - МассивПараметров.Добавить(СтрокаРезультата); + МассивПараметров.Добавить(РезультатЗапускаБенчмарка); МассивПараметров.Добавить(Колонка); Возврат ЗначениеДелегат.Исполнить(МассивПараметров); 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 bae77c0..d0c9e3c 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,71 +1,140 @@ #Использовать asserts #Использовать delegate +#Использовать validate +#Использовать reflector +#Использовать fluent +&Сериализуемое("Strategy") +&Тип("Строка") +&Геттер("Стратегия") Перем _Стратегия; // см. СтратегииЗапускаБенчмарка -Перем _СтратегияПоУмолчанию; // см. СтратегииЗапускаБенчмарка + +&Сериализуемое("IterationCount") +&Тип("Число") +&Геттер("КоличествоИтераций") Перем _КоличествоИтераций; // Число -Перем _КоличествоИтерацийПоУмолчанию; // Число + +&Сериализуемое("InvocationCount") +&Тип("Число") +&Геттер("КоличествоВызововЗаИтерацию") Перем _КоличествоВызововЗаИтерацию; // Число -Перем _КоличествоВызововЗаИтерациюПоУмолчанию; // Число + +&Сериализуемое("WarmupCount") +&Тип("Число") +&Геттер("КоличествоПрогревочныхИтераций") Перем _КоличествоПрогревочныхИтераций; // Число -Перем _КоличествоПрогревочныхИтерацийПоУмолчанию; // Число + +&Сериализуемое("MinIterationTime") +&Тип("Число") +&Геттер("МинимальноеВремяИтерации") Перем _МинимальноеВремяИтерации; // Число - мс -Перем _МинимальноеВремяИтерацииПоУмолчанию; // Число - мс + +&Сериализуемое("MinInvocationCount") +&Тип("Число") +&Геттер("МинимальноеКоличествоВызововЗаИтерацию") Перем _МинимальноеКоличествоВызововЗаИтерацию; // Число -Перем _МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию; // Число + +&Сериализуемое("ReportSorting") +&Тип("Строка") +&Геттер("СортировкаОтчета") Перем _СортировкаОтчета; // см. СортировкиОтчетаБенчмарков -Перем _СортировкаОтчетаПоУмолчанию; // см. СортировкиОтчетаБенчмарков + +&Сериализуемое("Memory") +&Тип("Булево") +&Геттер("ТребуетсяМониторингПамяти") Перем _ТребуетсяМониторингПамяти; // Булево -Перем _ТребуетсяМониторингПамятиПоУмолчанию; // Булево + +&Сериализуемое("ArtifactsDirectory") +&Тип("Строка") +&Геттер("КаталогАртефактов") Перем _КаталогАртефактов; // Строка -Перем _КаталогАртефактовПоУмолчанию; // Строка + +&Сериализуемое("Parameters") +&Тип("Массив") +&ДляКаждого +&Тип("ПараметрБенчмарка") +&Геттер("Параметры") Перем _Параметры; // Массив из ПараметрБенчмарка + +&Сериализуемое("ParameterSources") +&СериализуемыйКлюч("ИмяПоля", "FieldName") +&СериализуемыйКлюч("Источник", "Source") +&Тип("ТаблицаЗначений") +&Геттер("ИсточникиПараметров") Перем _ИсточникиПараметров; // ТаблицаЗначений -Перем _Обработчики; // Соответствие + +&Несериализуемое +&Геттер("ОбработчикиСобытий") +Перем _Обработчики; // ТаблицаЗначений + +&Сериализуемое("Columns") +&Тип("Массив") +&Геттер("Колонки") Перем _Колонки; // Массив из Строка - см. КолонкиОтчетаБенчмарков -Перем _Экспортеры; // Массив из см. ЭкспортерыРезультатовБенчмарков + +&Несериализуемое +&Геттер("Экспортеры") +Перем _Экспортеры; // Массив из Произвольный - см. ЭкспортерыРезультатовБенчмарков + +&Сериализуемое("RuntimeVersions") +&СериализуемыйКлюч("Версия", "Version") +&СериализуемыйКлюч("Наименование", "Name") +&СериализуемыйКлюч("ЭтоЭталон", "Baseline") +&Тип("ТаблицаЗначений") +&Геттер("ВерсииИсполняющейСреды") Перем _ВерсииИсполняющейСреды; // ТаблицаЗначений +&Несериализуемое +Перем _ЗначенияПолейПоУмолчанию; // Соответствие + +&Несериализуемое Перем _МодифицированныеПоля; // Соответствие -Перем _Рефлектор; // Рефлектор, Неопределено + +&Несериализуемое +Перем _ОписанияПолей; // ТаблицаЗначений, Неопределено + +&Несериализуемое +Перем _Рефлектор; // Рефлектор #Область Конструктор // Конфигурация бенчмарков // // Параметры: -// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено) - _СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность; - _КоличествоИтерацийПоУмолчанию = 15; - _КоличествоВызововЗаИтерациюПоУмолчанию = 0; - _КоличествоПрогревочныхИтерацийПоУмолчанию = 6; - _МинимальноеВремяИтерацииПоУмолчанию = 100; - _МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию = 4; - _СортировкаОтчетаПоУмолчанию = СортировкиОтчетаБенчмарков.ПоУмолчанию; - _КаталогАртефактовПоУмолчанию = ".\BenchmarkArtifacts"; - _ТребуетсяМониторингПамятиПоУмолчанию = Ложь; + СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность; + КоличествоИтерацийПоУмолчанию = 15; + КоличествоВызововЗаИтерациюПоУмолчанию = 0; + КоличествоПрогревочныхИтерацийПоУмолчанию = 6; + МинимальноеВремяИтерацииПоУмолчанию = 100; + МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию = 4; + СортировкаОтчетаПоУмолчанию = СортировкиОтчетаБенчмарков.ПоУмолчанию; + КаталогАртефактовПоУмолчанию = ".\BenchmarkArtifacts"; + ТребуетсяМониторингПамятиПоУмолчанию = Ложь; _Параметры = Новый Массив(); _ИсточникиПараметров = ПустаяТаблицаИсточникиПараметров(); - _Обработчики = Новый Соответствие(); + _Обработчики = ПустаяТаблицаОбработчикиСобытий(); _Колонки = Новый Массив(); _Экспортеры = Новый Массив(); - _МодифицированныеПоля = Новый Соответствие(); _ВерсииИсполняющейСреды = ПустаяТаблицаВерсииИсполняющейСреды(); - _ТребуетсяМониторингПамяти = _ТребуетсяМониторингПамятиПоУмолчанию; + _ТребуетсяМониторингПамяти = ТребуетсяМониторингПамятиПоУмолчанию; + _МодифицированныеПоля = Новый Соответствие(); + _Рефлектор = Новый Рефлектор(); - УстановитьСтратегию(_СтратегияПоУмолчанию); - УстановитьКоличествоИтераций(_КоличествоИтерацийПоУмолчанию); - УстановитьКоличествоВызововЗаИтерацию(_КоличествоВызововЗаИтерациюПоУмолчанию); - УстановитьКоличествоПрогревочныхИтераций(_КоличествоПрогревочныхИтерацийПоУмолчанию); - УстановитьМинимальноеВремяИтерации(_МинимальноеВремяИтерацииПоУмолчанию); - УстановитьМинимальноеКоличествоВызововЗаИтерацию(_МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию); - УстановитьСортировкуОтчета(_СортировкаОтчетаПоУмолчанию); - УстановитьКаталогАртефактов(_КаталогАртефактовПоУмолчанию); + УстановитьСтратегию(СтратегияПоУмолчанию); + УстановитьКоличествоИтераций(КоличествоИтерацийПоУмолчанию); + УстановитьКоличествоВызововЗаИтерацию(КоличествоВызововЗаИтерациюПоУмолчанию); + УстановитьКоличествоПрогревочныхИтераций(КоличествоПрогревочныхИтерацийПоУмолчанию); + УстановитьМинимальноеВремяИтерации(МинимальноеВремяИтерацииПоУмолчанию); + УстановитьМинимальноеКоличествоВызововЗаИтерацию(МинимальноеКоличествоВызововЗаИтерациюПоУмолчанию); + УстановитьСортировкуОтчета(СортировкаОтчетаПоУмолчанию); + УстановитьКаталогАртефактов(КаталогАртефактовПоУмолчанию); _МодифицированныеПоля.Очистить(); + ЗапомнитьЗначенияПолейПоУмолчанию(); Если Не ИсточникБенчмарков = Неопределено Тогда ИзвлекательКонфигурацииБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект); @@ -451,10 +520,11 @@ // // Параметры события: // * Контекст - Структура: -// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // ** Конфигурация - КонфигурацияБенчмарков -// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// ** Запуски - Массив из РезультатЗапускаБенчмаркаДто // ** Отчет - ОтчетБенчмарков +// ** СредаОкружения - СредаОкруженияБенчмарков // // ПередКаждым - Вызывается перед каждым запуском бенчмарка. // Позволяет подготовить контекст для отдельного теста - например, сбросить состояние объекта, @@ -473,7 +543,7 @@ // * Контекст - Структура: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка -// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// ** Замеры - Массив из РезультатИтерацииБенчмаркаДто // ** Статистика - СтатистикаБенчмарка // // Параметры: @@ -485,11 +555,15 @@ // ЭтотОбъект Функция ДобавитьОбработчикСобытия(ИмяСобытия, Обработчик) Экспорт - Если _Обработчики[ИмяСобытия] = Неопределено Тогда - _Обработчики[ИмяСобытия] = Новый Соответствие(); + Отбор = Новый Структура("Событие, Обработчик", ИмяСобытия, Обработчик); + Если _Обработчики.НайтиСтроки(Отбор).Количество() > 0 Тогда + Возврат ЭтотОбъект; КонецЕсли; - _Обработчики[ИмяСобытия][Обработчик] = Новый Структура("ЕстьПараметры"); + СтрокаТаблицы = _Обработчики.Добавить(); + СтрокаТаблицы.Событие = ИмяСобытия; + СтрокаТаблицы.Обработчик = Обработчик; + УстановитьМодифицированность(ИмяПоля_ОбработчикиСобытий()); Возврат ЭтотОбъект; @@ -505,9 +579,12 @@ // ЭтотОбъект Функция УдалитьОбработчикиСобытия(ИмяСобытия) Экспорт - Если Не _Обработчики[ИмяСобытия] = Неопределено Тогда - _Обработчики[ИмяСобытия].Очистить(); - КонецЕсли; + НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); + Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл + _Обработчики.Удалить(СтрокаТаблицы); + КонецЦикла; + + УстановитьМодифицированность(ИмяПоля_ОбработчикиСобытий()); Возврат ЭтотОбъект; @@ -534,26 +611,7 @@ // * Обработчик - Строка - Экспортный метод экземпляра класса бенчмарков // - Делегат - Делегат Функция ОбработчикиСобытий() Экспорт - - Результат = Новый ТаблицаЗначений(); - Результат.Колонки.Добавить("Событие"); - Результат.Колонки.Добавить("Обработчик"); - - Для Каждого ОбработчикиСобытия Из _Обработчики Цикл - - Событие = ОбработчикиСобытия.Ключ; - Обработчики = ОбработчикиСобытия.Значение; - - Для Каждого КлючЗначение Из Обработчики Цикл - СтрокаТаблицы = Результат.Добавить(); - СтрокаТаблицы.Событие = Событие; - СтрокаТаблицы.Обработчик = КлючЗначение.Ключ; - КонецЦикла; - - КонецЦикла; - - Возврат Результат; - + Возврат _Обработчики.Скопировать(); КонецФункции // Обработчики события @@ -568,13 +626,9 @@ Результат = Новый Массив(); - ОбработчикиСобытия = _Обработчики[ИмяСобытия]; - Если ОбработчикиСобытия = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Для Каждого Строка Из ОбработчикиСобытия Цикл - Результат.Добавить(Строка.Ключ); + НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); + Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл + Результат.Добавить(СтрокаТаблицы.Обработчик); КонецЦикла; Возврат Результат; @@ -594,23 +648,12 @@ МассивДелегатов = Новый Массив(); - ОбработчикиСобытия = _Обработчики[ИмяСобытия]; - Если ОбработчикиСобытия = Неопределено Тогда - Возврат МассивДелегатов; - КонецЕсли; - - Для Каждого Строка Из ОбработчикиСобытия Цикл + НайденныеСтроки = _Обработчики.НайтиСтроки(Новый Структура("Событие", ИмяСобытия)); + Для Каждого СтрокаТаблицы Из НайденныеСтроки Цикл - Обработчик = Строка.Ключ; - Описание = Строка.Значение; + Делегат = ДелегатОбработчика(СтрокаТаблицы.Обработчик, ОбъектБенчмарков); - Делегат = ДелегатОбработчика(Обработчик, ОбъектБенчмарков); - - Если Описание.ЕстьПараметры = Неопределено Тогда - Описание.ЕстьПараметры = ЕстьПараметрыМетода(Делегат); - КонецЕсли; - - Если Описание.ЕстьПараметры Тогда + Если ЕстьПараметрыМетода(Делегат) Тогда Делегат.УстановитьПараметры(Контекст); КонецЕсли; @@ -653,6 +696,7 @@ Инд = _Колонки.Найти(Колонка); Если Не Инд = Неопределено Тогда _Колонки.Удалить(Инд); + УстановитьМодифицированность(ИмяПоля_Колонки()); КонецЕсли; Возврат ЭтотОбъект; @@ -923,23 +967,13 @@ Таблица.Колонки.Добавить("Значение"); Таблица.Колонки.Добавить("Модифицирован", Новый ОписаниеТипов("Булево")); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Стратегия(), Стратегия()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КоличествоИтераций(), КоличествоИтераций()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КоличествоВызововЗаИтерацию(), КоличествоВызововЗаИтерацию()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КоличествоПрогревочныхИтераций(), КоличествоПрогревочныхИтераций()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_МинимальноеВремяИтерации(), МинимальноеВремяИтерации()); - ДобавитьСтрокуВТаблицу( - Таблица, ИмяПоля_МинимальноеКоличествоВызововЗаИтерацию(), МинимальноеКоличествоВызововЗаИтерацию()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_СортировкаОтчета(), СортировкаОтчета()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_КаталогАртефактов(), КаталогАртефактов()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ТребуетсяМониторингПамяти(), ТребуетсяМониторингПамяти()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Параметры(), Параметры()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ИсточникиПараметров(), ИсточникиПараметров()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ОбработчикиСобытий(), ОбработчикиСобытий()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Колонки(), Колонки()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Экспортеры(), Экспортеры()); - ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ВерсииИсполняющейСреды(), ВерсииИсполняющейСреды()); - + Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл + СтрокаТаблицы = Таблица.Добавить(); + СтрокаТаблицы.Имя = ОписаниеПоля.Имя; + СтрокаТаблицы.Значение = ОписаниеПоля.Геттер.Исполнить(); + СтрокаТаблицы.Модифицирован = _МодифицированныеПоля[ОписаниеПоля.Имя]; + КонецЦикла; + Возврат Таблица; КонецФункции @@ -1013,15 +1047,67 @@ КонецФункции -Функция ДобавитьСтрокуВТаблицу(Таблица, Имя, Значение) +Процедура ОпределитьМодифицированныеПоля() + + Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл + Значение = _Рефлектор.ПолучитьСвойство(ЭтотОбъект, ОписаниеПоля.ИмяВнутреннее); + ЗначениеПоУмолчанию = _ЗначенияПолейПоУмолчанию[ОписаниеПоля.Имя]; + + Если Не Компаратор.Совпадают(Значение, ЗначениеПоУмолчанию) Тогда + УстановитьМодифицированность(ОписаниеПоля.Имя); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ЗапомнитьЗначенияПолейПоУмолчанию() + + _ЗначенияПолейПоУмолчанию = Новый Соответствие(); + + Для Каждого ОписаниеПоля Из ОписанияПолей() Цикл + _ЗначенияПолейПоУмолчанию[ОписаниеПоля.Имя] = _Рефлектор.ПолучитьСвойство(ЭтотОбъект, ОписаниеПоля.ИмяВнутреннее); + КонецЦикла; - Строка = Таблица.Добавить(); - Строка.Имя = Имя; - Строка.Значение = Значение; - Строка.Модифицирован = _МодифицированныеПоля[Имя]; +КонецПроцедуры + +Функция ОписанияПолей() + + Если Не _ОписанияПолей = Неопределено Тогда + Возврат _ОписанияПолей; + КонецЕсли; - Возврат Строка; + _ОписанияПолей = Новый ТаблицаЗначений(); + _ОписанияПолей.Колонки.Добавить("Имя"); + _ОписанияПолей.Колонки.Добавить("ИмяВнутреннее"); + _ОписанияПолей.Колонки.Добавить("Геттер"); + + СвойстваОбъекта = _Рефлектор.ПолучитьТаблицуСвойств(ЭтотОбъект, Истина); + + Для Каждого Свойство Из СвойстваОбъекта Цикл + ИмяПоля = Сред(Свойство.Имя, 2); + + АннотацияГеттер = РаботаСАннотациями.ПолучитьАннотацию(Свойство, "Геттер"); + Если АннотацияГеттер = Неопределено Тогда + Продолжить; + КонецЕсли; + Геттер = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияГеттер, "Значение", Свойство.Имя); + + ОписаниеПоля = _ОписанияПолей.Добавить(); + ОписаниеПоля.Имя = ИмяПоля; + ОписаниеПоля.ИмяВнутреннее = Свойство.Имя; + ОписаниеПоля.Геттер = Новый Делегат(ЭтотОбъект, Геттер); + КонецЦикла; + + Возврат _ОписанияПолей; + +КонецФункции + +Функция ПустаяТаблицаОбработчикиСобытий() + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("Событие"); + Таблица.Колонки.Добавить("Обработчик"); + Возврат Таблица; КонецФункции Функция ПустаяТаблицаВерсииИсполняющейСреды() @@ -1039,18 +1125,109 @@ Возврат Таблица; КонецФункции -#Область Модифицированность +#Область Сериализация + +&ПередСериализацией +Процедура ПередСериализацией() Экспорт + + ПроверитьИсточникиПараметровПередСериализацией(); -Процедура УстановитьМодифицированность(ИмяПоля_) - _МодифицированныеПоля[ИмяПоля_] = Истина; КонецПроцедуры -Процедура ПрименитьМодифицированноеПоле(ИмяПоля, МетодУстановки, ЗначенияМодифицированныхПолей) +&ПослеДесериализации +Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт + + ДесериализоватьОбработчики(ПрочитанныеСвойства); + ДесериализоватьЭкспортеры(ПрочитанныеСвойства); + + ОпределитьМодифицированныеПоля(); + Валидировать(); + +КонецПроцедуры + +&Сериализуемое("Handlers") +Функция СериализацияПолучитьОбработчикиСобытий() Экспорт + + Таблица = ПроцессорыКоллекций.ИзКоллекции(_Обработчики) + .Фильтровать("Элемент -> ТипЗнч(Элемент.Обработчик) = Тип(""Строка"")") + .Получить(Тип("ТаблицаЗначений")); + + Таблица.Колонки.Событие.Имя = "Event"; + Таблица.Колонки.Обработчик.Имя = "Handler"; + + Возврат Таблица; + +КонецФункции + +&Сериализуемое("Exporters") +Функция СериализацияПолучитьИменаЭкспортеров() Экспорт + + Экспортеры = Новый Массив; + + Для Каждого Экспортер Из _Экспортеры Цикл + Экспортеры.Добавить(Строка(ТипЗнч(Экспортер))); + КонецЦикла; + + Возврат Экспортеры; + +КонецФункции + +Процедура ПроверитьИсточникиПараметровПередСериализацией() + + Для Каждого ИсточникПараметров Из _ИсточникиПараметров Цикл + Тип = ТипЗнч(ИсточникПараметров.Источник); + Если Тип <> Тип("Строка") Тогда + ВызватьИсключение СтрШаблон("Источник параметров типа <%1> не поддерживает сериализацию.", Тип); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ДесериализоватьОбработчики(ПрочитанныеСвойства) + + Если Не ПрочитанныеСвойства.Свойство("Handlers") Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка Из ПрочитанныеСвойства["Handlers"] Цикл + ДобавитьОбработчикСобытия(Строка["Event"], Строка["Handler"]); + КонецЦикла; + +КонецПроцедуры + +Процедура ДесериализоватьЭкспортеры(ПрочитанныеСвойства) + + Если Не ПрочитанныеСвойства.Свойство("Exporters") Тогда + Возврат; + КонецЕсли; + + Для Каждого СтрокаТип Из ПрочитанныеСвойства["Exporters"] Цикл + ДобавитьЭкспортер(Новый(СтрокаТип)); + КонецЦикла; + +КонецПроцедуры - Если _Рефлектор = Неопределено Тогда - _Рефлектор = Новый Рефлектор(); +Процедура Валидировать() + + Валидатор = Новый Валидатор; + + Результат = Валидатор.Валидировать(ЭтотОбъект); + Если Результат.Количество() > 0 Тогда + ВызватьИсключение Валидатор.ОписаниеОшибокВалидации(Результат); КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область Модифицированность + +Процедура УстановитьМодифицированность(ИмяПоля) + _МодифицированныеПоля[ИмяПоля] = Истина; +КонецПроцедуры + +Процедура ПрименитьМодифицированноеПоле(ИмяПоля, МетодУстановки, ЗначенияМодифицированныхПолей) + Если Не ЗначенияМодифицированныхПолей[ИмяПоля] = Неопределено Тогда Параметры = Новый Массив(); @@ -1195,7 +1372,7 @@ КонецФункции Функция ИмяПоля_ОбработчикиСобытий() - Возврат "ОбработчикиСобытий"; + Возврат "Обработчики"; КонецФункции Функция ИмяПоля_Колонки() diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" deleted file mode 100644 index 93a889d..0000000 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ /dev/null @@ -1,210 +0,0 @@ -Перем _Таблица; // см. НоваяТаблицаРасшифровки - -// Расшифровка результатов бенчмарков. -// -// Параметры: -// РасшифровкаРезультатов - см. НоваяТаблицаРасшифровки -// - Неопределено -Процедура ПриСозданииОбъекта(РасшифровкаРезультатов = Неопределено) - - _Таблица = РасшифровкаРезультатов; - - Если _Таблица = Неопределено Тогда - _Таблица = НоваяТаблицаРасшифровки(); - КонецЕсли; - -КонецПроцедуры - -#Область ПрограммныйИнтерфейс - -// Возвращает таблицу с расшифровкой замеров бенчмарков. -// -// Возвращаемое значение: -// см. НоваяТаблицаРасшифровки -Функция ВТаблицу() Экспорт - Возврат _Таблица; -КонецФункции - -// Создает новую строку в таблице расшифровки. -// -// Возвращаемое значение: -// СтрокаТаблицыЗначения -Функция Добавить() Экспорт - - СтрокаТаблицы = _Таблица.Добавить(); - СтрокаТаблицы.Параметры = Новый Массив(); - СтрокаТаблицы.Замеры = НоваяТаблицаЗамеров(); - СтрокаТаблицы.Статистика = Новый СтатистикаБенчмарка(); - СтрокаТаблицы.ИсполняющаяСреда = НоваяИсполняющаяСреда(); - - Возврат СтрокаТаблицы; - -КонецФункции - -// Связывает каждую строку замеров с эталонной строкой. -// -// Алгоритм поиска эталонов (в порядке приоритета): -// 1. При наличии эталонной версии исполняющей среды: -// - Ищет строку бенчмарка с идентичным именем и набором параметров в соответствующей эталонной среде -// 2. При отсутствии эталонной среды, но при наличии эталонного бенчмарка: -// - Ищет строку бенчмарка в пределах текущей категории бенчмарков, наборов параметров и исполняющей среды -// -// Параметры: -// Конфигурация - КонфигурацияБенчмарков -Процедура ОпределитьЭталоны(Конфигурация) Экспорт - - ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды(); - - Для Каждого СтрокаРасшифровкиЗамеров Из _Таблица Цикл - СтрокаРасшифровкиЗамеров.Эталон = НайтиЭталонДляСтроки(СтрокаРасшифровкиЗамеров, ЭталоннаяВерсия); - - Если Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда - СтрокаРасшифровкиЗамеров.ЭтоЭталон = СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.ЭтоЭталон(); - Иначе - СтрокаРасшифровкиЗамеров.ЭтоЭталон = - ЭталоннаяВерсия = СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия - Или ЭталоннаяВерсия = СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Алиас; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Пересчитывает статистические показатели для всех замеров в таблице -Процедура ОбновитьСтатистику() Экспорт - Для Каждого СтрокаРасшифровкиЗамеров Из _Таблица Цикл - СтрокаРасшифровкиЗамеров.Статистика.Прочитать(СтрокаРасшифровкиЗамеров.Замеры); - КонецЦикла; -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Функция НайтиЭталонДляСтроки(ВходнаяСтрока, ЭталоннаяВерсияИсполняющейСреды) - - Для Каждого СтрокаЭталон Из _Таблица Цикл - - ЭтоЭталон = СтрокаЭталон.ДескрипторБенчмарка.ЭтоЭталон(); - ЭтоРазныеСтроки = Не СтрокаЭталон = ВходнаяСтрока; - ИмяМетодаСовпадает = СтрокаЭталон.ДескрипторБенчмарка.Метод() = ВходнаяСтрока.ДескрипторБенчмарка.Метод(); - КатегорияСовпадает = СтрокаЭталон.ДескрипторБенчмарка.Категория() = ВходнаяСтрока.ДескрипторБенчмарка.Категория(); - ПараметрыСовпадают = ПараметрыСовпадают(СтрокаЭталон, ВходнаяСтрока); - ВерсияИсполняющейСредыСовпадает = СтрокаЭталон.ИсполняющаяСреда.Версия = ВходнаяСтрока.ИсполняющаяСреда.Версия; - ЭталоннаяВерсияИсполняющейСредыУказана = ЗначениеЗаполнено(ЭталоннаяВерсияИсполняющейСреды); - ЭталоннаяВерсияИсполняющейСредыСовпадает = ЭталоннаяВерсияИсполняющейСреды = СтрокаЭталон.ИсполняющаяСреда.Версия - Или ЭталоннаяВерсияИсполняющейСреды = СтрокаЭталон.ИсполняющаяСреда.Алиас; - - ПоискПоЭталоннойСреде = ЭталоннаяВерсияИсполняющейСредыУказана - И ЭталоннаяВерсияИсполняющейСредыСовпадает - И ИмяМетодаСовпадает; - - ПоискПоЭталонномуБенчмарку = Не ЭталоннаяВерсияИсполняющейСредыУказана - И ЭтоЭталон - И КатегорияСовпадает - И ВерсияИсполняющейСредыСовпадает; - - НайденЭталон = ЭтоРазныеСтроки - И ПараметрыСовпадают - И (ПоискПоЭталоннойСреде Или ПоискПоЭталонномуБенчмарку); - - Если НайденЭталон Тогда - Возврат СтрокаЭталон; - КонецЕсли; - - КонецЦикла; - -КонецФункции - -Функция ПараметрыСовпадают(СтрокаПервая, СтрокаВторая) - - Если СтрокаПервая.Параметры.Количество() <> СтрокаВторая.Параметры.Количество() Тогда - Возврат Ложь; - КонецЕсли; - - ПараметрыСовпадают = Истина; - Для Каждого ПараметрПервой Из СтрокаПервая.Параметры Цикл - - ПараметрНайден = Ложь; - Для Каждого ПараметрВторой Из СтрокаВторая.Параметры Цикл - Если ПараметрПервой.Имя = ПараметрВторой.Имя - И ПараметрПервой.Значение = ПараметрВторой.Значение Тогда - ПараметрНайден = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если Не ПараметрНайден Тогда - ПараметрыСовпадают = Ложь; - Прервать; - КонецЕсли; - - КонецЦикла; - - Возврат ПараметрыСовпадают; - -КонецФункции - -// Пустая таблица расшифровки -// -// Возвращаемое значение: -// ТаблицаЗначений: -// * ДескрипторБенчмарка - ДескрипторБенчмарка -// * Параметры - Массив из ПараметрБенчмарка -// * Статистика - СтатистикаБенчмарка -// * Эталон - СтрокаТаблицыЗначений, Неопределено -// * ЭтоЭталон - Булево -// * Замеры - см. НоваяТаблицаЗамеров -// * ИсполняющаяСреда - см. НоваяИсполняющаяСреда -Функция НоваяТаблицаРасшифровки() - - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("ДескрипторБенчмарка"); - Таблица.Колонки.Добавить("Параметры"); - Таблица.Колонки.Добавить("Статистика"); - Таблица.Колонки.Добавить("Эталон"); - Таблица.Колонки.Добавить("ЭтоЭталон"); - Таблица.Колонки.Добавить("Замеры"); - Таблица.Колонки.Добавить("ИсполняющаяСреда"); - - Возврат Таблица; - -КонецФункции - -// Пустая таблица замеров -// -// Возвращаемое значение: -// ТаблицаЗначений: -// * Этап - см. ЭтапыБенчмарка -// * НомерИтерации - Число -// * КоличествоОпераций - Число -// * Наносекунд - Число - Наносекунд за итерацию -// * НаносекундЗаОперацию - Число - Наносекунд за операцию -// * ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию -// * ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию -Функция НоваяТаблицаЗамеров() - - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("Этап"); - Таблица.Колонки.Добавить("НомерИтерации"); - Таблица.Колонки.Добавить("КоличествоОпераций"); - Таблица.Колонки.Добавить("Наносекунд"); - Таблица.Колонки.Добавить("НаносекундЗаОперацию"); - Таблица.Колонки.Добавить("ВыделяемаяПамять"); - Таблица.Колонки.Добавить("ВыделяемаяПамятьЗаОперацию"); - - Возврат Таблица; - -КонецФункции - -Функция НоваяИсполняющаяСреда() - - ИсполняющаяСреда = Новый Структура(); - ИсполняющаяСреда.Вставить("Версия", ""); - ИсполняющаяСреда.Вставить("Алиас", ""); - ИсполняющаяСреда.Вставить("Наименование", ""); - - Возврат ИсполняющаяСреда; - -КонецФункции - -#КонецОбласти 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 28c7fc0..cc184d2 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,10 +1,15 @@ // BSLLS:ExportVariables-off +&Сериализуемое("Name") Перем Имя Экспорт; // Строка + +&Сериализуемое("Value") Перем Значение Экспорт; // Произвольный + +&Сериализуемое("IsMethodParameter") Перем ЭтоПараметрМетода Экспорт; // Булево -Процедура ПриСозданииОбъекта(пИмя, пЗначение, пЭтоПараметрМетода = Ложь) +Процедура ПриСозданииОбъекта(пИмя = "", пЗначение = Неопределено, пЭтоПараметрМетода = Ложь) Имя = пИмя; Значение = пЗначение; 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" new file mode 100644 index 0000000..e5acb1a --- /dev/null +++ "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" @@ -0,0 +1,73 @@ +#Использовать asserts + +&Несериализуемое +Перем _Параметры; // Массив из ПараметрБенчмарка + +Процедура ПриСозданииОбъекта() + _Параметры = Новый Массив(); +КонецПроцедуры + +// Добавляет параметр бенчмарка в коллекцию +// +// Параметры: +// Параметр - ПараметрБенчмарка +Процедура Добавить(Параметр) Экспорт + + Ожидаем.Что(Параметр).ИмеетТип("ПараметрБенчмарка"); + Ожидаем.Что(Параметр.ЭтоПараметрМетода).ЭтоИстина(); + + _Параметры.Добавить(Параметр); + +КонецПроцедуры + +// Возвращает количество параметров +// +// Возвращаемое значение: +// Число +Функция Количество() Экспорт + Возврат _Параметры.Количество(); +КонецФункции + +// Возвращает параметр метода по индексу +// +// Параметры: +// Индекс - Число +// +// Возвращаемое значение: +// ПараметрБенчмарка +Функция Получить(Индекс) Экспорт + Возврат _Параметры[Индекс]; +КонецФункции + +// Возвращает массив параметров +// +// Возвращаемое значение: +// Массив из ПараметрБенчмарка +Функция ВМассив() Экспорт + Возврат Новый Массив(Новый ФиксированныйМассив(_Параметры)); +КонецФункции + +#Область Сериализация + +&ПередСериализацией +Процедура ПередСериализацией(Сериализатор, Результат, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + + Результат = Сериализатор.ПреобразоватьОбъектСериализации(_Параметры); + +КонецПроцедуры + +&ПослеДесериализации +Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт + + Если ТипЗнч(ПрочитанныеСвойства) = Тип("Массив") Тогда + _Параметры = Десериализатор.ПреобразоватьОбъектДесериализации( + ПрочитанныеСвойства, + Тип("Массив"), + Тип("ПараметрБенчмарка")); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 663fdab..0620160 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" @@ -2,7 +2,7 @@ Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков Перем _Конфигурация; // КонфигурацияБенчмарков -Перем _РасшифровкаРезультатов; // см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки +Перем _ЗапускиБенчмарков; // Массив из РезультатЗапускаБенчмаркаДто Перем _Отчет; // ОтчетБенчмарков Перем _КолонкиКонфигурации; // Массив из Строка @@ -11,12 +11,12 @@ // Параметры: // ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // Конфигурация - КонфигурацияБенчмарков -// РасшифровкаРезультатов - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки -Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, РасшифровкаРезультатов) +// ЗапускиБенчмарков - Массив из РезультатЗапускаБенчмаркаДто +Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, ЗапускиБенчмарков) _ДескрипторыБенчмарков = ДескрипторыБенчмарков; _Конфигурация = Конфигурация; - _РасшифровкаРезультатов = РасшифровкаРезультатов; + _ЗапускиБенчмарков = ЗапускиБенчмарков; _КолонкиКонфигурации = _Конфигурация.Колонки(); КонецПроцедуры @@ -51,7 +51,7 @@ Процедура ДобавитьКолонки() ДобавитьКолонкуПорядкаПоУмолчанию(); - ДобавитьКолонкуРасшифровкаРезультатов(); + ДобавитьКолонкуРезультатаЗапускаБенчмарка(); ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьМетод()); ДобавитьКолонкуКатегория(); ДобавитьКолонкиПараметров(); @@ -77,16 +77,16 @@ _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиПорядокПоУмолчанию()); КонецПроцедуры -Процедура ДобавитьКолонкуРасшифровкаРезультатов() - _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРасшифровкаРезультатов()); +Процедура ДобавитьКолонкуРезультатаЗапускаБенчмарка() + _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРезультатаЗапускаБенчмарка()); КонецПроцедуры Процедура ДобавитьКолонкиПараметров() ДобавленныеИмена = Новый Соответствие(); - Для Каждого Расшифровка Из _РасшифровкаРезультатов Цикл - Для Каждого Параметр Из Расшифровка.Параметры Цикл + Для Каждого РезультатЗапускаБенчмарка Из _ЗапускиБенчмарков Цикл + Для Каждого Параметр Из РезультатЗапускаБенчмарка.Параметры Цикл Если ДобавленныеИмена[Параметр.Имя] = Неопределено Тогда ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Параметр.Имя)); ДобавленныеИмена.Вставить(Параметр.Имя, Истина); @@ -108,8 +108,8 @@ ЕстьВерсия = Ложь; - Для Каждого СтрокаРасшифровкиЗамеров Из _РасшифровкаРезультатов Цикл - Если ЗначениеЗаполнено(СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия) Тогда + Для Каждого РезультатЗапускаБенчмарка Из _ЗапускиБенчмарков Цикл + Если ЗначениеЗаполнено(РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия) Тогда ЕстьВерсия = Истина; Прервать; КонецЕсли; @@ -209,7 +209,7 @@ СкрываемыеКолонки = Новый Массив(); СкрываемыеКолонки.Добавить(ИмяКолонкиПорядокПоУмолчанию()); - СкрываемыеКолонки.Добавить(ИмяКолонкиРасшифровкаРезультатов()); + СкрываемыеКолонки.Добавить(ИмяКолонкиРезультатаЗапускаБенчмарка()); Для Каждого Колонка Из _Отчет.Колонки Цикл Если СкрыватьКолонку(Колонка) Тогда @@ -245,7 +245,7 @@ Контекст = Новый Структура(); Контекст.Вставить("Значение", СтрокаОтчета[Колонка.Имя]); - Контекст.Вставить("Статистика", СтрокаОтчета.РасшифровкаРезультатов.Статистика); + Контекст.Вставить("Статистика", СтрокаОтчета[ИмяКолонкиРезультатаЗапускаБенчмарка()].Статистика); Попытка Скрывать = Действие.Выполнить(Контекст) = Истина; @@ -270,9 +270,9 @@ НомерБенчмарка = 0; ПредыдущийБенчмарк = ""; - Для Каждого СтрокаРасшифровкиЗамеров Из _РасшифровкаРезультатов Цикл + Для Каждого РезультатЗапускаБенчмарка Из _ЗапускиБенчмарков Цикл - ИмяБенчмарка = СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.Метод(); + ИмяБенчмарка = РезультатЗапускаБенчмарка.ДескрипторБенчмарка.Метод(); Если Не ПредыдущийБенчмарк = ИмяБенчмарка Тогда НомерБенчмарка = НомерБенчмарка + 1; ПредыдущийБенчмарк = ИмяБенчмарка; @@ -280,10 +280,10 @@ СтрокаОтчета = _Отчет.Таблица.Добавить(); СтрокаОтчета[ИмяКолонкиПорядокПоУмолчанию()] = НомерБенчмарка; - СтрокаОтчета[ИмяКолонкиРасшифровкаРезультатов()] = СтрокаРасшифровкиЗамеров; + СтрокаОтчета[ИмяКолонкиРезультатаЗапускаБенчмарка()] = РезультатЗапускаБенчмарка; Для Каждого Колонка Из _Отчет.Колонки Цикл - СтрокаОтчета[Колонка.Имя] = Колонка.Значение(СтрокаРасшифровкиЗамеров, Колонка); + СтрокаОтчета[Колонка.Имя] = Колонка.Значение(РезультатЗапускаБенчмарка, Колонка); КонецЦикла; КонецЦИкла; @@ -414,25 +414,17 @@ Для Каждого Колонка Из _Отчет.Колонки Цикл ИмяПараметра = КолонкаОтчетаБенчмарковПараметр.ИмяПараметра(Колонка); - Если ЗначениеЗаполнено(ИмяПараметра) И КолонкаСодержитТолькоСериализуемыеЗначения(Колонка.Имя) Тогда + Если ЗначениеЗаполнено(ИмяПараметра) И КолонкаСодержитТолькоПримитивы(Колонка.Имя) Тогда ДобавитьСортировку(Сортировка, Колонка.Имя); КонецЕсли; КонецЦикла; КонецПроцедуры -Процедура ДобавитьСортировку(Сортировка, ИмяКолонки, Направление = "") - - Если Не _Отчет.Таблица.Колонки.Найти(ИмяКолонки) = Неопределено Тогда - Сортировка.Добавить(ИмяКолонки + " " + Направление); - КонецЕсли; - -КонецПроцедуры - -Функция КолонкаСодержитТолькоСериализуемыеЗначения(ИмяКолонки) +Функция КолонкаСодержитТолькоПримитивы(ИмяКолонки) Для Каждого Строка Из _Отчет.Таблица Цикл - Если Не СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Строка[ИмяКолонки]) Тогда + Если Не СериализацияОбъектовБенчмаркинга.ЭтоПримитив(Строка[ИмяКолонки]) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; @@ -441,6 +433,14 @@ КонецФункции +Процедура ДобавитьСортировку(Сортировка, ИмяКолонки, Направление = "") + + Если Не _Отчет.Таблица.Колонки.Найти(ИмяКолонки) = Неопределено Тогда + Сортировка.Добавить(ИмяКолонки + " " + Направление); + КонецЕсли; + +КонецПроцедуры + Функция ИспользуетсяЭталон() ЕстьЭталоннаяВерсия = _Конфигурация.ВерсииИсполняющейСреды().Найти(Истина, "ЭтоЭталон") <> Неопределено; @@ -468,8 +468,8 @@ Возврат "ПорядокПоУмолчанию"; КонецФункции -Функция ИмяКолонкиРасшифровкаРезультатов() - Возврат "РасшифровкаРезультатов"; +Функция ИмяКолонкиРезультатаЗапускаБенчмарка() + Возврат "РезультатЗапускаБенчмарка"; КонецФункции #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\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\321\213\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..31cfcdd --- /dev/null +++ "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\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,163 @@ +// BSLLS:ExportVariables-off + +&Сериализуемое("HostEnvironmentInfo") +&Тип("СредаОкруженияБенчмарков") +Перем СредаОкружения Экспорт; // СредаОкруженияБенчмарков + +&Сериализуемое("Configuration") +&Тип("КонфигурацияБенчмарков") +Перем Конфигурация Экспорт; // КонфигурацияБенчмарков + +&Сериализуемое("BenchmarkDescriptors") +&Тип("КоллекцияДескрипторовБенчмарков") +Перем ДескрипторыБенчмарков Экспорт; // КоллекцияДескрипторовБенчмарков + +&Сериализуемое("Runs") +&Тип("Массив") +&ДляКаждого +&Тип("РезультатЗапускаБенчмаркаДто") +Перем Запуски Экспорт; // Массив из РезультатЗапускаБенчмаркаДто + +&Несериализуемое +Перем Отчет Экспорт; // ОтчетБенчмарков + +Процедура ПриСозданииОбъекта() + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); + Конфигурация = Новый КонфигурацияБенчмарков(); + Отчет = Новый ОтчетБенчмарков(); + СредаОкружения = Новый СредаОкруженияБенчмарков(); + Запуски = Новый Массив(); + +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Связывает каждую строку замеров с эталонной строкой. +// +// Алгоритм поиска эталонов (в порядке приоритета): +// 1. При наличии эталонной версии исполняющей среды: +// - Ищет строку бенчмарка с идентичным именем и набором параметров в соответствующей эталонной среде +// 2. При отсутствии эталонной среды, но при наличии эталонного бенчмарка: +// - Ищет строку бенчмарка в пределах текущей категории бенчмарков, наборов параметров и исполняющей среды +Процедура ОпределитьЭталоны() Экспорт + + ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды(); + + Для Каждого РезультатЗапускаБенчмарка Из Запуски Цикл + + РезультатЗапускаБенчмарка.Эталон = НайтиЭталонДляСтроки(РезультатЗапускаБенчмарка, ЭталоннаяВерсия); + + Если Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда + РезультатЗапускаБенчмарка.ЭтоЭталон = РезультатЗапускаБенчмарка.ДескрипторБенчмарка.ЭтоЭталон(); + Иначе + РезультатЗапускаБенчмарка.ЭтоЭталон = + ЭталоннаяВерсия = РезультатЗапускаБенчмарка.ИсполняющаяСреда.Версия + Или ЭталоннаяВерсия = РезультатЗапускаБенчмарка.ИсполняющаяСреда.Алиас; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Пересчитывает статистические показатели для всех замеров в таблице +Процедура ОбновитьСтатистику() Экспорт + Для Каждого РезультатЗапускаБенчмарка Из Запуски Цикл + РезультатЗапускаБенчмарка.Статистика.Прочитать(РезультатЗапускаБенчмарка.Замеры); + КонецЦикла; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НайтиЭталонДляСтроки(ВходнаяСтрока, ЭталоннаяВерсияИсполняющейСреды) + + Для Каждого РезультатЗапуска Из Запуски Цикл + + ЭтоЭталон = РезультатЗапуска.ДескрипторБенчмарка.ЭтоЭталон(); + ЭтоРазныеСтроки = Не РезультатЗапуска = ВходнаяСтрока; + ИмяМетодаСовпадает = РезультатЗапуска.ДескрипторБенчмарка.Метод() = ВходнаяСтрока.ДескрипторБенчмарка.Метод(); + КатегорияСовпадает = РезультатЗапуска.ДескрипторБенчмарка.Категория() = ВходнаяСтрока.ДескрипторБенчмарка.Категория(); + ПараметрыСовпадают = ПараметрыСовпадают(РезультатЗапуска, ВходнаяСтрока); + ВерсияИсполняющейСредыСовпадает = РезультатЗапуска.ИсполняющаяСреда.Версия = ВходнаяСтрока.ИсполняющаяСреда.Версия; + ЭталоннаяВерсияИсполняющейСредыУказана = ЗначениеЗаполнено(ЭталоннаяВерсияИсполняющейСреды); + ЭталоннаяВерсияИсполняющейСредыСовпадает = ЭталоннаяВерсияИсполняющейСреды = РезультатЗапуска.ИсполняющаяСреда.Версия + Или ЭталоннаяВерсияИсполняющейСреды = РезультатЗапуска.ИсполняющаяСреда.Алиас; + + ПоискПоЭталоннойСреде = ЭталоннаяВерсияИсполняющейСредыУказана + И ЭталоннаяВерсияИсполняющейСредыСовпадает + И ИмяМетодаСовпадает; + + ПоискПоЭталонномуБенчмарку = Не ЭталоннаяВерсияИсполняющейСредыУказана + И ЭтоЭталон + И КатегорияСовпадает + И ВерсияИсполняющейСредыСовпадает; + + НайденЭталон = ЭтоРазныеСтроки + И ПараметрыСовпадают + И (ПоискПоЭталоннойСреде Или ПоискПоЭталонномуБенчмарку); + + Если НайденЭталон Тогда + Возврат РезультатЗапуска; + КонецЕсли; + + КонецЦикла; + +КонецФункции + +Функция ПараметрыСовпадают(СтрокаПервая, СтрокаВторая) + + Если СтрокаПервая.Параметры.Количество() <> СтрокаВторая.Параметры.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + ПараметрыСовпадают = Истина; + Для Каждого ПараметрПервой Из СтрокаПервая.Параметры Цикл + + ПараметрНайден = Ложь; + Для Каждого ПараметрВторой Из СтрокаВторая.Параметры Цикл + Если ПараметрПервой.Имя = ПараметрВторой.Имя + И ПараметрПервой.Значение = ПараметрВторой.Значение Тогда + ПараметрНайден = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ПараметрНайден Тогда + ПараметрыСовпадают = Ложь; + Прервать; + КонецЕсли; + + КонецЦикла; + + Возврат ПараметрыСовпадают; + +КонецФункции + +#Область Сериализация + +&ПослеДесериализации +Процедура ПослеДесериализации() Экспорт + + ПереопределитьДескрипторыВЗапусках(); + ОпределитьЭталоны(); + ОбновитьСтатистику(); + +КонецПроцедуры + +Процедура ПереопределитьДескрипторыВЗапусках() + + Для Каждого Запуск Из Запуски Цикл + Дескриптор = Запуск.ДескрипторБенчмарка; + НайденныйДескриптор = ДескрипторыБенчмарков.НайтиПоТипуИИмени(Дескриптор.ТипОбъекта(), Дескриптор.Метод()); + Если Не НайденныйДескриптор = Неопределено Тогда + Запуск.ДескрипторБенчмарка = НайденныйДескриптор; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" deleted file mode 100644 index ed3ab68..0000000 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ /dev/null @@ -1,232 +0,0 @@ -#Использовать logos -#Использовать asserts - -Перем _Лог; // Лог - -// Сериализатор конфигурации бенчмарков -Процедура ПриСозданииОбъекта() - _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторКонфигурацииБенчмарков"); -КонецПроцедуры - -#Область ПрограммныйИнтерфейс - -// Сериализует конфигурацию бенчмарков в JSON-файл -// -// Параметры: -// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков -// ИмяФайла - Строка - Имя файла, в который будет записана конфигурация. -Процедура СериализоватьВJSON(Конфигурация, ИмяФайла) Экспорт - - _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); - - ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); - - ЗаписьJSON = Новый ЗаписьJSON(); - ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); - ЗаписатьJSON(ЗаписьJSON, Конвертировать(Конфигурация)); - ЗаписьJSON.Закрыть(); - - _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); - -КонецПроцедуры - -// Десериализует конфигурацию бенчмарков из JSON-файла -// -// Параметры: -// ИмяФайла - Строка - Имя файла, из которого будет прочитана конфигурация. -// -// Возвращаемое значение: -// КонфигурацияБенчмарков -Функция ДесериализоватьИзJSON(ИмяФайла) Экспорт - - _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); - - ЧтениеJSON = Новый ЧтениеJSON(); - ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8"); - Данные = ПрочитатьJSON(ЧтениеJSON, Ложь); - ЧтениеJSON.Закрыть(); - - _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла); - - Возврат СобратьКонфигурацию(Данные); - -КонецФункции - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Функция Конвертировать(Конфигурация) - - Данные = Новый Структура(); - - Для Каждого СтрокаТаблицы Из Конфигурация.ВТаблицу() Цикл - - Если СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(СтрокаТаблицы.Значение) - Или СтрокаТаблицы.Имя = "Колонки" Тогда - Значение = СтрокаТаблицы.Значение; - ИначеЕсли СтрокаТаблицы.Имя = "Параметры" Тогда - Значение = КонвертироватьПараметры(СтрокаТаблицы.Значение); - ИначеЕсли СтрокаТаблицы.Имя = "ОбработчикиСобытий" Тогда - Значение = КонвертироватьОбработчикиСобытий(СтрокаТаблицы.Значение); - ИначеЕсли СтрокаТаблицы.Имя = "Экспортеры" Тогда - Значение = КонвертироватьЭкспортеры(СтрокаТаблицы.Значение); - ИначеЕсли СтрокаТаблицы.Имя = "ВерсииИсполняющейСреды" Тогда - Значение = КонвертироватьВерсииИсполняющейСреды(СтрокаТаблицы.Значение); - ИначеЕсли СтрокаТаблицы.Имя = "ИсточникиПараметров" Тогда - Значение = КонвертироватьИсточникиПараметров(СтрокаТаблицы.Значение); - Иначе - ВызватьИсключение СтрШаблон("Не реализована конвертация параметра '%1'", СтрокаТаблицы.Имя); - КонецЕсли; - - Данные.Вставить(СтрокаТаблицы.Имя, Значение); - - КонецЦикла; - - Возврат Данные; - -КонецФункции - -Функция КонвертироватьПараметры(Параметры) - - Результат = Новый Массив(); - - Для Каждого ПараметрБенчмарка Из Параметры Цикл - - Значение = Новый Структура(); - Значение.Вставить("Имя", ПараметрБенчмарка.Имя); - Значение.Вставить("Значение", ПараметрБенчмарка.Значение); - Значение.Вставить("ЭтоПараметрМетода", ПараметрБенчмарка.ЭтоПараметрМетода); - - Результат.Добавить(Значение); - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция КонвертироватьОбработчикиСобытий(ОбработчикиСобытий) - - Результат = Новый Массив(); - - Для Каждого Строка Из ОбработчикиСобытий Цикл - - Тип = ТипЗнч(Строка.Обработчик); - Если Тип <> Тип("Строка") Тогда - ВызватьИсключение СтрШаблон("Обработчик события типа <%1> не поддерживает сериализацию.", Тип); - КонецЕсли; - - Значение = Новый Структура(); - Значение.Вставить("Событие", Строка.Событие); - Значение.Вставить("Обработчик", Строка.Обработчик); - - Результат.Добавить(Значение); - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция КонвертироватьЭкспортеры(Экспортеры) - - Результат = Новый Массив(); - - Для Каждого Экспортер Из Экспортеры Цикл - Результат.Добавить(Строка(ТипЗнч(Экспортер))); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция КонвертироватьВерсииИсполняющейСреды(Версии) - - Результат = Новый Массив(); - - Для Каждого СтрокаВерсия Из Версии Цикл - Версия = Новый Структура(); - Версия.Вставить("Версия", СтрокаВерсия.Версия); - Версия.Вставить("Наименование", СтрокаВерсия.Наименование); - Версия.Вставить("ЭтоЭталон", СтрокаВерсия.ЭтоЭталон); - - Результат.Добавить(Версия); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция СобратьКонфигурацию(Данные) - - Конфигурация = Новый КонфигурацияБенчмарков(); - Конфигурация.УстановитьКоличествоИтераций(Данные.КоличествоИтераций); - Конфигурация.УстановитьКоличествоВызововЗаИтерацию(Данные.КоличествоВызововЗаИтерацию); - Конфигурация.УстановитьКоличествоПрогревочныхИтераций(Данные.КоличествоПрогревочныхИтераций); - Конфигурация.УстановитьМинимальноеВремяИтерации(Данные.МинимальноеВремяИтерации); - Конфигурация.УстановитьМинимальноеКоличествоВызововЗаИтерацию(Данные.МинимальноеКоличествоВызововЗаИтерацию); - Конфигурация.УстановитьСтратегию(Данные.Стратегия); - Конфигурация.УстановитьСортировкуОтчета(Данные.СортировкаОтчета); - Конфигурация.УстановитьКаталогАртефактов(Данные.КаталогАртефактов); - - Если Данные.ТребуетсяМониторингПамяти Тогда - Конфигурация.ДобавитьМониторингПамяти(); - КонецЕсли; - - Для Каждого Параметр Из Данные.Параметры Цикл - Конфигурация.ДобавитьПараметр(Параметр.Имя, Параметр.Значение); - КонецЦикла; - - Для Каждого ДанныеСобытия Из Данные.ОбработчикиСобытий Цикл - Конфигурация.ДобавитьОбработчикСобытия(ДанныеСобытия.Событие, ДанныеСобытия.Обработчик); - КонецЦикла; - - Для Каждого Колонка Из Данные.Колонки Цикл - Конфигурация.ДобавитьКолонку(Колонка); - КонецЦикла; - - Для Каждого Экспортер Из Данные.Экспортеры Цикл - Конфигурация.ДобавитьЭкспортер(Новый(Тип(Экспортер))); - КонецЦикла; - - Для Каждого ВерсияИсполняющейСреды Из Данные.ВерсииИсполняющейСреды Цикл - Конфигурация.ДобавитьВерсиюИсполняющейСреды( - ВерсияИсполняющейСреды.Версия, - ВерсияИсполняющейСреды.Наименование, - ВерсияИсполняющейСреды.ЭтоЭталон - ); - КонецЦикла; - - Для Каждого ИсточникПараметров Из Данные.ИсточникиПараметров Цикл - Конфигурация.ДобавитьИсточникПараметров(ИсточникПараметров.ИмяПоля, ИсточникПараметров.Источник); - КонецЦикла; - - Возврат Конфигурация; - -КонецФункции - -Функция КонвертироватьИсточникиПараметров(ИсточникиПараметров) - - Результат = Новый Массив(); - - Для Каждого ИсточникПараметров Из ИсточникиПараметров Цикл - - Тип = ТипЗнч(ИсточникПараметров.Источник); - Если Тип <> Тип("Строка") Тогда - ВызватьИсключение СтрШаблон("Источник параметров типа <%1> не поддерживает сериализацию.", Тип); - КонецЕсли; - - Значение = Новый Структура(); - Значение.Вставить("ИмяПоля", ИсточникПараметров.ИмяПоля); - Значение.Вставить("Источник", ИсточникПараметров.Источник); - - Результат.Добавить(Значение); - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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..6a95be4 --- /dev/null +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,58 @@ +#Использовать logos +#Использовать "../../dto" + +Перем _Лог; // Лог + +// Сериализатор настроек бенчмарков +Процедура ПриСозданииОбъекта() + _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторНастроекБенчмарков"); +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Сериализует настройки бенчмарков в JSON-файл +// +// Параметры: +// Дескрипторы - КоллекцияДескрипторовБенчмарков - Коллекция дескрипторов бенчмарков +// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков +// ИмяФайла - Строка - Имя файла, в который будет записана конфигурация +Процедура ЗаписатьВJson(Дескрипторы, Конфигурация, ИмяФайла) Экспорт + + _Лог.Отладка("Начало формирования файла: %1", ИмяФайла); + + Настройки = Новый НастройкиБенчмарковДто(); + Настройки.ДескрипторыБенчмарков = Дескрипторы; + Настройки.Конфигурация = Конфигурация; + + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, "UTF-8"); + ЗаписьТекста.Записать(СериализацияОбъектовБенчмаркинга.ВJson(Настройки)); + ЗаписьТекста.Закрыть(); + + _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла); + +КонецПроцедуры + +// Десериализует настройки бенчмарков из JSON-файла +// +// Параметры: +// ИмяФайла - Строка - Имя файла, из которого будет прочитана конфигурация. +// +// Возвращаемое значение: +// НастройкиБенчмарковДто +Функция ПрочитатьИзJson(ИмяФайла) Экспорт + + _Лог.Отладка("Начало чтения файла: %1", ИмяФайла); + + ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла, "UTF-8"); + Json = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Настройки = СериализацияОбъектовБенчмаркинга.ИзJson(Json, Тип("НастройкиБенчмарковДто")); + + _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла); + + Возврат Настройки; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index c326657..2d444ae 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" @@ -1,5 +1,4 @@ #Использовать logos -#Использовать xml-parser Перем _Лог; // Лог @@ -17,22 +16,15 @@ // Сериализует результаты бенчмарков в JSON-файл // // Параметры: -// РезультатыБенчмарков - Структура - Данные результатов бенчмарков: -// * Расшифровка - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки -// * СредаОкружения - СредаОкруженияБенчмарков - Информация о среде выполнения бенчмарков +// РезультатыБенчмарков - РезультатыБенчмарков // ПолноеИмяФайла - Строка - Полный путь к файлу, в который будут записаны результаты бенчмарков -Процедура СериализоватьВJSON(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт +Процедура ЗаписатьВJson(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало сериализации результатов в JSON-файл: %1", ПолноеИмяФайла); - - Данные = ПодготовитьРезультатыБенчмарковДляСериализации(РезультатыБенчмарков); - ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб); - - ЗаписьJSON = Новый ЗаписьJSON(); - ЗаписьJSON.ОткрытьФайл(ПолноеИмяФайла, "UTF-8", , ПараметрыЗаписиJSON); - ЗаписатьJSON(ЗаписьJSON, Данные); - ЗаписьJSON.Закрыть(); + ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, "UTF-8"); + ЗаписьТекста.Записать(СериализацияОбъектовБенчмаркинга.ВJson(РезультатыБенчмарков)); + ЗаписьТекста.Закрыть(); _Лог.Отладка("Сериализация в JSON-файл завершена: %1", ПолноеИмяФайла); @@ -42,392 +34,23 @@ // // Параметры: // ПолноеИмяФайла - Строка - Полный путь к JSON-файлу с результатами бенчмарков -// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков // // Возвращаемое значение: -// Структура: -// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки -// * СредаОкружения - СредаОкруженияБенчмарков -Функция ДесериализоватьИзJSON(ПолноеИмяФайла, Конфигурация) Экспорт +// РезультатыБенчмарков +Функция ПрочитатьИзJson(ПолноеИмяФайла) Экспорт _Лог.Отладка("Начало десериализации из JSON-файла: %1", ПолноеИмяФайла); - ЧтениеJSON = Новый ЧтениеJSON(); - ЧтениеJSON.ОткрытьФайл(ПолноеИмяФайла, "UTF-8"); - Данные = ПрочитатьJSON(ЧтениеJSON, Ложь); - ЧтениеJSON.Закрыть(); - - _Лог.Отладка("Десериализация из JSON-файла завершена: %1", ПолноеИмяФайла); - - Возврат СобратьРезультатыБенчмарков(Данные, Конфигурация); - -КонецФункции - -// Сериализует результаты бенчмарков в XML-файл -// -// Параметры: -// РезультатыБенчмарков - Структура - Данные результатов бенчмарков: -// * Расшифровка - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки -// * СредаОкружения - СредаОкруженияБенчмарков - Информация о среде выполнения бенчмарков -// ПолноеИмяФайла - Строка - Полный путь к файлу, в который будут записаны результаты бенчмарков -Процедура СериализоватьВXML(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт - - _Лог.Отладка("Начало сериализации результатов в XML-файл: %1", ПолноеИмяФайла); - - Данные = ПодготовитьРезультатыБенчмарковДляСериализации(РезультатыБенчмарков); - - // Преобразование данных для корректной записи в XML - ПодготовитьЗначенияДляЗаписиВXML(Данные); - ПодготовитьМассивыДляЗаписиВXML(Данные); - - Данные = Новый Структура("Отчет", Данные); - - // Запись данных в XML-файл - ПроцессорXML = Новый СериализацияДанныхXML(Ложь); - ПроцессорXML.ЗаписатьВФайл(Данные, ПолноеИмяФайла, Истина); - - _Лог.Отладка("Сериализация в XML-файл завершена: %1", ПолноеИмяФайла); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -#Область Сериализация - -Функция ПодготовитьРезультатыБенчмарковДляСериализации(РезультатыБенчмарков) - - Данные = Новый Структура(); - Данные.Вставить("СредаОкружения", ПодготовитьСредуОкруженияДляСериализации(РезультатыБенчмарков.СредаОкружения)); - Данные.Вставить("Бенчмарки", ПодготовитьРасшифровкуЗамеровДляСериализации(РезультатыБенчмарков.Расшифровка)); - - Возврат Данные; - -КонецФункции - -Функция ПодготовитьСредуОкруженияДляСериализации(СредаОкружения) - - ИнформацияОПроцессоре = СредаОкружения.ИнформацияОПроцессоре; - - ДанныеОкружения = Новый Структура(); - ДанныеОкружения.Вставить("ВерсияBenchmarkOneScript", СредаОкружения.ВерсияБиблиотеки); - ДанныеОкружения.Вставить("ВерсияОС", СредаОкружения.ВерсияОС); - ДанныеОкружения.Вставить("ВерсияИсполняющейСреды", СредаОкружения.ВерсияИсполняющейСреды); - ДанныеОкружения.Вставить("ИмяПроцессора", ИнформацияОПроцессоре.ИмяПроцессора); - ДанныеОкружения.Вставить("КоличествоПроцессоров", ИнформацияОПроцессоре.КоличествоПроцессоров); - ДанныеОкружения.Вставить("КоличествоЯдер", ИнформацияОПроцессоре.КоличествоЯдер); - ДанныеОкружения.Вставить("КоличествоЛогическихПроцессоров", ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров); - - Возврат ДанныеОкружения; - -КонецФункции - -Функция ПодготовитьРасшифровкуЗамеровДляСериализации(Расшифровка) - - ДанныеБенчмарки = Новый Массив(); - Для Каждого СтрокаРасшифровкиЗамеров Из Расшифровка Цикл - ДанныеБенчмарки.Добавить(ПодготовитьСтрокуРасшифровкиЗамеровДляСериализации(СтрокаРасшифровкиЗамеров)); - КонецЦикла; - - Возврат ДанныеБенчмарки; - -КонецФункции - -Функция ПодготовитьСтрокуРасшифровкиЗамеровДляСериализации(Строка) - - ДанныеИсполняющаяСреда = Новый Структура(); - ДанныеИсполняющаяСреда.Вставить("Версия", Строка.ИсполняющаяСреда.Версия); - ДанныеИсполняющаяСреда.Вставить("Алиас", Строка.ИсполняющаяСреда.Алиас); - ДанныеИсполняющаяСреда.Вставить("Наименование", Строка.ИсполняющаяСреда.Наименование); - - ДанныеБенчмарк = Новый Структура(); - ДанныеБенчмарк.Вставить("Тип", Строка(Строка.ДескрипторБенчмарка.ТипОбъекта())); - ДанныеБенчмарк.Вставить("Метод", Строка.ДескрипторБенчмарка.Метод()); - ДанныеБенчмарк.Вставить("Категория", Строка.ДескрипторБенчмарка.Категория()); - ДанныеБенчмарк.Вставить("ЭтоЭталон", Строка.ДескрипторБенчмарка.ЭтоЭталон()); - ДанныеБенчмарк.Вставить("ИсполняющаяСреда", ДанныеИсполняющаяСреда); - ДанныеБенчмарк.Вставить("Параметры", ПодготовитьПараметрыДляСериализации(Строка.Параметры)); - ДанныеБенчмарк.Вставить("Статистика", ПодготовитьСтатистикуДляСериализации(Строка.Статистика, Строка.Замеры)); - ДанныеБенчмарк.Вставить("Замеры", ПодготовитьЗамерыДляСериализации(Строка.Замеры)); - - Для Каждого Параметр Из Строка.Параметры Цикл - Значение = СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Параметр.Значение); - ДанныеБенчмарк.Параметры.Вставить(Параметр.Имя, Значение); - КонецЦикла; - - Возврат ДанныеБенчмарк; - -КонецФункции - -Функция ПодготовитьПараметрыДляСериализации(Параметры) - - ДанныеПараметры = Новый Структура(); - - Для Каждого Параметр Из Параметры Цикл - Значение = СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Параметр.Значение); - ДанныеПараметры.Вставить(Параметр.Имя, Значение); - КонецЦикла; - - Возврат ДанныеПараметры; - -КонецФункции - -Функция ПодготовитьСтатистикуДляСериализации(Статистика, Замеры) - - ДанныеСтатистика = Новый Структура(); - ДанныеСтатистика.Вставить("Значения", Новый Массив()); - ДанныеСтатистика.Вставить("Количество", 0); - ДанныеСтатистика.Вставить("Мин", Статистика.Мин); - ДанныеСтатистика.Вставить("Q1", Статистика.НижнийКвартиль); - ДанныеСтатистика.Вставить("Медиана", Статистика.Медиана); - ДанныеСтатистика.Вставить("Среднее", Статистика.Среднее); - ДанныеСтатистика.Вставить("Q3", Статистика.ВерхнийКвартиль); - ДанныеСтатистика.Вставить("Макс", Статистика.Макс); - ДанныеСтатистика.Вставить("СтандартноеОтклонение", Статистика.СтандартноеОтклонение); - ДанныеСтатистика.Вставить("СтандартнаяОшибкаСреднего", Статистика.СтандартнаяОшибкаСреднего); - ДанныеСтатистика.Вставить("ОперацийВСекунду", Статистика.ОперацийВСекунду); - ДанныеСтатистика.Вставить("Процентили", Новый Структура()); - - // BSLLS:MagicNumber-off - ДанныеСтатистика.Процентили.Вставить("P0", Статистика.Квантиль(0)); - ДанныеСтатистика.Процентили.Вставить("P25", Статистика.Квантиль(0.25)); - ДанныеСтатистика.Процентили.Вставить("P50", Статистика.Квантиль(0.5)); - ДанныеСтатистика.Процентили.Вставить("P67", Статистика.Квантиль(0.67)); - ДанныеСтатистика.Процентили.Вставить("P80", Статистика.Квантиль(0.8)); - ДанныеСтатистика.Процентили.Вставить("P85", Статистика.Квантиль(0.85)); - ДанныеСтатистика.Процентили.Вставить("P90", Статистика.Квантиль(0.90)); - ДанныеСтатистика.Процентили.Вставить("P95", Статистика.Квантиль(0.95)); - ДанныеСтатистика.Процентили.Вставить("P100", Статистика.Квантиль(1)); - // BSLLS:MagicNumber-on - - ДанныеСтатистика.Вставить("Память", Новый Структура()); - ДанныеСтатистика.Память.Вставить("ВыделяемаяЗаОперацию", Статистика.ВыделяемаяПамять); - - Для Каждого Замер Из Замеры Цикл - Если Замер.Этап = ЭтапыБенчмарка.Измерение Тогда - ДанныеСтатистика.Значения.Добавить(Замер.НаносекундЗаОперацию); - КонецЕсли; - КонецЦикла; - - ДанныеСтатистика.Количество = ДанныеСтатистика.Значения.Количество(); - - Возврат ДанныеСтатистика; - -КонецФункции - -Функция ПодготовитьЗамерыДляСериализации(Замеры) - - ДанныеЗамеры = Новый Массив(); - - Для Каждого Замер Из Замеры Цикл - - ДанныеЗамер = Новый Структура(); - ДанныеЗамер.Вставить("Этап", Замер.Этап); - ДанныеЗамер.Вставить("НомерИтерации", Замер.НомерИтерации); - ДанныеЗамер.Вставить("КоличествоОпераций", Замер.КоличествоОпераций); - ДанныеЗамер.Вставить("Наносекунд", Замер.Наносекунд); - ДанныеЗамер.Вставить("НаносекундЗаОперацию", Замер.НаносекундЗаОперацию); - ДанныеЗамер.Вставить("ВыделяемаяПамять", Замер.ВыделяемаяПамять); - ДанныеЗамер.Вставить("ВыделяемаяПамятьЗаОперацию", Замер.ВыделяемаяПамятьЗаОперацию); - - ДанныеЗамеры.Добавить(ДанныеЗамер); - - КонецЦикла; - - Возврат ДанныеЗамеры; + ЧтениеТекста = Новый ЧтениеТекста(ПолноеИмяФайла, "UTF-8"); + Json = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); -КонецФункции - -Процедура ПодготовитьМассивыДляЗаписиВXML(Данные) - - Для Каждого Строка Из Данные.Бенчмарки Цикл - ПодготовитьМассивДляЗаписиВXML(Строка.Статистика.Значения, "Значение"); - ПодготовитьМассивДляЗаписиВXML(Строка.Замеры, "Замер"); - КонецЦикла; - - ПодготовитьМассивДляЗаписиВXML(Данные.Бенчмарки, "Бенчмарк"); - -КонецПроцедуры - -Процедура ПодготовитьЗначенияДляЗаписиВXML(Данные) - - // В xml-parser не все простые типы корректно сериализуются - Для Каждого Строка Из Данные.Бенчмарки Цикл - Для Каждого Параметр Из Строка.Параметры Цикл - Если СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Параметр.Значение) Тогда - Строка.Параметры[Параметр.Ключ] = XMLСтрока(Параметр.Значение); - КонецЕсли; - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -Процедура ПодготовитьМассивДляЗаписиВXML(Массив, Имя) - - Для Инд = 0 По Массив.ВГраница() Цикл - Значение = Массив[Инд]; - Массив[Инд] = Новый Структура(Имя, Значение); - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти - -#Область Десериализация - -Функция СобратьРезультатыБенчмарков(Данные, Конфигурация) - - // Расшифровка замеров - МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков(); - - ДескрипторыБенчмарков = Новый Соответствие(); - - Для Каждого ДанныеБенчмарк Из Данные.Бенчмарки Цикл - - ДескрипторБенчмарка = СобратьДескрипторБенчмарка(ДанныеБенчмарк, ДескрипторыБенчмарков, Конфигурация); - - СтрокаТаблицы = МенеджерРасшифровкиРезультатов.Добавить(); - СтрокаТаблицы.ДескрипторБенчмарка = ДескрипторБенчмарка; - СтрокаТаблицы.ИсполняющаяСреда.Версия = ДанныеБенчмарк.ИсполняющаяСреда.Версия; - СтрокаТаблицы.ИсполняющаяСреда.Алиас = ДанныеБенчмарк.ИсполняющаяСреда.Алиас; - СтрокаТаблицы.ИсполняющаяСреда.Наименование = ДанныеБенчмарк.ИсполняющаяСреда.Наименование; - - ЗаполнитьПараметрыВСтроке(СтрокаТаблицы, ДанныеБенчмарк); - ЗаполнитьЗамерыВСтроке(СтрокаТаблицы, ДанныеБенчмарк); - - КонецЦикла; - - МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(Конфигурация); - МенеджерРасшифровкиРезультатов.ОбновитьСтатистику(); - - // Среда окружения - ДанныеОкружения = Данные.СредаОкружения; - - ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре(Ложь); - ИнформацияОПроцессоре.ИмяПроцессора = ДанныеОкружения.ИмяПроцессора; - ИнформацияОПроцессоре.КоличествоПроцессоров = ДанныеОкружения.КоличествоПроцессоров; - ИнформацияОПроцессоре.КоличествоЯдер = ДанныеОкружения.КоличествоЯдер; - ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров = ДанныеОкружения.КоличествоЛогическихПроцессоров; - - СредаОкружения = Новый СредаОкруженияБенчмарков(); - СредаОкружения.ВерсияБиблиотеки = ДанныеОкружения.ВерсияBenchmarkOneScript; - СредаОкружения.ВерсияОС = ДанныеОкружения.ВерсияОС; - СредаОкружения.ВерсияИсполняющейСреды = ДанныеОкружения.ВерсияИсполняющейСреды; - СредаОкружения.ИнформацияОПроцессоре = ИнформацияОПроцессоре; - - // Подготовка результата - Результат = Новый Структура(); - Результат.Вставить("Расшифровка", МенеджерРасшифровкиРезультатов.ВТаблицу()); - Результат.Вставить("СредаОкружения", СредаОкружения); - - Возврат Результат; - -КонецФункции - -Функция СобратьДескрипторБенчмарка(ДанныеБенчмарк, ДескрипторыБенчмарков, Конфигурация) - - Тип = Тип(ДанныеБенчмарк.Тип); - ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды(); - - Если ДескрипторыБенчмарков[Тип] = Неопределено Тогда - ДескрипторыБенчмарков[Тип] = Новый Соответствие(); - КонецЕсли; - - ДескрипторБенчмарка = ДескрипторыБенчмарков[Тип][ДанныеБенчмарк.Метод]; - Если Не ДескрипторБенчмарка = Неопределено Тогда - Возврат ДескрипторБенчмарка; - КонецЕсли; - - ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Тип, ДанныеБенчмарк.Метод); - - Если ДанныеБенчмарк.ЭтоЭталон И Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда - ДескрипторБенчмарка.ИспользоватьКакЭталон(ДанныеБенчмарк.ЭтоЭталон); - КонецЕсли; - - Если ЗначениеЗаполнено(ДанныеБенчмарк.Категория) Тогда - ДескрипторБенчмарка.УстановитьКатегорию(ДанныеБенчмарк.Категория); - КонецЕсли; - - ДескрипторыБенчмарков[Тип].Вставить(ДанныеБенчмарк.Метод, ДескрипторБенчмарка); - - Возврат ДескрипторБенчмарка; - -КонецФункции - -Процедура ЗаполнитьПараметрыВСтроке(СтрокаРезультата, ДанныеБенчмарк) - - ИменаПараметровБенчмарка = СтрокаРезультата.ДескрипторБенчмарка.ИменаПараметров(); - КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); - - Если КоличествоПараметров = 0 Тогда - ПараметрыМетода = Новый Массив(); - Иначе - ПараметрыМетода = Новый Массив(КоличествоПараметров); - КонецЕсли; - - Для Каждого ДанныеПараметр Из ДанныеБенчмарк.Параметры Цикл - - Имя = ДанныеПараметр.Ключ; - Значение = ДанныеПараметр.Значение; - - ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя); - ЭтоПараметрМетода = Не ИндексПараметра = Неопределено; - - ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); - СтрокаРезультата.Параметры.Добавить(ПараметрБенчмарка); + РезультатыБенчмарков = СериализацияОбъектовБенчмаркинга.ИзJson(Json, Тип("РезультатыБенчмарков")); - Если ЭтоПараметрМетода Тогда - ПараметрыМетода[ИндексПараметра] = Значение; - КонецЕсли; - - КонецЦикла; - - Если ПараметрыМетода.Количество() > 0 - И ОтсутствуетНаборПараметровБенчмарка(СтрокаРезультата.ДескрипторБенчмарка, ПараметрыМетода) Тогда - СтрокаРезультата.ДескрипторБенчмарка.ДобавитьПараметры(ПараметрыМетода); - КонецЕсли; - -КонецПроцедуры - -Функция ОтсутствуетНаборПараметровБенчмарка(ДескрипторБенчмарка, ПараметрыМетода) - - НайденНабор = Ложь; - Для Каждого НаборПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл - НайденНабор = Истина; - Для Инд = 0 По НаборПараметров.ВГраница() Цикл - Если Не НаборПараметров[Инд].Значение = ПараметрыМетода[Инд] Тогда - НайденНабор = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Возврат Не НайденНабор; - -КонецФункции - -Процедура ЗаполнитьЗамерыВСтроке(СтрокаРезультата, ДанныеБенчмарк) - - Для Каждого ДанныеЗамер Из ДанныеБенчмарк.Замеры Цикл - - СтрокаЗамера = СтрокаРезультата.Замеры.Добавить(); - СтрокаЗамера.Этап = ДанныеЗамер.Этап; - СтрокаЗамера.НомерИтерации = ВЧисло(ДанныеЗамер.НомерИтерации); - СтрокаЗамера.КоличествоОпераций = ВЧисло(ДанныеЗамер.КоличествоОпераций); - СтрокаЗамера.Наносекунд = ВЧисло(ДанныеЗамер.Наносекунд); - СтрокаЗамера.НаносекундЗаОперацию = ВЧисло(ДанныеЗамер.НаносекундЗаОперацию); - СтрокаЗамера.ВыделяемаяПамять = ВЧисло(ДанныеЗамер.ВыделяемаяПамять); - СтрокаЗамера.ВыделяемаяПамятьЗаОперацию = ВЧисло(ДанныеЗамер.ВыделяемаяПамятьЗаОперацию); + _Лог.Отладка("Десериализация из JSON-файла завершена: %1", ПолноеИмяФайла); - КонецЦикла; + Возврат РезультатыБенчмарков; -КонецПроцедуры - -Функция ВЧисло(Значение) - Возврат XMLЗначение(Тип("Число"), Значение); КонецФункции -#КонецОбласти - #КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 7c36a66..153da6e 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" @@ -1,13 +1,40 @@ +// BSLLS:UnusedLocalVariable-off // BSLLS:ExportVariables-off #Использовать cpuinfo #Использовать packageinfo +&Сериализуемое("BenchmarkOneScriptVersion") +&Тип("Строка") Перем ВерсияБиблиотеки Экспорт; // Строка + +&Сериализуемое("OsVersion") +&Тип("Строка") Перем ВерсияОС Экспорт; // Строка + +&Сериализуемое("RuntimeVersion") +&Тип("Строка") Перем ВерсияИсполняющейСреды Экспорт; // Строка + +&Несериализуемое Перем ИнформацияОПроцессоре Экспорт; // см. ИнформацияОПроцессоре +&Сериализуемое("ProcessorName") +&Тип("Строка") +Перем ИмяПроцессора; // Строка + +&Сериализуемое("PhysicalProcessorCount") +&Тип("Число") +Перем КоличествоПроцессоров; // Число + +&Сериализуемое("PhysicalCoreCount") +&Тип("Число") +Перем КоличествоЯдер; // Число + +&Сериализуемое("LogicalCoreCount") +&Тип("Число") +Перем КоличествоЛогическихПроцессоров; // Число + Процедура ПриСозданииОбъекта() СистемнаяИнформация = Новый СистемнаяИнформация(); @@ -19,6 +46,8 @@ КонецПроцедуры +#Область ПрограммныйИнтерфейс + Функция ВСтроку() Экспорт Процессор = ИнформацияОПроцессоре.ПолноеОписание(); @@ -35,6 +64,35 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Сериализация + +&ПередСериализацией +Процедура ПередСериализацией() Экспорт + + ИмяПроцессора = ИнформацияОПроцессоре.ИмяПроцессора; + КоличествоПроцессоров = ИнформацияОПроцессоре.КоличествоПроцессоров; + КоличествоЯдер = ИнформацияОПроцессоре.КоличествоЯдер; + КоличествоЛогическихПроцессоров = ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров; + +КонецПроцедуры + +&ПослеДесериализации +Процедура ПослеДесериализации() Экспорт + + ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре(Ложь); + ИнформацияОПроцессоре.ИмяПроцессора = ИмяПроцессора; + ИнформацияОПроцессоре.КоличествоПроцессоров = КоличествоПроцессоров; + ИнформацияОПроцессоре.КоличествоЯдер = КоличествоЯдер; + ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров = КоличествоЛогическихПроцессоров; + +КонецПроцедуры + +#КонецОбласти + Функция ОпределитьВерсию() ПутьКФайлу = ОбъединитьПути(ТекущийСценарий().Каталог, "../../../../packagedef"); @@ -43,3 +101,5 @@ Возврат ИнформацияОПакете.Версия(); КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\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 d16f007..ba3528d 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" @@ -4,27 +4,69 @@ #Использовать fluent #Использовать asserts -Перем Среднее Экспорт; // Число -Перем СтандартноеОтклонение Экспорт; // Число -Перем СтандартнаяОшибкаСреднего Экспорт; // Число -Перем Медиана Экспорт; // Число +&Сериализуемое("OriginalValues") +Перем _ЗамерыВремени; // Массив из Число + +&Сериализуемое("N") +&Тип("Число") +Перем КоличествоИтераций Экспорт; // Число + +&Сериализуемое("Min") +&Тип("Число") Перем Мин Экспорт; // Число -Перем Макс Экспорт; // Число + +&Сериализуемое("Q1") +&Тип("Число") Перем НижнийКвартиль Экспорт; // Число + +&Сериализуемое("Median") +&Тип("Число") +Перем Медиана Экспорт; // Число + +&Сериализуемое("Mean") +&Тип("Число") +Перем Среднее Экспорт; // Число + +&Сериализуемое("Q3") +&Тип("Число") Перем ВерхнийКвартиль Экспорт; // Число + +&Сериализуемое("Max") +&Тип("Число") +Перем Макс Экспорт; // Число + +&Сериализуемое("StdDev") +&Тип("Число") +Перем СтандартноеОтклонение Экспорт; // Число + +&Сериализуемое("StdErr") +&Тип("Число") +Перем СтандартнаяОшибкаСреднего Экспорт; // Число + +&Сериализуемое("Ops") +&Тип("Число") Перем ОперацийВСекунду Экспорт; // Число + +&Сериализуемое("BytesAllocatedPerOperation") +&Тип("Число") Перем ВыделяемаяПамять Экспорт; // Число -Перем _ЗамерыВремени; // Массив из Число +&НеСериализуемое Перем _УпорядоченныеЗамерыВремени; // Массив из Число + +&НеСериализуемое Перем _ЗамерыПамяти; // Массив из Число + +&НеСериализуемое Перем _ИсходныеПоказатели; // Структура + +&НеСериализуемое Перем _ТекущаяЕдиницаВремени; // ЕдиницаИзмеренияБенчмарка // Статистика бенчмарка // // Параметры: -// Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// Замеры - Массив из РезультатИтерацииБенчмаркаДто // - Структура: // * ЗамерыВремени - Массив из Число // * ЗамерыПамяти - Массив из Число @@ -67,7 +109,7 @@ // Читает замеры и формирует статистику // // Параметры: -// Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров +// Замеры - Массив из РезультатИтерацииБенчмаркаДто // - Структура: // * ЗамерыВремени - Массив из Число // * ЗамерыПамяти - Массив из Число @@ -76,7 +118,7 @@ // ЭтотОбъект Функция Прочитать(Замеры) Экспорт - Если ТипЗнч(Замеры) = Тип("ТаблицаЗначений") Тогда + Если ТипЗнч(Замеры) = Тип("Массив") Тогда _ЗамерыВремени = ВыгрузитьЗамеры(Замеры, "НаносекундЗаОперацию", ЭтапыБенчмарка.Измерение); _ЗамерыПамяти = ВыгрузитьЗамеры(Замеры, "ВыделяемаяПамятьЗаОперацию", ЭтапыБенчмарка.Память); ИначеЕсли ТипЗнч(Замеры) = Тип("Структура") Тогда @@ -251,6 +293,24 @@ #Область СлужебныеПроцедурыИФункции +#Область Сериализация + +&Сериализуемое("Percentiles") +Функция ПолучитьПроцентили() Экспорт + + Процентили = Новый Структура("P0, P25, P50, P67, P80, P85, P90, P95, P100"); + + Для Каждого Строка Из Процентили Цикл + Процент = Число(Сред(Строка.Ключ, 2)); + Процентили[Строка.Ключ] = Квантиль(Процент / 100); + КонецЦикла; + + Возврат Процентили; + +КонецФункции + +#КонецОбласти + Процедура Рассчитать() КоличествоИтераций = _ЗамерыВремени.Количество(); @@ -314,10 +374,15 @@ Функция ВыгрузитьЗамеры(Замеры, Колонка, Этап) - Возврат ПроцессорыКоллекций.ИзКоллекции(Замеры) - .Фильтровать("Элемент -> Элемент.Этап = Этап", Новый Структура("Этап", Этап)) - .Получить(Тип("ТаблицаЗначений")) - .ВыгрузитьКолонку(Колонка); + Результат = Новый Массив(); + + Для Каждого Замер Из Замеры Цикл + Если Замер.Этап = Этап Тогда + Результат.Добавить(Замер[Колонка]); + КонецЕсли; + КонецЦикла; + + Возврат Результат; КонецФункции 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 f2b74cd..9966cff 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" @@ -12,12 +12,10 @@ // // Параметры: // РезультатыБенчмарков - см. Бенчмаркинг.Запустить -Процедура Записать(РезультатыБенчмарков) Экспорт +// ПолноеИмяФайла - Строка - Полное имя файла +Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт - КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); - ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); - - _Лог.Отладка("Начало формирования файла: %1", ПутьКФайлу); + _Лог.Отладка("Начало формирования файла: %1", ПолноеИмяФайла); Части = Новый Массив(); Части.Добавить(""); @@ -65,11 +63,11 @@ Части.Добавить(""); Части.Добавить(""); - ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, КодировкаТекста.UTF8); ЗаписьТекста.Записать(СтрСоединить(Части, Символы.ПС)); ЗаписьТекста.Закрыть(); - _Лог.Отладка("Завершение формирования файла: %1", ПутьКФайлу); + _Лог.Отладка("Завершение формирования файла: %1", ПолноеИмяФайла); КонецПроцедуры 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 6651e56..f6d5251 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" @@ -2,13 +2,11 @@ // // Параметры: // РезультатыБенчмарков - см. Бенчмаркинг.Запустить -Процедура Записать(РезультатыБенчмарков) Экспорт - - КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); - ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); +// ПолноеИмяФайла - Строка - Полное имя файла +Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт Сериализатор = Новый СериализаторРезультатовБенчмарков(); - Сериализатор.СериализоватьВ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 4d53d30..64511fc 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" @@ -12,20 +12,18 @@ // // Параметры: // РезультатыБенчмарков - см. Бенчмаркинг.Запустить -Процедура Записать(РезультатыБенчмарков) Экспорт +// ПолноеИмяФайла - Строка - Полное имя файла +Процедура Записать(РезультатыБенчмарков, ПолноеИмяФайла) Экспорт - КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); - ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); - - _Лог.Отладка("Начало формирования файла: %1", ПутьКФайлу); + _Лог.Отладка("Начало формирования файла: %1", ПолноеИмяФайла); - ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8); + ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, КодировкаТекста.UTF8); ЗаписьТекста.ЗаписатьСтроку(РезультатыБенчмарков.СредаОкружения.ВСтроку()); ЗаписьТекста.ЗаписатьСтроку(""); ЗаписьТекста.ЗаписатьСтроку(РезультатыБенчмарков.Отчет.КакMarkdown()); ЗаписьТекста.Закрыть(); - _Лог.Отладка("Завершение формирования файла: %1", ПутьКФайлу); + _Лог.Отладка("Завершение формирования файла: %1", ПолноеИмяФайла); КонецПроцедуры diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os" deleted file mode 100644 index 9f9d369..0000000 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os" +++ /dev/null @@ -1,21 +0,0 @@ -// Экспортирует результаты бенчмарков в XML-файл -// -// Параметры: -// РезультатыБенчмарков - см. Бенчмаркинг.Запустить -Процедура Записать(РезультатыБенчмарков) Экспорт - - КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов(); - ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение()); - - Сериализатор = Новый СериализаторРезультатовБенчмарков(); - Сериализатор.СериализоватьВXML(РезультатыБенчмарков, ПутьКФайлу); - -КонецПроцедуры - -// Расширение файла -// -// Возвращаемое значение: -// Строка -Функция Расширение() Экспорт - Возврат "xml"; -КонецФункции \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" index 421be29..9d689da 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,23 +15,22 @@ // Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков // // Возвращаемое значение: -// Структура: -// * ИмяКласса - Строка - Имя класса -// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков +// РезультатыБенчмарков: +// * СредаОкружения - СредаОкруженияБенчмарков // * Конфигурация - КонфигурацияБенчмарков +// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков // * Отчет - ОтчетБенчмарков -// * СредаОкружения - СредаОкруженияБенчмарков -// * Расшифровка - ТаблицаЗначений: +// * Запуски - Массив из РезультатЗапускаБенчмаркаДто: // ** ДескрипторБенчмарка - ДескрипторБенчмарка // ** Параметры - Массив из ПараметрБенчмарка -// ** Эталон - СтрокаТаблицыЗначений, Неопределено +// ** Эталон - РезультатЗапускаБенчмаркаДто, Неопределено // ** ЭтоЭталон - Булево // ** Статистика - СтатистикаБенчмарка -// ** ИсполняющаяСреда - Структура: +// ** ИсполняющаяСреда - ИсполняющаяСредаБенчмарковДто: // *** Версия - Строка // *** Алиас - Строка // *** Наименование - Строка -// ** Замеры - ТаблицаЗначений: +// ** Замеры - Массив из РезультатИтерацииБенчмаркаДто: // *** Этап - см. ЭтапыБенчмарка // *** НомерИтерации - Число // *** КоличествоОпераций - Число @@ -58,7 +57,6 @@ // ТаблицаЗначений: // * Результат - см. Бенчмаркинг.Запустить // - Неопределено -// * ИмяКласса - Строка - Имя класса // * ИмяФайла - Строка - Имя файла // * ПолноеИмяФайла - Строка - Путь к файлу сценария // * Успешно - Булево - Индикатор корректного выполнения diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\225\320\264\320\270\320\275\320\270\321\206\321\213\320\230\320\267\320\274\320\265\321\200\320\265\320\275\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/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\225\320\264\320\270\320\275\320\270\321\206\321\213\320\230\320\267\320\274\320\265\321\200\320\265\320\275\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" index cd58a0f..d71b3a1 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\225\320\264\320\270\320\275\320\270\321\206\321\213\320\230\320\267\320\274\320\265\321\200\320\265\320\275\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/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\225\320\264\320\270\320\275\320\270\321\206\321\213\320\230\320\267\320\274\320\265\321\200\320\265\320\275\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" @@ -42,8 +42,9 @@ Функция Подобрать(Значение, ЕдиницаИзмерения) Экспорт - ЗначениеБазовое = Конвертировать(Значение, ЕдиницаИзмерения, ЕдиницаИзмерения.Базовая); - Единицы = НайтиПоБазовой(ЕдиницаИзмерения.Базовая); + Базовая = ?(ЕдиницаИзмерения.Базовая = Неопределено, ЕдиницаИзмерения, ЕдиницаИзмерения.Базовая); + ЗначениеБазовое = Конвертировать(Значение, ЕдиницаИзмерения, Базовая); + Единицы = НайтиПоБазовой(Базовая); ПодходящаяЕдиница = Неопределено; Для Каждого Единица Из Единицы Цикл @@ -53,7 +54,7 @@ КонецЦикла; Если ПодходящаяЕдиница = Неопределено Тогда - Возврат ЕдиницаИзмерения.Базовая; + Возврат Базовая; Иначе Возврат ПодходящаяЕдиница; КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index a96b3d2..f918c9b 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -1,12 +1,13 @@ #Использовать annotations #Использовать asserts +#Использовать reflector #Область ПрограммныйИнтерфейс // Извлекает дескрипторы бенчмарков // // Параметры: -// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков // НаборДескрипторов - КоллекцияДескрипторовБенчмарков - Коллекция, в которую будут добавлены извлеченные // дескрипторы бенчмарков // 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 0d0f52e..07aad55 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" @@ -1,11 +1,12 @@ #Использовать annotations +#Использовать reflector #Область ПрограммныйИнтерфейс // Извлекает конфигурацию бенчмарков // // Параметры: -// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков +// ИсточникБенчмарков - Произвольный - Тип или экземпляр класса бенчмарков // Конфигурация - КонфигурацияБенчмарков - Конфигурация, в которую будут записаны данные // // Возвращаемое значение: @@ -33,13 +34,12 @@ ПрочитатьАннотациюМинимальноеКоличествоВызововЗаИтерацию(СвойстваКонструктора, КонфигурацияБенчмарков); ПрочитатьАннотациюСортировка(СвойстваКонструктора, КонфигурацияБенчмарков); ПрочитатьАннотациюМониторингПамяти(СвойстваКонструктора, КонфигурацияБенчмарков); - ПрочитатьАннотацииКолонок(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюКаталогАртефактов(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортMarkdown(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, Конфигурация); + ПрочитатьАннотацииКолонок(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюКаталогАртефактов(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортMarkdown(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, КонфигурацияБенчмарков); КонецЕсли; Для Каждого СвойстваПоля Из ТаблицаСвойств Цикл @@ -47,10 +47,10 @@ ПрочитатьАннотациюИсточникПараметров(СвойстваПоля, КонфигурацияБенчмарков); КонецЦикла; - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередВсеми, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеВсех, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого, РефлекторОбъекта, Конфигурация); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередВсеми, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеВсех, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого, РефлекторОбъекта, КонфигурацияБенчмарков); Возврат КонфигурацияБенчмарков; @@ -281,14 +281,6 @@ КонецПроцедуры -Процедура ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, Конфигурация) - - Если РаботаСАннотациямиБенчмарков.ЕстьАннотация(СвойстваКонструктора, "ЭкспортXml") Тогда - Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Xml); - КонецЕсли; - -КонецПроцедуры - Процедура ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, Конфигурация) Если РаботаСАннотациямиБенчмарков.ЕстьАннотация(СвойстваКонструктора, "ЭкспортHtml") Тогда diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\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" similarity index 96% rename from "src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" rename to "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" index 12a5834..c8c7792 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\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" @@ -3,6 +3,8 @@ Перем _КаталогУстановки; // Строка, Неопределено +#Область ПрограммныйИнтерфейс + // Поиск исполняемого файла OneScript в системе с учетом версии // // Параметры: @@ -101,6 +103,10 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Функция ОпределитьКаталогУстановкиЧерезWhich() Команда = Новый Команда(); @@ -119,4 +125,6 @@ КаталогУстановки = ФС.НормализоватьПуть(ОбъединитьПути(КаталогФайла, "../..")); Возврат КаталогУстановки; -КонецФункции \ No newline at end of file +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\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 ba6d361..f2ee90f 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" @@ -4,6 +4,8 @@ // // Параметры: // Параметры - Массив из ПараметрБенчмарка +// - Массив из Массив из ПараметрБенчмарка +// - Массив из ПараметрыМетодаБенчмарка // // Возвращаемое значение: // Массив из Массив из ПараметрБенчмарка @@ -27,19 +29,23 @@ Для Каждого Параметр Из Параметры Цикл - Если ТипЗнч(Параметр) = Тип("Массив") Тогда + ТипЭлемента = ТипЗнч(Параметр); + Если ТипЭлемента = Тип("ПараметрБенчмарка") Тогда + + Имя = Параметр.Имя; + ЭтоПараметрМетода = Параметр.ЭтоПараметрМетода; + + ИначеЕсли ТипЭлемента = Тип("Массив") Или ТипЭлемента = Тип("ПараметрыМетодаБенчмарка") Тогда + Если Параметр.Количество() = 0 Тогда Продолжить; КонецЕсли; Имя = "_"; - ЭтоПараметрМетода = Параметр[0].ЭтоПараметрМетода; + ЭтоПараметрМетода = ТипЭлемента = Тип("ПараметрыМетодаБенчмарка"); Иначе - - Имя = Параметр.Имя; - ЭтоПараметрМетода = Параметр.ЭтоПараметрМетода; - + ВызватьИсключение СтрШаблон("Не поддерживается тип <%1>", ТипЭлемента); КонецЕсли; Строки = Дерево[ЭтоПараметрМетода]; @@ -68,13 +74,13 @@ КомбинацииПараметров = Новый Массив(); ЭтоПерваяГруппа = Истина; - Для Каждого Параметры Из ГруппыПараметров Цикл + Для Каждого ПараметрыГруппы Из ГруппыПараметров Цикл КоличествоКомбинаций = КомбинацииПараметров.Количество(); ЭтоПервыйПараметр = Истина; - Для Каждого Параметр Из Параметры Цикл + Для Каждого Параметр Из ПараметрыГруппы Цикл Если ЭтоПерваяГруппа Тогда @@ -126,6 +132,10 @@ ДобавитьПараметрыВКомбинацию(Комбинация, Параметр); + ИначеЕсли ТипЗнч(Параметр) = Тип("ПараметрыМетодаБенчмарка") Тогда + + ДобавитьПараметрыВКомбинацию(Комбинация, Параметр.ВМассив()); + Иначе Для Инд = 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.os" new file mode 100644 index 0000000..9c14d01 --- /dev/null +++ "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.os" @@ -0,0 +1,116 @@ +#Область ПрограммныйИнтерфейс + +// Определяет, совпадают ли значения двух объектов по их внутреннему содержанию. +// +// Параметры: +// Значение1 - Произвольный - Первый объект для сравнения +// Значение2 - Произвольный - Второй объект для сравнения +// +// Возвращаемое значение: +// Булево +Функция Совпадают(Значение1, Значение2) Экспорт + + Тип = ТипЗнч(Значение1); + + Если Тип <> ТипЗнч(Значение2) Тогда + Возврат Ложь; + ИначеЕсли Тип = Тип("Массив") Тогда + Возврат МассивыСовпадают(Значение1, Значение2); + ИначеЕсли Тип = Тип("Соответствие") Тогда + Возврат СоответствияСовпадают(Значение1, Значение2); + ИначеЕсли Тип = Тип("Структура") Тогда + Возврат СтруктурыСовпадают(Значение1, Значение2); + ИначеЕсли Тип = Тип("ТаблицаЗначений") Тогда + Возврат ТаблицыСовпадают(Значение1, Значение2); + Иначе + Возврат Значение1 = Значение2; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция МассивыСовпадают(Массив1, Массив2) + + Если Массив1.Количество() <> Массив2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Инд = 0 По Массив1.ВГраница() Цикл + Если Не Совпадают(Массив1[Инд], Массив2[Инд]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция СоответствияСовпадают(Соответствие1, Соответствие2) + + Если Соответствие1.Количество() <> Соответствие2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого КлючЗначение Из Соответствие1 Цикл + Ключ = КлючЗначение.Ключ; + Если Не Совпадают(Соответствие1[Ключ], Соответствие2[КлючЗначение.Ключ]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция СтруктурыСовпадают(Структура1, Структура2) + + Если Структура1.Количество() <> Структура2.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого КлючЗначение Из Структура1 Цикл + Ключ = КлючЗначение.Ключ; + Если Не Структура2.Свойство(Ключ) Тогда + Возврат Ложь; + КонецЕсли; + + Если Не Совпадают(Структура1[Ключ], Структура2[Ключ]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ТаблицыСовпадают(Таблица1, Таблица2) + + Если Таблица1.Количество() <> Таблица2.Количество() + Или Таблица1.Колонки.Количество() <> Таблица2.Колонки.Количество() Тогда + Возврат Ложь; + КонецЕсли; + + Для Каждого Колонка Из Таблица1.Колонки Цикл + Если Таблица2.Колонки.Найти(Колонка.Имя) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Для Инд = 0 По Таблица1.Количество() - 1 Цикл + СтрокаТаблицы1 = Таблица1[Инд]; + СтрокаТаблицы2 = Таблица2[Инд]; + Для Каждого Колонка Из Таблица1.Колонки Цикл + Если Не Совпадают(СтрокаТаблицы1[Колонка.Имя], СтрокаТаблицы2[Колонка.Имя]) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 4615001..b7804c7 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -11,7 +11,7 @@ ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда Представление = ПредставлениеБулево(Значение); Иначе - Представление = Строка(СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Значение)); + Представление = Строка(Значение); КонецЕсли; Если Не ЕдиницаИзмерения = Неопределено И ДополнитьЕдиницейИзмерения Тогда @@ -51,7 +51,9 @@ Функция ПодобратьРазрядностьДробнойЧасти(Знач Значение, ЕдиницаИзмерения = Неопределено) Экспорт - ЭтоВремя = Не ЕдиницаИзмерения = Неопределено И ЕдиницаИзмерения.Базовая = ЕдиницыИзмеренийБенчмарков.Наносекунда; + ЭтоВремя = Не ЕдиницаИзмерения = Неопределено + И (ЕдиницаИзмерения = ЕдиницыИзмеренийБенчмарков.Наносекунда + Или ЕдиницаИзмерения.Базовая = ЕдиницыИзмеренийБенчмарков.Наносекунда); МинимальнаяРазрядность = ?(ЭтоВремя, 1, 0); МаксимальнаяРазрядность = 4; diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" index 0f6d80d..5a6d866 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" @@ -1,63 +1,85 @@ -Перем _СериализуемыеТипы; // Неопределено, Соответствие +#Использовать "../../custom-jason" + +Перем _ПримитивныеТипы; // МножествоСоответствие, Неопределено #Область ПрограммныйИнтерфейс -// Подготавливает значение для безопасной сериализации или вывода. +// Сериализует переданное значение в строку JSON. +// +// Параметры: +// Значение - Произвольный - Значение, которое требуется сериализовать в JSON. +// +// Возвращаемое значение: +// Строка - Строка JSON +Функция ВJson(Значение) Экспорт + + Сериализатор = Новый СериализаторJsonBench(); + Возврат Сериализатор.Сериализовать(Значение); + +КонецФункции + +// Десериализует строку JSON в объект указанного типа. +// +// Параметры: +// Json - Строка - Строка JSON. +// ТипОбъекта - Тип - Тип объекта, в который необходимо выполнить десериализацию. +// +// Возвращаемое значение: +// Произвольный - Экземпляр объекта указанного типа. +Функция ИзJson(Json, ТипОбъекта) Экспорт + + Десериализатор = Новый ДесериализаторJsonBench(); + Возврат Десериализатор.Десериализовать(Json, ТипОбъекта); + +КонецФункции + +// Подготавливает значение для безопасного вывода. // // Параметры: // Значение - Произвольный - Любое значение для обработки // // Возвращаемое значение: -// Произвольный - Обработанное значение по правилам: -// 1. Для сериализуемых типов (число, строка, булево и др.) - исходное значение -// 2. Для несериализуемых типов: -// а) Если строковое представление совпадает с именем типа - "Тип@ХешКод" -// б) Иначе - обычное строковое представление -Функция ПодготовитьЗначение(Значение) Экспорт - - Если ЗначениеСериализуется(Значение) Тогда - Возврат Значение; - КонецЕсли; +// Произвольный +Функция ПривестиКПримитиву(Значение) Экспорт - Представление = Строка(Значение); - Тип = ТипЗнч(Значение); - Если Представление = Строка(Тип) Тогда - Представление = СтрШаблон("%1@%2", Тип, Новый РасширениеОбъекта(Значение).ХешКод); + Если ЭтоПримитив(Значение) Тогда + Возврат Значение; КонецЕсли; - Возврат Представление; + Возврат Строка(Значение); КонецФункции -// Проверяет, относится ли значение к сериализуемым типам данных +// Проверяет, относится ли значение к примитивным типам данных. // // Параметры: // Значение - Произвольный - Проверяемое значение // // Возвращаемое значение: // Булево -Функция ЗначениеСериализуется(Значение) Экспорт - Возврат СериализуемыеТипы()[ТипЗнч(Значение)] = Истина; +Функция ЭтоПримитив(Значение) Экспорт + Возврат ПримитивныеТипы().Содержит(ТипЗнч(Значение)); КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции -Функция СериализуемыеТипы() +Функция ПримитивныеТипы() - Если Не _СериализуемыеТипы = Неопределено Тогда - Возврат _СериализуемыеТипы; + Если Не _ПримитивныеТипы = Неопределено Тогда + Возврат _ПримитивныеТипы; КонецЕсли; - _СериализуемыеТипы = Новый Соответствие(); - _СериализуемыеТипы.Вставить(Тип("Число"), Истина); - _СериализуемыеТипы.Вставить(Тип("Строка"), Истина); - _СериализуемыеТипы.Вставить(Тип("Булево"), Истина); - _СериализуемыеТипы.Вставить(Тип("Дата"), Истина); - _СериализуемыеТипы.Вставить(Тип("Неопределено"), Истина); + _ПримитивныеТипы = Новый МножествоСоответствие(); + _ПримитивныеТипы.Добавить(Тип("Число")); + _ПримитивныеТипы.Добавить(Тип("Строка")); + _ПримитивныеТипы.Добавить(Тип("Булево")); + _ПримитивныеТипы.Добавить(Тип("Дата")); + _ПримитивныеТипы.Добавить(Тип("Неопределено")); + _ПримитивныеТипы.Добавить(Тип("Null")); - Возврат _СериализуемыеТипы; + Возврат _ПримитивныеТипы; КонецФункции diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\321\213\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\321\213\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 40a4003..8808e67 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\321\213\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\321\213\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" @@ -3,10 +3,8 @@ Перем Markdown Экспорт; Перем Json Экспорт; -Перем Xml Экспорт; Перем Html Экспорт; Markdown = Новый ЭкспортерРезультатовБенчмарковВMarkdown(); Json = Новый ЭкспортерРезультатовБенчмарковВJson(); -Xml = Новый ЭкспортерРезультатовБенчмарковВXml(); Html = Новый ЭкспортерРезультатовБенчмарковВHtml(); \ No newline at end of file diff --git "a/src/BenchmarkOneScript/custom-jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" "b/src/BenchmarkOneScript/custom-jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" new file mode 100644 index 0000000..c132417 --- /dev/null +++ "b/src/BenchmarkOneScript/custom-jason/\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\235\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" @@ -0,0 +1,9 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) +// +// Поле, помеченное аннотацией &Несериализуемое, не будет включено в результирующую +// JSON-строку. +// +&Аннотация("Несериализуемое") +Процедура ПриСозданииОбъекта() +КонецПроцедуры \ No newline at end of file diff --git "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" new file mode 100644 index 0000000..8759389 --- /dev/null +++ "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\320\276\320\265.os" @@ -0,0 +1,18 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) +// +// Поле, помеченное аннотацией &Сериализуемое, будет включено в результирующую +// JSON-строку. +// +// По умолчанию все заполненные поля объекта, не помеченные аннотацией &Несериализуемое, +// сериализуются. +// Вы можете переопределить дополнительные параметры сериализации с помощью аннотации +// &Сериализуемое. +// +// Параметры: +// Значение - Строка- имя свойства в JSON (переименование) +// Обязательное - Булево - включать поле даже при значении Неопределено +// +&Аннотация("Сериализуемое") +Процедура ПриСозданииОбъекта(Значение = "", Обязательное = Ложь) +КонецПроцедуры diff --git "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" new file mode 100644 index 0000000..49d7ea9 --- /dev/null +++ "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\321\203\320\265\320\274\321\213\320\271\320\232\320\273\321\216\321\207.os" @@ -0,0 +1,10 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) +// +// Параметры: +// Значение - Строка - Первый параметр аннотации задаёт имя сериализуемого ключа, +// а второй - имя ключа в JSON. +// +&Аннотация("СериализуемыйКлюч") +Процедура ПриСозданииОбъекта(Значение) +КонецПроцедуры diff --git "a/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" new file mode 100644 index 0000000..0d8fc96 --- /dev/null +++ "b/src/BenchmarkOneScript/custom-jason/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200JsonBench.os" @@ -0,0 +1,356 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) + +#Использовать annotations +#Использовать validate + +#Область ОписаниеПеременных + +// Лог +// +Перем Лог; + +// Рефлектор +// +Перем Рефлектор; + +// Множество - список известных пользовательских типов +// +Перем КэшИзвестныхТипов; + +// Множество - список примитивных типов +// +Перем ПримитивныеТипы; + +// Соответствие - Пользовательские конвертеры для типа +// +Перем Конвертеры; + +#КонецОбласти + +#Область Конструктор + +Процедура ПриСозданииОбъекта(пКонвертеры = Неопределено) + + Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ДесериализаторJson"); + Рефлектор = Новый Рефлектор(); + + КэшИзвестныхТипов = Новый МножествоСоответствие; + ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)); + Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл + КэшИзвестныхТипов.Добавить(ИзвестныйТип.Значение); + КонецЦикла; + + ПримитивныеТипы = Новый МножествоСоответствие; + ПримитивныеТипы.Добавить(Тип("Строка")); + ПримитивныеТипы.Добавить(Тип("Булево")); + ПримитивныеТипы.Добавить(Тип("Дата")); + ПримитивныеТипы.Добавить(Тип("Число")); + ПримитивныеТипы.Добавить(Тип("Null")); + ПримитивныеТипы.Добавить(Тип("Неопределено")); + + Если пКонвертеры = Неопределено Тогда + Конвертеры = Новый Соответствие(); + Иначе + Конвертеры = пКонвертеры; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Десериализация JSON-строки в объект. +// +// Параметры: +// Строка - Строка - JSON-строка, которую необходимо десериализовать. +// Поддерживаются объекты, массивы и примитивы. +// ТипОбъекта - Тип - Тип, в который нужно десериализовать JSON-строку (необязателен). +// ЧитатьВСоответствие - Булево - если Истина, чтение нетипизированного объекта JSON будет выполнено в `Соответствие`. +// Если Ложь, нетипизированные объекты будут считываться в объект типа `Структура`. +// Значение по умолчанию: Ложь +// Возвращаемое значение: +// Произвольный - Если тип не задан, возвращается значение, прочитанное платформенным методом ПрочитатьJSON; +// иначе преобразованный объект целевого типа. +// +Функция Десериализовать(Строка, ТипОбъекта = Неопределено, ЧитатьВСоответствие = Ложь) Экспорт + + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.УстановитьСтроку(Строка); + + ДесериализованныйОбъект = ПрочитатьJSON(ЧтениеJSON, ЧитатьВСоответствие); + ЧтениеJSON.Закрыть(); + + // Если тип не задан - возвращаем прочитанный объект как есть + Если ТипОбъекта = Неопределено Тогда + Возврат ДесериализованныйОбъект; + КонецЕсли; + + Объект = ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, ТипОбъекта); + + Возврат Объект; + +КонецФункции + +Функция ПреобразоватьОбъектДесериализации(ДесериализованныйОбъект, + ТипОбъекта, ТипЭлементов = Неопределено, ДесериализуемыеКлючи = Неопределено) Экспорт + + Если Конвертеры[ТипОбъекта] <> Неопределено Тогда + Возврат Конвертеры[ТипОбъекта].ПреобразоватьОбъектДесериализации(ЭтотОбъект, ДесериализованныйОбъект); + ИначеЕсли ЭтоПримитивныйТип(ТипОбъекта) Тогда + Возврат ПреобразоватьПримитивныйТип(ДесериализованныйОбъект, ТипОбъекта); + ИначеЕсли ТипОбъекта = Тип("Массив") Тогда + Возврат ПреобразоватьМассив(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); + ИначеЕсли ТипОбъекта = Тип("Соответствие") Тогда + Возврат ПреобразоватьОбъект(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); + ИначеЕсли ТипОбъекта = Тип("Структура") Тогда + Возврат ПреобразоватьОбъект(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов); + ИначеЕсли ТипОбъекта = Тип("ТаблицаЗначений") Тогда + Возврат ПреобразоватьТаблицуЗначений(ДесериализованныйОбъект, ТипОбъекта, ТипЭлементов, ДесериализуемыеКлючи); + ИначеЕсли ТипОбъекта = Тип("Тип") Тогда + Возврат ПреобразоватьТип(ДесериализованныйОбъект); + ИначеЕсли ЭтоПользовательскийТип(ТипОбъекта) Тогда + Возврат ПреобразоватьПользовательскийТип(ДесериализованныйОбъект, ТипОбъекта); + Иначе + Лог.Предупреждение("Неизвестный тип объекта: %1", ТипОбъекта); + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЭтоПримитивныйТип(ТипОбъекта) + Возврат ПримитивныеТипы.Содержит(ТипОбъекта); +КонецФункции + +Функция ЭтоПользовательскийТип(ТипОбъекта) + Возврат КэшИзвестныхТипов.Содержит(ТипОбъекта); +КонецФункции + +Функция ПреобразоватьПримитивныйТип(Объект, ТипОбъекта) + Возврат Объект; +КонецФункции + +Функция ПреобразоватьТип(Объект) + Возврат Тип(Объект); +КонецФункции + +Функция ПреобразоватьМассив(Объект, ТипОбъекта, ТипЭлементов) + + Результат = Новый Массив; + + Для Каждого Элемент Из Объект Цикл + ОжидаемыйТип = ?(ЗначениеЗаполнено(ТипЭлементов), ТипЭлементов, ТипЗнч(Элемент)); + ПреобразованныйЭлемент = ПреобразоватьОбъектДесериализации(Элемент, ОжидаемыйТип); + Результат.Добавить(ПреобразованныйЭлемент); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьТаблицуЗначений(Объект, ТипОбъекта, ТипЭлементов, ДесериализуемыеКлючи) + + Если Объект.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый ТаблицаЗначений; + ДобавленныеКолонки = Новый МножествоСоответствие; + + Для Каждого ЗначенияКолонок Из Объект Цикл + + Если Не ЭтоСтруктураИлиСоответствие(ЗначенияКолонок) Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = Результат.Добавить(); + Для Каждого КлючИЗначение Из ЗначенияКолонок Цикл + + ИмяКолонки = КлючИЗначение.Ключ; + ЗначениеКолонки = КлючИЗначение.Значение; + + Если ДесериализуемыеКлючи.Свойство(ИмяКолонки) Тогда + ИмяКолонки = ДесериализуемыеКлючи[ИмяКолонки]; + КонецЕсли; + + Если Не ДобавленныеКолонки.Содержит(ИмяКолонки) Тогда + Результат.Колонки.Добавить(ИмяКолонки); + ДобавленныеКолонки.Добавить(ИмяКолонки); + КонецЕсли; + + ПреобразованныйЭлемент = ПреобразоватьОбъектДесериализации(ЗначениеКолонки, ТипЗнч(ЗначениеКолонки)); + СтрокаТаблицы[ИмяКолонки] = ПреобразованныйЭлемент; + + КонецЦикла; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьОбъект(Объект, ТипОбъекта, ТипЭлементов) + + Результат = Новый(ТипОбъекта); + + Для Каждого КлючИЗначение Из Объект Цикл + ОжидаемыйТип = ?(ЗначениеЗаполнено(ТипЭлементов), ТипЭлементов, ТипЗнч(КлючИЗначение.Значение)); + ПреобразованноеЗначение = ПреобразоватьОбъектДесериализации(КлючИЗначение.Значение, ОжидаемыйТип); + Результат.Вставить(КлючИЗначение.Ключ, ПреобразованноеЗначение); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьПользовательскийТип(Объект, ТипОбъекта) + + Результат = Новый(ТипОбъекта); + СвойстваОбъекта = Рефлектор.ПолучитьТаблицуСвойств(ТипОбъекта, Истина); + СвойстваПоИменамПолей = Новый Соответствие(); + + Для Каждого Свойство Из СвойстваОбъекта Цикл + АннотацияСериализуемое = РаботаСАннотациями.ПолучитьАннотацию(Свойство, "Сериализуемое"); + ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Значение", Свойство.Имя); + + СвойстваПоИменамПолей.Вставить(ИмяСвойства, Свойство); + КонецЦикла; + + Если ЭтоСтруктураИлиСоответствие(Объект) Тогда + + Для Каждого КлючИЗначение Из Объект Цикл + + Свойство = СвойстваПоИменамПолей[КлючИЗначение.Ключ]; + Если Свойство = Неопределено Тогда + Продолжить; + КонецЕсли; + + ИмяСвойства = Свойство.Имя; + ЗначениеСвойства = КлючИЗначение.Значение; + + ТипыСвойства = ПолучитьТипыСвойства(Свойство, ЗначениеСвойства); + ТипСвойства = ТипыСвойства.БазовыйТип; + ТипЭлементов = ТипыСвойства.ТипЭлементов; + + ДесериализуемыеКлючи = ПолучитьДесериализуемыеКлючи(Свойство); + ЗначениеСвойства = ПреобразоватьОбъектДесериализации(ЗначениеСвойства, + ТипСвойства, + ТипЭлементов, + ДесериализуемыеКлючи); + + Если ЗначениеСвойства = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ТипСвойства <> ТипЗнч(ЗначениеСвойства) Тогда + Лог.Ошибка("Тип свойства '%1' не соответствует ожидаемому типу '%2'", ТипЗнч(ЗначениеСвойства), ТипСвойства); + Продолжить; + КонецЕсли; + + Рефлектор.УстановитьСвойство(Результат, ИмяСвойства, ЗначениеСвойства); + + КонецЦикла; + + КонецЕсли; + + ВызватьМетодПослеДесериализации(Результат, Объект); + + Возврат Результат; + +КонецФункции + +Функция ПолучитьТипыСвойства(Свойство, ЗначениеСвойства) + + ОписаниеСвойства = Новый Структура(); + ОписаниеСвойства.Вставить("БазовыйТип", ТипЗнч(ЗначениеСвойства)); + ОписаниеСвойства.Вставить("ТипЭлементов"); + + КонтейнерАннотаций = Новый КонтейнерАннотаций; + КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияТип")); + КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияДляКаждого")); + + ТекущийРежимДляКаждого = Неопределено; + + Для Каждого Аннотация Из Свойство.Аннотации Цикл + + ОпределениеАннотации = КонтейнерАннотаций.ПолучитьОпределениеАннотации(Аннотация.Имя); + Если ОпределениеАннотации = Неопределено Тогда + Продолжить; + КонецЕсли; + + ОбъектАннотации = ОпределениеАннотации.СоздатьОбъектАннотации(Аннотация); + + // Директива &ДляКаждого - переключает режим обхода + Если ТипЗнч(ОбъектАннотации) = Тип("АннотацияДляКаждого") Тогда + + ТекущийРежимДляКаждого = ОбъектАннотации.Режим(); + + ИначеЕсли ТипЗнч(ОбъектАннотации) = Тип("АннотацияТип") Тогда + + ТипСвойства = ОбъектАннотации.ТипЗначения(); + + Если ТекущийРежимДляКаждого = Неопределено Тогда + ОписаниеСвойства.БазовыйТип = ТипСвойства; + ИначеЕсли ТекущийРежимДляКаждого = "Значение" Тогда + ОписаниеСвойства.ТипЭлементов = ТипСвойства; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Возврат ОписаниеСвойства; + +КонецФункции + +Функция ПолучитьДесериализуемыеКлючи(СвойствоОбъекта) + + ДесериализуемыеКлючи = Новый Структура(); + + АннотацииСериализуемыеКлючи = РаботаСАннотациями.НайтиАннотации(СвойствоОбъекта.Аннотации, "СериализуемыйКлюч"); + Для Каждого Аннотация Из АннотацииСериализуемыеКлючи Цикл + КоличествоПараметров = Аннотация.Параметры.Количество(); + Если КоличествоПараметров > 1 Тогда + ДесериализуемыеКлючи.Вставить(Аннотация.Параметры[1].Значение, Аннотация.Параметры[0].Значение); + КонецЕсли; + КонецЦикла; + + Возврат ДесериализуемыеКлючи; + +КонецФункции + +Процедура ВызватьМетодПослеДесериализации(ПользовательскийОбъект, ПрочитанныеСвойства) + + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(ПользовательскийОбъект)); + + Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл + + АннотацияПослеДесериализации = РаботаСАннотациями.НайтиАннотацию(СвойстваМетода.Аннотации, "ПослеДесериализации"); + Если АннотацияПослеДесериализации = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПараметрыМетода = Новый Массив(); + + Если СвойстваМетода.КоличествоПараметров = 1 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ИначеЕсли СвойстваМетода.КоличествоПараметров = 2 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ПараметрыМетода.Добавить(ПрочитанныеСвойства); + КонецЕсли; + + Рефлектор.ВызватьМетод(ПользовательскийОбъект, СвойстваМетода.Имя, ПараметрыМетода); + + КонецЦикла; + +КонецПроцедуры + +Функция ЭтоСтруктураИлиСоответствие(Значение) + Возврат ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Соответствие"); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git "a/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" "b/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" new file mode 100644 index 0000000..7bed787 --- /dev/null +++ "b/src/BenchmarkOneScript/custom-jason/\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\200JsonBench.os" @@ -0,0 +1,329 @@ +// Copyright © 2025 Nikita Fedkin (nixel2007@gmail.com). +// Адаптированная версия библиотеки jason (https://github.com/nixel2007/jason) + +#Использовать annotations +#Использовать logos +#Использовать collectionos + +#Область ОписаниеПеременных + +// Лог +// +Перем Лог; + +// Рефлектор +// +Перем Рефлектор; + +// Множество - список известных пользовательских типов +// +Перем КэшИзвестныхТипов; + +// Множество - список примитивных типов +// +Перем ПримитивныеТипы; + +// Соответствие - Пользовательские конвертеры для типа +// +Перем Конвертеры; + +#КонецОбласти + +#Область Конструктор + +Процедура ПриСозданииОбъекта(пКонвертеры = Неопределено) + + Рефлектор = Новый Рефлектор(); + Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторJson"); + + КэшИзвестныхТипов = Новый МножествоСоответствие; + ИзвестныеТипы = Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)); + Для Каждого ИзвестныйТип Из ИзвестныеТипы Цикл + КэшИзвестныхТипов.Добавить(ИзвестныйТип.Значение); + КонецЦикла; + + ПримитивныеТипы = Новый МножествоСоответствие; + ПримитивныеТипы.Добавить(Тип("Строка")); + ПримитивныеТипы.Добавить(Тип("Булево")); + ПримитивныеТипы.Добавить(Тип("Дата")); + ПримитивныеТипы.Добавить(Тип("Число")); + ПримитивныеТипы.Добавить(Тип("Null")); + ПримитивныеТипы.Добавить(Тип("Неопределено")); + + Если пКонвертеры = Неопределено Тогда + Конвертеры = Новый Соответствие(); + Иначе + Конвертеры = пКонвертеры; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Сериализация объекта в JSON-строку. +// +// Параметры: +// Объект - Произвольный - Сериализуемый объект. Поддерживаются пользовательские классы, +// коллекции и примитивы. +// Возвращаемое значение: +// Строка +// +Функция Сериализовать(Объект) Экспорт + + ОбъектСериализации = ПреобразоватьОбъектСериализации(Объект); + + Запись = Новый ЗаписьJSON(); + Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, Символы.Таб)); + ЗаписатьJSON(Запись, ОбъектСериализации); + + Возврат Запись.Закрыть(); + +КонецФункции + +Функция ПреобразоватьОбъектСериализации(Объект, СериализуемыеКлючи = Неопределено) Экспорт + + ТипОбъекта = ТипЗнч(Объект); + + Если Конвертеры[ТипОбъекта] <> Неопределено Тогда + Результат = Конвертеры[ТипОбъекта].ПреобразоватьОбъектСериализации(ЭтотОбъект, Объект); + ИначеЕсли ТипОбъекта = Тип("Массив") Тогда + Результат = ПреобразоватьМассив(Объект); + ИначеЕсли ТипОбъекта = Тип("Структура") ИЛИ ТипОбъекта = Тип("Соответствие") Тогда + Результат = ПреобразоватьСтруктуру(Объект); + ИначеЕсли ТипОбъекта = Тип("ТаблицаЗначений") Тогда + Результат = ПреобразоватьТаблицуЗначений(Объект, СериализуемыеКлючи); + ИначеЕсли ЭтоПримитивныйТип(ТипОбъекта) Тогда + Результат = ПреобразоватьПримитивныйТип(Объект); + ИначеЕсли ТипОбъекта = Тип("Тип") Тогда + Результат = ПреобразоватьТип(Объект); + Иначе + Результат = ПреобразоватьКомплексныйТип(Объект); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЭтоПримитивныйТип(ТипОбъекта) + Возврат ПримитивныеТипы.Содержит(ТипОбъекта); +КонецФункции + +Функция ПреобразоватьМассив(Массив) + Результат = Новый Массив; + + Для Каждого Элемент Из Массив Цикл + ПреобразованныйЭлемент = ПреобразоватьОбъектСериализации(Элемент); + Результат.Добавить(ПреобразованныйЭлемент); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ПреобразоватьСтруктуру(Структура) Экспорт + Результат = Новый Соответствие(); + + Для Каждого Элемент Из Структура Цикл + ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(Элемент.Значение); + Результат.Вставить(Элемент.Ключ, ПреобразованноеЗначение); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ПреобразоватьТаблицуЗначений(ТаблицаЗначений, СериализуемыеКлючи = Неопределено) Экспорт + + Результат = Новый Массив(); + + Если СериализуемыеКлючи = Неопределено Тогда + СериализуемыеКлючи = Новый Структура(); + КонецЕсли; + + СериализоватьВсеКолонки = СериализуемыеКлючи.Количество() = 0; + + Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл + + ЗначенияКолонок = Новый Структура(); + + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + + Если СериализуемыеКлючи.Свойство(Колонка.Имя) Тогда + ИмяКлюча = СериализуемыеКлючи[Колонка.Имя]; + ИначеЕсли СериализоватьВсеКолонки Тогда + ИмяКлюча = Колонка.Имя; + Иначе + Продолжить; + КонецЕсли; + + ПреобразованноеЗначение = ПреобразоватьОбъектСериализации(СтрокаТаблицы[Колонка.Имя]); + ЗначенияКолонок.Вставить(ИмяКлюча, ПреобразованноеЗначение); + + КонецЦикла; + + Результат.Добавить(ЗначенияКолонок); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ПреобразоватьПримитивныйТип(Объект) Экспорт + Возврат Объект; +КонецФункции + +Функция ПреобразоватьТип(Объект) Экспорт + Возврат Строка(Объект); +КонецФункции + +Функция ПреобразоватьКомплексныйТип(Объект) Экспорт + + ТипОбъекта = ТипЗнч(Объект); + + ЭтоПользовательскийТип = КэшИзвестныхТипов.Содержит(ТипОбъекта); + + Если НЕ ЭтоПользовательскийТип Тогда + Лог.Предупреждение("Неизвестный тип объекта для преобразования: %1", ТипОбъекта); + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Соответствие(); + + СтандартнаяОбработка = Истина; + ВызватьМетодПередСериализацией(Объект, Результат, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + ПрочитатьСериализуемыеПоля(Объект, Результат); + ПрочитатьДополнительныеПоля(Объект, Результат); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ВызватьМетодПередСериализацией(Объект, Результат, СтандартнаяОбработка) + + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(Объект)); + + Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл + + АннотацияПередСериализацией = РаботаСАннотациями.НайтиАннотацию(СвойстваМетода.Аннотации, "ПередСериализацией"); + Если АннотацияПередСериализацией = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПараметрыМетода = Новый Массив(); + + Если СвойстваМетода.КоличествоПараметров = 1 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ИначеЕсли СвойстваМетода.КоличествоПараметров = 2 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ПараметрыМетода.Добавить(Результат); + ИначеЕсли СвойстваМетода.КоличествоПараметров = 3 Тогда + ПараметрыМетода.Добавить(ЭтотОбъект); + ПараметрыМетода.Добавить(Результат); + ПараметрыМетода.Добавить(СтандартнаяОбработка); + КонецЕсли; + + Рефлектор.ВызватьМетод(Объект, СвойстваМетода.Имя, ПараметрыМетода); + + Если СвойстваМетода.КоличествоПараметров >= 2 Тогда + Результат = ПараметрыМетода[1]; + КонецЕсли; + + Если СвойстваМетода.КоличествоПараметров >= 3 Тогда + СтандартнаяОбработка = ПараметрыМетода[2]; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПрочитатьСериализуемыеПоля(Объект, Результат) + + СвойстваОбъекта = Рефлектор.ПолучитьТаблицуСвойств(ТипЗнч(Объект), Истина); + + Для Каждого СвойствоОбъекта Из СвойстваОбъекта Цикл + // Проверяем, не помечено ли поле как несериализуемое + Несериализуемое = РаботаСАннотациями.НайтиАннотацию(СвойствоОбъекта.Аннотации, "Несериализуемое"); + Если Несериализуемое <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Обязательное = Ложь; + ИмяСвойства = СвойствоОбъекта.Имя; + АннотацияСериализуемое = РаботаСАннотациями.НайтиАннотацию(СвойствоОбъекта.Аннотации, "Сериализуемое"); + Если АннотацияСериализуемое <> Неопределено Тогда + ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, + "Значение", + СвойствоОбъекта.Имя); + + Обязательное = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, + "Обязательное", + Обязательное); + КонецЕсли; + + СериализуемыеКлючи = ПолучитьСериализуемыеКлючи(СвойствоОбъекта); + + ЗначениеСвойства = Рефлектор.ПолучитьСвойство(Объект, СвойствоОбъекта.Имя); + ЗначениеСвойства = ПреобразоватьОбъектСериализации(ЗначениеСвойства, СериализуемыеКлючи); + Если Обязательное ИЛИ ЗначениеСвойства <> Неопределено Тогда + Результат.Вставить(ИмяСвойства, ЗначениеСвойства); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПрочитатьДополнительныеПоля(Объект, Результат) + + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(Объект)); + + Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл + + АннотацияСериализуемое = РаботаСАннотациями.НайтиАннотацию(СвойстваМетода.Аннотации, "Сериализуемое"); + Если АннотацияСериализуемое = Неопределено Тогда + Продолжить; + КонецЕсли; + + ИмяСвойства = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Значение", ""); + Если Не ЗначениеЗаполнено(ИмяСвойства) Тогда + Продолжить; + КонецЕсли; + + Обязательное = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияСериализуемое, "Обязательное", Ложь); + + ЗначениеСвойства = Рефлектор.ВызватьМетод(Объект, СвойстваМетода.Имя); + ЗначениеСвойства = ПреобразоватьОбъектСериализации(ЗначениеСвойства); + Если Обязательное ИЛИ ЗначениеСвойства <> Неопределено Тогда + Результат.Вставить(ИмяСвойства, ЗначениеСвойства); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьСериализуемыеКлючи(СвойствоОбъекта) + + СериализуемыеКлючи = Новый Структура(); + + АннотацииСериализуемыеКлючи = РаботаСАннотациями.НайтиАннотации(СвойствоОбъекта.Аннотации, "СериализуемыйКлюч"); + Для Каждого Аннотация Из АннотацииСериализуемыеКлючи Цикл + КоличествоПараметров = Аннотация.Параметры.Количество(); + Если КоличествоПараметров = 1 Тогда + СериализуемыеКлючи.Вставить(Аннотация.Параметры[0].Значение, Аннотация.Параметры[0].Значение); + ИначеЕсли КоличествоПараметров > 1 Тогда + СериализуемыеКлючи.Вставить(Аннотация.Параметры[0].Значение, Аннотация.Параметры[1].Значение); + КонецЕсли; + КонецЦикла; + + Возврат СериализуемыеКлючи; + +КонецФункции + +#КонецОбласти \ 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\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" new file mode 100644 index 0000000..eff176b --- /dev/null +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" @@ -0,0 +1,21 @@ +// BSLLS:ExportVariables-off + +&Сериализуемое("Version") +&Тип("Строка") +Перем Версия Экспорт; // Строка + +&Сериализуемое("Alias") +&Тип("Строка") +Перем Алиас Экспорт; // Строка + +&Сериализуемое("Name") +&Тип("Строка") +Перем Наименование Экспорт; // Строка + +Процедура ПриСозданииОбъекта() + + Версия = ""; + Алиас = ""; + Наименование = ""; + +КонецПроцедуры \ 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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" new file mode 100644 index 0000000..600a431 --- /dev/null +++ "b/src/BenchmarkOneScript/dto/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\224\321\202\320\276.os" @@ -0,0 +1,14 @@ +// BSLLS:ExportVariables-off + +&Сериализуемое("BenchmarkDescriptors") +&Тип("КоллекцияДескрипторовБенчмарков") +Перем ДескрипторыБенчмарков Экспорт; // КоллекцияДескрипторовБенчмарков + +&Сериализуемое("Configuration") +&Тип("КонфигурацияБенчмарков") +Перем Конфигурация Экспорт; // КонфигурацияБенчмарков + +Процедура ПриСозданииОбъекта() + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(); + Конфигурация = Новый КонфигурацияБенчмарков(); +КонецПроцедуры \ 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" new file mode 100644 index 0000000..53962e7 --- /dev/null +++ "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" @@ -0,0 +1,123 @@ +// BSLLS:UnusedLocalVariable-off +// BSLLS:ExportVariables-off + +&Несериализуемое +Перем ДескрипторБенчмарка Экспорт; // ДескрипторБенчмарка + +&Сериализуемое("Type") +&Тип("Тип") +Перем Тип; // Тип + +&Сериализуемое("Method") +&Тип("Строка") +Перем Метод; // Строка + +&Сериализуемое("Category") +&Тип("Строка") +Перем Категория; // Строка + +&Несериализуемое +Перем Параметры Экспорт; // Массив из ПараметрБенчмарка + +&Несериализуемое +Перем Эталон Экспорт; // РезультатЗапускаБенчмаркаДто, Неопределено + +&Сериализуемое("Baseline") +&Тип("Булево") +Перем ЭтоЭталон Экспорт; // Булево + +&Сериализуемое("Statistics") +&Тип("СтатистикаБенчмарка") +Перем Статистика Экспорт; // СтатистикаБенчмарка + +&Сериализуемое("Runtime") +&Тип("ИсполняющаяСредаБенчмарковДто") +Перем ИсполняющаяСреда Экспорт; // ИсполняющаяСредаБенчмарковДто + +&Сериализуемое("Measurements") +&Тип("Массив") +&ДляКаждого +&Тип("РезультатИтерацииБенчмаркаДто") +Перем Замеры Экспорт; // Массив из РезультатИтерацииБенчмаркаДто + +Процедура ПриСозданииОбъекта() + + Метод = ""; + Категория = ""; + Параметры = Новый Массив(); + ЭтоЭталон = Ложь; + Статистика = Новый СтатистикаБенчмарка(); + ИсполняющаяСреда = Новый ИсполняющаяСредаБенчмарковДто(); + Замеры = Новый Массив(); + +КонецПроцедуры + +#Область СлужебныеПроцедурыИФункции + +#Область Сериализация + +&ПередСериализацией +Процедура ПередСериализацией() Экспорт + + Тип = ДескрипторБенчмарка.ТипОбъекта(); + Метод = ДескрипторБенчмарка.Метод(); + Категория = ДескрипторБенчмарка.Категория(); + +КонецПроцедуры + +&ПослеДесериализации +Процедура ПослеДесериализации(Десериализатор, ПрочитанныеСвойства) Экспорт + + ДесериализоватьПараметры(ПрочитанныеСвойства); + +КонецПроцедуры + +&Сериализуемое("Parameters") +Функция ПолучитьПодготовленныеКСериализацииПараметры() Экспорт + + ПодготовленныеПараметры = Новый Структура(); + + Для Каждого Параметр Из Параметры Цикл + Значение = СериализацияОбъектовБенчмаркинга.ПривестиКПримитиву(Параметр.Значение); + ПодготовленныеПараметры.Вставить(Параметр.Имя, Значение); + КонецЦикла; + + Возврат ПодготовленныеПараметры; + +КонецФункции + +Процедура ДесериализоватьПараметры(ПрочитанныеСвойства) + + ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Тип, Метод); + + Если ПрочитанныеСвойства.Свойство("Category") Тогда + ДескрипторБенчмарка.УстановитьКатегорию(ПрочитанныеСвойства["Category"]); + КонецЕсли; + + Если ПрочитанныеСвойства.Свойство("Baseline") Тогда + ДескрипторБенчмарка.ИспользоватьКакЭталон(ПрочитанныеСвойства["Baseline"]); + КонецЕсли; + + Если ПрочитанныеСвойства.Свойство("Parameters") Тогда + ИменаПараметровБенчмарка = ДескрипторБенчмарка.ИменаПараметров(); + КоличествоПараметров = ИменаПараметровБенчмарка.Количество(); + + Для Каждого ДанныеПараметр Из ПрочитанныеСвойства["Parameters"] Цикл + + Имя = ДанныеПараметр.Ключ; + Значение = ДанныеПараметр.Значение; + + ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя); + ЭтоПараметрМетода = Не ИндексПараметра = Неопределено; + + ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода); + Параметры.Добавить(ПараметрБенчмарка); + + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти \ 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\230\321\202\320\265\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\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\230\321\202\320\265\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\260\320\224\321\202\320\276.os" new file mode 100644 index 0000000..a9a2f59 --- /dev/null +++ "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\230\321\202\320\265\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\260\320\224\321\202\320\276.os" @@ -0,0 +1,41 @@ +// BSLLS:ExportVariables-off + +&Сериализуемое("Stage") +&Тип("Строка") +Перем Этап Экспорт; // см. ЭтапыБенчмарка + +&Сериализуемое("IterationNumber") +&Тип("Число") +Перем НомерИтерации Экспорт; // Число + +&Сериализуемое("OperationCount") +&Тип("Число") +Перем КоличествоОпераций Экспорт; // Число + +&Сериализуемое("Nanoseconds") +&Тип("Число") +Перем Наносекунд Экспорт; // Число + +&Сериализуемое("NanosecondsPerOperation") +&Тип("Число") +Перем НаносекундЗаОперацию Экспорт; // Число + +&Сериализуемое("AllocatedMemory") +&Тип("Число") +Перем ВыделяемаяПамять Экспорт; // Число + +&Сериализуемое("AllocatedMemoryPerOperation") +&Тип("Число") +Перем ВыделяемаяПамятьЗаОперацию Экспорт; // Число + +Процедура ПриСозданииОбъекта() + + Этап = ""; + НомерИтерации = 0; + КоличествоОпераций = 0; + Наносекунд = 0; + НаносекундЗаОперацию = 0; + ВыделяемаяПамять = 0; + ВыделяемаяПамятьЗаОперацию = 0; + +КонецПроцедуры \ No newline at end of file diff --git a/tests/fixtures/verified-report.html b/tests/fixtures/verified-report.html index 5a9de89..c7857be 100644 --- a/tests/fixtures/verified-report.html +++ b/tests/fixtures/verified-report.html @@ -23,6 +23,15 @@ Значение +П1 + + +П2 + + +П + + Mean @@ -32,6 +41,12 @@ StdDev +Min + + +Max + + Op/s @@ -39,12 +54,21 @@ -БенчмаркПервый +БенчмаркВторой 100 + + + + + + +Массив + + 1.0 ms @@ -54,15 +78,30 @@ 0.0 ns +1.0 ms + + +1.0 ms + + 1,000 -БенчмаркВторой +БенчмаркПервый 100 + + +1 + + +Тест + + + 1.0 ms @@ -74,6 +113,12 @@ 0.0 ns +1.0 ms + + +1.0 ms + + 1,000 diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json index 8805735..17b09ee 100644 --- a/tests/fixtures/verified-report.json +++ b/tests/fixtures/verified-report.json @@ -1,29 +1,82 @@ { - "СредаОкружения": { - "ВерсияBenchmarkOneScript": "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 + "HostEnvironmentInfo": { + "BenchmarkOneScriptVersion": "0.1.x-mock", + "OsVersion": "Microsoft Windows NT 10.0.x.mock", + "RuntimeVersion": "2.0.0-mock", + "ProcessorName": "MockIntel Core i7-6700HQ CPU 2.60GHz", + "PhysicalProcessorCount": 1, + "PhysicalCoreCount": 4, + "LogicalCoreCount": 8 }, - "Бенчмарки": [ + "Configuration": { + "Strategy": "ПропускнаяСпособность", + "IterationCount": 10, + "InvocationCount": 1, + "WarmupCount": 1, + "MinIterationTime": 10, + "MinInvocationCount": 4, + "ReportSorting": "ПоУмолчанию", + "Memory": false, + "ArtifactsDirectory": ".\\BenchmarkArtifacts", + "Parameters": [ + { + "Name": "Значение", + "Value": 100, + "IsMethodParameter": false + } + ], + "ParameterSources": [], + "Columns": [ + "Мин", + "Макс" + ], + "RuntimeVersions": [], + "Handlers": [], + "Exporters": [ + "ЭкспортерРезультатовБенчмарковВJson" + ] + }, + "BenchmarkDescriptors": [ { - "Тип": "ДваБенчмаркаИПоле", - "Метод": "БенчмаркПервый", - "Категория": "", - "ЭтоЭталон": false, - "ИсполняющаяСреда": { - "Версия": "", - "Алиас": "", - "Наименование": "" - }, - "Параметры": { - "Значение": 100 - }, - "Статистика": { - "Значения": [ + "Type": "БенчмаркиДляЭкспорта", + "Method": "БенчмаркПервый", + "Baseline": false, + "Category": "", + "ParameterSets": [ + [ + { + "Name": "П1", + "Value": 1, + "IsMethodParameter": true + }, + { + "Name": "П2", + "Value": "Тест", + "IsMethodParameter": true + } + ] + ], + "ParameterSources": [] + }, + { + "Type": "БенчмаркиДляЭкспорта", + "Method": "БенчмаркВторой", + "Baseline": false, + "Category": "", + "ParameterSets": [], + "ParameterSources": [ + "ПараметрыДляВторого" + ] + } + ], + "Runs": [ + { + "Type": "БенчмаркиДляЭкспорта", + "Method": "БенчмаркПервый", + "Category": "", + "Baseline": false, + "Statistics": { + "OriginalValues": [ 1000000, 1000000, 1000000, @@ -35,17 +88,18 @@ 1000000, 1000000 ], - "Количество": 10, - "Мин": 1000000, + "N": 10, + "Min": 1000000, "Q1": 1000000, - "Медиана": 1000000, - "Среднее": 1000000, + "Median": 1000000, + "Mean": 1000000, "Q3": 1000000, - "Макс": 1000000, - "СтандартноеОтклонение": 0, - "СтандартнаяОшибкаСреднего": 0, - "ОперацийВСекунду": 1000, - "Процентили": { + "Max": 1000000, + "StdDev": 0, + "StdErr": 0, + "Ops": 1000, + "BytesAllocatedPerOperation": 0, + "Percentiles": { "P0": 1000000, "P25": 1000000, "P50": 1000000, @@ -55,119 +109,118 @@ "P90": 1000000, "P95": 1000000, "P100": 1000000 - }, - "Память": { - "ВыделяемаяЗаОперацию": 0 } }, - "Замеры": [ + "Runtime": { + "Version": "", + "Alias": "", + "Name": "" + }, + "Measurements": [ { - "Этап": "Измерение", - "НомерИтерации": 1, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 1, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 2, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 2, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 3, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 3, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 4, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 4, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 5, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 5, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 6, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 6, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 7, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 7, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 8, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 8, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 9, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 9, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 10, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 10, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 } - ] + ], + "Parameters": { + "Значение": 100, + "П1": 1, + "П2": "Тест" + } }, { - "Тип": "ДваБенчмаркаИПоле", - "Метод": "БенчмаркВторой", - "Категория": "", - "ЭтоЭталон": false, - "ИсполняющаяСреда": { - "Версия": "", - "Алиас": "", - "Наименование": "" - }, - "Параметры": { - "Значение": 100 - }, - "Статистика": { - "Значения": [ + "Type": "БенчмаркиДляЭкспорта", + "Method": "БенчмаркВторой", + "Category": "", + "Baseline": false, + "Statistics": { + "OriginalValues": [ 1000000, 1000000, 1000000, @@ -179,17 +232,18 @@ 1000000, 1000000 ], - "Количество": 10, - "Мин": 1000000, + "N": 10, + "Min": 1000000, "Q1": 1000000, - "Медиана": 1000000, - "Среднее": 1000000, + "Median": 1000000, + "Mean": 1000000, "Q3": 1000000, - "Макс": 1000000, - "СтандартноеОтклонение": 0, - "СтандартнаяОшибкаСреднего": 0, - "ОперацийВСекунду": 1000, - "Процентили": { + "Max": 1000000, + "StdDev": 0, + "StdErr": 0, + "Ops": 1000, + "BytesAllocatedPerOperation": 0, + "Percentiles": { "P0": 1000000, "P25": 1000000, "P50": 1000000, @@ -199,103 +253,109 @@ "P90": 1000000, "P95": 1000000, "P100": 1000000 - }, - "Память": { - "ВыделяемаяЗаОперацию": 0 } }, - "Замеры": [ + "Runtime": { + "Version": "", + "Alias": "", + "Name": "" + }, + "Measurements": [ { - "Этап": "Измерение", - "НомерИтерации": 1, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 1, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 2, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 2, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 3, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 3, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 4, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 4, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 5, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 5, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 6, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 6, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 7, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 7, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 8, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 8, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 9, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 9, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 }, { - "Этап": "Измерение", - "НомерИтерации": 10, - "КоличествоОпераций": 1, - "Наносекунд": 1000000, - "НаносекундЗаОперацию": 1000000, - "ВыделяемаяПамять": 0, - "ВыделяемаяПамятьЗаОперацию": 0 + "Stage": "Измерение", + "IterationNumber": 10, + "OperationCount": 1, + "Nanoseconds": 1000000, + "NanosecondsPerOperation": 1000000, + "AllocatedMemory": 0, + "AllocatedMemoryPerOperation": 0 } - ] + ], + "Parameters": { + "Значение": 100, + "П": "Массив" + } } ] } \ No newline at end of file diff --git a/tests/fixtures/verified-report.md b/tests/fixtures/verified-report.md index 046dc30..43879c1 100644 --- a/tests/fixtures/verified-report.md +++ b/tests/fixtures/verified-report.md @@ -1,7 +1,7 @@ BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores -| Method | Значение | Mean | StdErr | StdDev | Op/s | -|----------------|---------:|-------:|-------:|-------:|------:| -| БенчмаркПервый | 100 | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 | -| БенчмаркВторой | 100 | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 | +| Method | Значение | П1 | П2 | П | Mean | StdErr | StdDev | Min | Max | Op/s | +|----------------|---------:|----|------|--------|-------:|-------:|-------:|-------:|-------:|------:| +| БенчмаркВторой | 100 | | | Массив | 1.0 ms | 0.0 ns | 0.0 ns | 1.0 ms | 1.0 ms | 1,000 | +| БенчмаркПервый | 100 | 1 | Тест | | 1.0 ms | 0.0 ns | 0.0 ns | 1.0 ms | 1.0 ms | 1,000 | diff --git a/tests/fixtures/verified-report.xml b/tests/fixtures/verified-report.xml deleted file mode 100644 index 88dd0af..0000000 --- a/tests/fixtures/verified-report.xml +++ /dev/null @@ -1,302 +0,0 @@ - -<Отчет> - <СредаОкружения> - <ВерсияBenchmarkOneScript>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 - - <Бенчмарки> - <Бенчмарк> - <Тип>ДваБенчмаркаИПоле - <Метод>БенчмаркПервый - <Категория/> - <ЭтоЭталон>false - <ИсполняющаяСреда> - <Версия/> - <Алиас/> - <Наименование/> - - <Параметры> - <Значение>100 - - <Статистика> - <Значения> - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - - <Количество>10 - <Мин>1000000 - 1000000 - <Медиана>1000000 - <Среднее>1000000 - 1000000 - <Макс>1000000 - <СтандартноеОтклонение/> - <СтандартнаяОшибкаСреднего/> - <ОперацийВСекунду>1000 - <Процентили> - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - - <Память> - <ВыделяемаяЗаОперацию/> - - - <Замеры> - <Замер> - <Этап>Измерение - <НомерИтерации>1 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>2 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>3 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>4 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>5 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>6 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>7 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>8 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>9 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>10 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - - - <Бенчмарк> - <Тип>ДваБенчмаркаИПоле - <Метод>БенчмаркВторой - <Категория/> - <ЭтоЭталон>false - <ИсполняющаяСреда> - <Версия/> - <Алиас/> - <Наименование/> - - <Параметры> - <Значение>100 - - <Статистика> - <Значения> - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - <Значение>1000000 - - <Количество>10 - <Мин>1000000 - 1000000 - <Медиана>1000000 - <Среднее>1000000 - 1000000 - <Макс>1000000 - <СтандартноеОтклонение/> - <СтандартнаяОшибкаСреднего/> - <ОперацийВСекунду>1000 - <Процентили> - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - 1000000 - - <Память> - <ВыделяемаяЗаОперацию/> - - - <Замеры> - <Замер> - <Этап>Измерение - <НомерИтерации>1 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>2 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>3 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>4 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>5 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>6 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>7 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>8 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>9 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - <Замер> - <Этап>Измерение - <НомерИтерации>10 - <КоличествоОпераций>1 - <Наносекунд>1000000 - <НаносекундЗаОперацию>1000000 - <ВыделяемаяПамять/> - <ВыделяемаяПамятьЗаОперацию/> - - - - - \ No newline at end of file diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\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/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index 85614c2..f82ac85 100644 --- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\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/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -1,3 +1,5 @@ +// BSLLS-off + &Параметры(100, 200) &ИсточникПараметров("ПолучитьЗначения") Перем ОбщееЗначение Экспорт; @@ -13,7 +15,6 @@ &КаталогАртефактов("path/to/artifacts") &ЭкспортMarkdown &ЭкспортJson -&ЭкспортXml &ЭкспортHtml &ИсполняющаяСреда("stable") &ИсполняющаяСреда("1.9.3, 1.9.4") @@ -40,5 +41,8 @@ КонецПроцедуры &Бенчмарк -Процедура Бенчмарк() Экспорт +&Параметры(1) +&Параметры(2) +&ИсточникПараметров("ПолучитьПараметры") +Процедура Бенчмарк(Парам) Экспорт КонецПроцедуры \ No newline at end of file diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" index 09d6904..c360e20 100644 --- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" +++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" @@ -19,7 +19,7 @@ ДескрипторыБенчмарков = Контекст.ДескрипторыБенчмарков; Конфигурация = Контекст.Конфигурация; - Расшифровка = Контекст.Расшифровка; + Запуски = Контекст.Запуски; Отчет = Контекст.Отчет; СредаОкружения = Контекст.СредаОкружения; @@ -38,7 +38,7 @@ КонецПроцедуры &ПослеКаждого -Процедура ПослеЗапуска(Контекст) Экспорт +Процедура ПослеКаждого(Контекст) Экспорт ДескрипторБенчмарка = Контекст.ДескрипторБенчмарка; Параметры = Контекст.Параметры; @@ -49,10 +49,7 @@ КонецПроцедуры -Процедура ПередЗапускомБезПараметров(Контекст) Экспорт - - ДескрипторБенчмарка = Контекст.ДескрипторБенчмарка; - ПараметрыМетода = Контекст.ПараметрыМетода; +Процедура ПередЗапускомБезПараметров() Экспорт События.Добавить("ПередЗапускомБезПараметров"); diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\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/\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" new file mode 100644 index 0000000..59bb2d9 --- /dev/null +++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\224\320\273\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\260.os" @@ -0,0 +1,24 @@ +&Параметры(100) +Перем Значение Экспорт; + +&КолонкаМин +&КолонкаМакс +Процедура ПриСозданииОбъекта() + +КонецПроцедуры + +&Бенчмарк +&Параметры(1, "Тест") +Процедура БенчмаркПервый(П1, П2) Экспорт +КонецПроцедуры + +&Бенчмарк +&ИсточникПараметров("ПараметрыДляВторого") +Процедура БенчмаркВторой(П) Экспорт +КонецПроцедуры + +Функция ПараметрыДляВторого() Экспорт + М = Новый Массив(); + М.Добавить(Новый Массив()); + Возврат М; +КонецФункции \ No newline at end of file diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" deleted file mode 100644 index 2d39e9a..0000000 --- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" +++ /dev/null @@ -1,10 +0,0 @@ -&Параметры(100) -Перем Значение Экспорт; - -&Бенчмарк -Процедура БенчмаркПервый() Экспорт -КонецПроцедуры - -&Бенчмарк -Процедура БенчмаркВторой() Экспорт -КонецПроцедуры \ No newline at end of file diff --git "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index edca2e2..217f892 100644 --- "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -66,7 +66,7 @@ ПостроительОтчета = Новый ПостроительОтчетаБенчмарков( Контекст.ДескрипторыБенчмарков, Контекст.Конфигурация, - Контекст.Расшифровка + Контекст.Запуски ); Контекст.Отчет = ПостроительОтчета.Сформировать(); @@ -81,7 +81,7 @@ Процедура ПроверитьУстановитьВерсииИсполняющейСреды(Версии) - КаталогУстановки = ИсполняющаяСредаБенчмарков.КаталогУстановки(); + КаталогУстановки = ИнформацияСредыБенчмарков.КаталогУстановки(); Если КаталогУстановки = Неопределено Тогда ВызватьИсключение "Не найден каталог с установленными версиями OneScript. |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно."; @@ -92,7 +92,7 @@ Для Каждого Версия Из СтрРазделить(Версии, ", ") Цикл - ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + ИмяФайла = ИнформацияСредыБенчмарков.НайтиИсполняемыйФайл(Версия); Если Не ИмяФайла = Неопределено Тогда _Лог.Отладка(СтрШаблон("Обнаружена исполняющая среда OneScript версии %1: %2", Версия, ИмяФайла)); Продолжить; @@ -109,7 +109,7 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; - ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия); + ИмяФайла = ИнформацияСредыБенчмарков.НайтиИсполняемыйФайл(Версия); Если ИмяФайла = Неопределено Тогда ВызватьИсключение СтрШаблон("После установки OneScript версии %1 не удалось найти исполняемый файл", Версия); КонецЕсли; diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index b0c4ab2..ad78651 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -135,7 +135,7 @@ Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); - Ожидаем.Что(Результат.Расшифровка).Заполнено(); + Ожидаем.Что(Результат.Запуски).Заполнено(); КонецПроцедуры @@ -153,7 +153,7 @@ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(100); Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(20); Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(200); - Ожидаем.Что(НаборыПараметров[0][0].ЭтоПараметрМетода).ЭтоИстина(); + Ожидаем.Что(НаборыПараметров[0].Получить(0).ЭтоПараметрМетода).ЭтоИстина(); КонецПроцедуры @@ -500,128 +500,6 @@ КонецПроцедуры -&Тест -Процедура Тест_ЭкспортВMarkdown() Экспорт - - Тип = Тип("ДваБенчмаркаИПоле"); - ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); - ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); - - ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.md", "UTF-8"); - ТекстЭталон = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); - Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Markdown); - - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.md"); - - Бенчмаркинг.Запустить(Тип, Конфигурация); - - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Ожидаем.Что(Текст).Равно(ТекстЭталон); - -КонецПроцедуры - -&Тест -Процедура Тест_ЭкспортВJson() Экспорт - - Тип = Тип("ДваБенчмаркаИПоле"); - ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); - ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); - - ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.json", "UTF-8"); - ТекстЭталон = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - Конфигурация - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех) - .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json) - .УстановитьКоличествоИтераций(10); - - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.json"); - - Бенчмаркинг.Запустить(Тип, Конфигурация); - - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Ожидаем.Что(Текст).Равно(ТекстЭталон); - -КонецПроцедуры - -&Тест -Процедура Тест_ЭкспортВXml() Экспорт - - Тип = Тип("ДваБенчмаркаИПоле"); - ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); - ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); - - ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.xml", "UTF-8"); - ТекстЭталон = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - - Конфигурация - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого) - .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех) - .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Xml) - .УстановитьКоличествоИтераций(10); - - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.xml"); - - Бенчмаркинг.Запустить(Тип, Конфигурация); - - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Ожидаем.Что(Текст).Равно(ТекстЭталон); - -КонецПроцедуры - -&Тест -Процедура Тест_ЭкспортВHtml() Экспорт - - Тип = Тип("ДваБенчмаркаИПоле"); - ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); - ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); - - ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.html", "UTF-8"); - ТекстЭталон = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); - Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); - Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html); - - ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.html"); - - Бенчмаркинг.Запустить(Тип, Конфигурация); - - ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); - Текст = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - Ожидаем.Что(Текст).Равно(ТекстЭталон); - -КонецПроцедуры - &Тест Процедура Тест_ДолженПроверитьПередачуКонфигурацииПриЗапускеИзКаталога() Экспорт @@ -678,7 +556,7 @@ .Что(Бенчмаркинг) .Метод("Запустить", ПараметрыМетода) .ВыбрасываетИсключение( - "Значение параметра <Значение> должно быть сериализуемым для определения эталонов между разными версиями OneScript" + "Значение параметра <Значение> должно быть примитивным для определения эталонов между разными версиями OneScript" ); КонецПроцедуры @@ -729,7 +607,7 @@ КонецПроцедуры &Тест -Процедура Тест_ДолженПроверитьСериализациюРезультатовJson() Экспорт +Процедура ТестДолжен_СериализоватьИДесериализоватьРезультатыБенчмарков() Экспорт Тип = Тип("БенчмаркСПараметрамиМетодаИПоля"); @@ -758,39 +636,40 @@ ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); Сериализатор = Новый СериализаторРезультатовБенчмарков(); - Сериализатор.СериализоватьВJSON(Результат, ИмяФайла); - РезультатПрочитанный = Сериализатор.ДесериализоватьИзJSON(ИмяФайла, Конфигурация); + Сериализатор.ЗаписатьВJson(Результат, ИмяФайла); + РезультатПрочитанный = Сериализатор.ПрочитатьИзJson(ИмяФайла); // Проверка - Расшифровка = РезультатПрочитанный.Расшифровка; - ДескрипторБенчмарка = Расшифровка[0].ДескрипторБенчмарка; + Запуски = РезультатПрочитанный.Запуски; + ДескрипторБенчмарка = Запуски[0].ДескрипторБенчмарка; НаборыПараметров = ДескрипторБенчмарка.НаборыПараметров(); - Ожидаем.Что(Расшифровка, "Количество строк в расшифровке").ИмеетДлину(8); Ожидаем.Что(ДескрипторБенчмарка.ТипОбъекта(), "Тип").Равно(Тип); Ожидаем.Что(ДескрипторБенчмарка.Метод(), "Метод").Равно("Бенчмарк"); Ожидаем.Что(ДескрипторБенчмарка.Категория(), "Категория").Равно("Категория 1"); Ожидаем.Что(НаборыПараметров, "Наборы параметров").ИмеетДлину(2); Ожидаем.Что(НаборыПараметров[0], "Набор параметров 1").ИмеетДлину(2); - Ожидаем.Что(НаборыПараметров[0][0].Значение, "Набор параметров 1").Равно(3); - Ожидаем.Что(НаборыПараметров[0][1].Значение, "Набор параметров 1").Равно(4); + Ожидаем.Что(НаборыПараметров[0].Получить(0).Значение, "Набор параметров 1").Равно(3); + Ожидаем.Что(НаборыПараметров[0].Получить(1).Значение, "Набор параметров 1").Равно(4); Ожидаем.Что(НаборыПараметров[1], "Набор параметров 2").ИмеетДлину(2); - Ожидаем.Что(НаборыПараметров[1][0].Значение, "Набор параметров 2").Равно(5); - Ожидаем.Что(НаборыПараметров[1][1].Значение, "Набор параметров 2").Равно(6); - Ожидаем.Что(Расшифровка[0].Параметры, "Количество строк в параметрах").ИмеетДлину(3); - Ожидаем.Что(Расшифровка[0].Параметры[0].Значение, "Параметр 1.1").Содержит("ТаблицаЗначений@"); - Ожидаем.Что(Расшифровка[0].Параметры[1].Значение, "Параметр 1.2").Равно(3); - Ожидаем.Что(Расшифровка[0].Параметры[2].Значение, "Параметр 1.3").Равно(4); - Ожидаем.Что(Расшифровка[1].Параметры[0].Значение, "Параметр 2.1").Содержит("БенчмаркСПараметрамиМетодаИПоля@"); - Ожидаем.Что(Расшифровка[2].Параметры[0].Значение, "Параметр 3.1").Равно('19700101'); - Ожидаем.Что(Расшифровка[3].Параметры[0].Значение, "Параметр 4.1").Равно(Неопределено); - Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Это не эталон").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[0].ИсполняющаяСреда.Версия, "Версия").Не_().Заполнено(); - Ожидаем.Что(Расшифровка[0].Замеры, "Количество строк в замерах").ИмеетДлину(1); - Ожидаем.Что(Расшифровка[0].Замеры[0].Этап, "Этап").Равно(ЭтапыБенчмарка.Измерение); - Ожидаем.Что(Расшифровка[0].Замеры[0].НомерИтерации, "Номер итерации").Равно(1); - Ожидаем.Что(Расшифровка[0].Замеры[0].Наносекунд, "Наносекунд").Больше(100); - Ожидаем.Что(Расшифровка[0].Статистика.Среднее, "Среднее").Больше(100); + Ожидаем.Что(НаборыПараметров[1].Получить(0).Значение, "Набор параметров 2").Равно(5); + Ожидаем.Что(НаборыПараметров[1].Получить(1).Значение, "Набор параметров 2").Равно(6); + Ожидаем.Что(Запуски, "Количество запусков").ИмеетДлину(8); + Ожидаем.Что(Запуски[0].ДескрипторБенчмарка, "Должен быть создан один объект дескриптора").Равно(Запуски[1].ДескрипторБенчмарка); + Ожидаем.Что(Запуски[0].Параметры, "Количество строк в параметрах").ИмеетДлину(3); + Ожидаем.Что(Запуски[0].Параметры[0].Значение, "Параметр 1.1").Равно("ТаблицаЗначений"); + Ожидаем.Что(Запуски[0].Параметры[1].Значение, "Параметр 1.2").Равно(3); + Ожидаем.Что(Запуски[0].Параметры[2].Значение, "Параметр 1.3").Равно(4); + Ожидаем.Что(Запуски[1].Параметры[0].Значение, "Параметр 2.1").Равно("БенчмаркСПараметрамиМетодаИПоля"); + Ожидаем.Что(Запуски[2].Параметры[0].Значение, "Параметр 3.1").Равно('19700101'); + Ожидаем.Что(Запуски[3].Параметры[0].Значение, "Параметр 4.1").Равно(Неопределено); + Ожидаем.Что(Запуски[0].ЭтоЭталон, "Это не эталон").ЭтоЛожь(); + Ожидаем.Что(Запуски[0].ИсполняющаяСреда.Версия, "Версия").Не_().Заполнено(); + Ожидаем.Что(Запуски[0].Замеры, "Количество строк в замерах").ИмеетДлину(1); + Ожидаем.Что(Запуски[0].Замеры[0].Этап, "Этап").Равно(ЭтапыБенчмарка.Измерение); + Ожидаем.Что(Запуски[0].Замеры[0].НомерИтерации, "Номер итерации").Равно(1); + Ожидаем.Что(Запуски[0].Замеры[0].Наносекунд, "Наносекунд").Больше(100); + Ожидаем.Что(Запуски[0].Статистика.Среднее, "Среднее").Больше(100); КонецПроцедуры @@ -889,11 +768,14 @@ Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация); // Проверка - Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(4); - Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(100); - Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(200); - Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(Ложь); - Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Поле")]).Равно(Истина); + ИмяКолонки = КолонкиОтчетаБенчмарков.Параметр("Поле"); + Значения = Результат.Отчет.Таблица.ВыгрузитьКолонку(ИмяКолонки); + + Ожидаем.Что(Значения).ИмеетДлину(4); + Ожидаем.Что(Значения).Содержит(Ложь); + Ожидаем.Что(Значения).Содержит(Истина); + Ожидаем.Что(Значения).Содержит(100); + Ожидаем.Что(Значения).Содержит(200); КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" index 4a15459..d1721c2 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" @@ -17,7 +17,7 @@ Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков); - ВыделеноБайт = Результат.Расшифровка[0].Статистика.ВыделяемаяПамять; + ВыделеноБайт = Результат.Запуски[0].Статистика.ВыделяемаяПамять; Коэффициент = РазмерВБайтах / ВыделеноБайт; Ожидаем.Что(Коэффициент).Между(0.99, 1); @@ -36,7 +36,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - ВыделеноБайт = Результат.Расшифровка[0].Статистика.ВыделяемаяПамять; + ВыделеноБайт = Результат.Запуски[0].Статистика.ВыделяемаяПамять; Ожидаем.Что(ВыделеноБайт).Между(1, 2000); @@ -46,11 +46,11 @@ Процедура Тест_Производительность() Экспорт Результат = Бенчмаркинг.Запустить(Тип("БенчмаркиСЗадержкой")); - Расшифровка = Результат.Расшифровка; + Запуски = Результат.Запуски; Отчет = Результат.Отчет; - Статистика1 = Расшифровка[0].Статистика.ВМиллисекунды(); - Статистика2 = Расшифровка[1].Статистика.ВМиллисекунды(); + Статистика1 = Запуски[0].Статистика.ВМиллисекунды(); + Статистика2 = Запуски[1].Статистика.ВМиллисекунды(); // Среднее Ожидаем.Что(Статистика1.Среднее).Больше(10); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" index 5a40d0f..84252c5 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" @@ -3,28 +3,15 @@ #Использовать asserts #Использовать fluent -#Использовать tempfiles #Использовать "helpers" -Перем МенеджерВременныхФайлов; // МенеджерВременныхФайлов - -&Инициализация -Процедура ПередВсеми() Экспорт - МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); -КонецПроцедуры - -&Завершение -Процедура ПослеВсех() Экспорт - МенеджерВременныхФайлов.Удалить(); -КонецПроцедуры - &Тест Процедура Тест_АннотацииКонфигурации() Экспорт Тип = Тип("БенчмаркСАннотациямиКонфигурации"); Конфигурация = Новый КонфигурацияБенчмарков(Тип); - ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(Конфигурация); + ПроверитьКонфигурациюБенчмаркаСАннотациямиКонфигурации(Конфигурация); КонецПроцедуры @@ -74,7 +61,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.Расшифровка[0].Замеры.Количество()).Равно(КоличествоИтераций); + Ожидаем.Что(Результат.Запуски[0].Замеры.Количество()).Равно(КоличествоИтераций); КонецПроцедуры @@ -89,7 +76,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); + Ожидаем.Что(Результат.Запуски[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); КонецПроцедуры @@ -160,7 +147,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); - Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); + Ожидаем.Что(Результат.Запуски[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию); КонецПроцедуры @@ -176,7 +163,7 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); Ожидаем.Что(Результат.Отчет.Таблица).Заполнено(); - Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(1); + Ожидаем.Что(Результат.Запуски[0].Замеры[0].КоличествоОпераций).Равно(1); КонецПроцедуры @@ -305,30 +292,33 @@ Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация); - Ожидаем.Что(Результат.Расшифровка[0].Статистика.ВыделяемаяПамять).Заполнено(); + Ожидаем.Что(Результат.Запуски[0].Статистика.ВыделяемаяПамять).Заполнено(); Ожидаем.Что(Результат.Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); КонецПроцедуры &Тест -Процедура Тест_ВызовОбработчиковСобытий() Экспорт +Процедура ТестДолжен_ВызватьСтандартныеОбработчикиСобытий() Экспорт ОбъектБенчмарков = Новый БенчмаркСОбработчикамиСобытий(); Конфигурация = Новый КонфигурацияБенчмарков(ОбъектБенчмарков); ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); - Параметры = Новый Массив(); - Параметры.Добавить(ОбъектБенчмарков); - Параметры.Добавить(Конфигурация); + Бенчмаркинг.Запустить(ОбъектБенчмарков, Конфигурация); - Ожидаем.Что(Бенчмаркинг).Метод("Запустить", Параметры).Не_().ВыбрасываетИсключение(); - Ожидаем.Что(ОбъектБенчмарков.События).ИмеетДлину(4); + События = ОбъектБенчмарков.События; + + Ожидаем.Что(События).Содержит("ПередВсеми"); + Ожидаем.Что(События).Содержит("ПослеВсех"); + Ожидаем.Что(События).Содержит("ПередКаждым"); + Ожидаем.Что(События).Содержит("ПослеКаждого"); + Ожидаем.Что(События).Не_().Содержит("ПередЗапускомБезПараметров"); КонецПроцедуры &Тест -Процедура Тест_ВызовОбработчикаСобытияБезПараметров() Экспорт +Процедура ТестДолжен_ВызватьКастомныйОбработчикСобытияБезПараметров() Экспорт ОбъектБенчмарков = Новый БенчмаркСОбработчикамиСобытий(); @@ -347,7 +337,7 @@ КонецПроцедуры &Тест -Процедура Тест_ВызовНесколькихОбработчиковОдногоСобытия() Экспорт +Процедура ТестДолжен_ВызватьНесколькоОбработчиковДляОдногоСобытия() Экспорт ОбъектБенчмарков = Новый БенчмаркСОбработчикамиСобытий(); @@ -758,23 +748,7 @@ КонецПроцедуры -&Тест -Процедура Тест_ДолженПроверитьСериализациюКонфигурацииJson() Экспорт - - Тип = Тип("БенчмаркСАннотациямиКонфигурации"); - Конфигурация = Новый КонфигурацияБенчмарков(Тип); - - ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); - - Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); - Сериализатор.СериализоватьВJSON(Конфигурация, ИмяФайла); - КонфигурацияПрочитанная = Сериализатор.ДесериализоватьИзJSON(ИмяФайла); - - ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(КонфигурацияПрочитанная); - -КонецПроцедуры - -Процедура ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(Конфигурация) +Процедура ПроверитьКонфигурациюБенчмаркаСАннотациямиКонфигурации(Конфигурация) Экспортеры = Конфигурация.Экспортеры(); КоллекцияЭкспортеры = ПроцессорыКоллекций.ИзКоллекции(Экспортеры); @@ -800,7 +774,6 @@ Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts"); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина(); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина(); - Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Xml"))).ЭтоИстина(); Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина(); Ожидаем.Что(ВерсииИсполняющейСреды, "Должно быть 4 версии исполняющей среды").ИмеетДлину(4); Ожидаем.Что(ВерсииИсполняющейСреды[0].Версия, "Версия исполняющей среды stable").Равно("stable"); @@ -812,6 +785,7 @@ Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Мин); Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Макс); Ожидаем.Что(Параметры, "Параметры").ИмеетДлину(2); + Ожидаем.Что(Параметры[0], "Параметры").ИмеетТип("ПараметрБенчмарка"); Ожидаем.Что(Параметры[0].Значение, "Параметры").Равно(100); Ожидаем.Что(Параметры[1].Значение, "Параметры").Равно(200); Ожидаем.Что(ИсточникиПараметров, "Источники параметров").ИмеетДлину(1); diff --git "a/tests/\320\242\320\265\321\201\321\202\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\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..835635b --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\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\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -0,0 +1,105 @@ +// BSLLS:DuplicateStringLiteral-off +// BSLLS:MagicNumber-off + +#Использовать asserts +#Использовать tempfiles +#Использовать "helpers" + +Перем МенеджерВременныхФайлов; // МенеджерВременныхФайлов + +&Инициализация +Процедура ПередВсеми() Экспорт + МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов(); +КонецПроцедуры + +&Завершение +Процедура ПослеВсех() Экспорт + МенеджерВременныхФайлов.Удалить(); +КонецПроцедуры + +&Тест +Процедура ТестДолжен_СериализоватьИДесериализовать() Экспорт + + Тип = Тип("БенчмаркСАннотациямиКонфигурации"); + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + КоллекцияДескрипторов = Новый КоллекцияДескрипторовБенчмарков(Тип); + + ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла(); + + Сериализатор = Новый СериализаторНастроекБенчмарков(); + Сериализатор.ЗаписатьВJson(КоллекцияДескрипторов, Конфигурация, ИмяФайла); + ДТО = Сериализатор.ПрочитатьИзJson(ИмяФайла); + + ПроверитьДескрипторыБенчмаркаСАннотациямиКонфигурации(ДТО.ДескрипторыБенчмарков); + ПроверитьКонфигурациюБенчмаркаСАннотациямиКонфигурации(ДТО.Конфигурация); + +КонецПроцедуры + +Процедура ПроверитьДескрипторыБенчмаркаСАннотациямиКонфигурации(ДескрипторыБенчмарков) + + Ожидаем.Что(ДескрипторыБенчмарков.Количество()).Равно(1); + + Дескриптор = ДескрипторыБенчмарков.ПолучитьПервый(); + НаборыПараметров = Дескриптор.НаборыПараметров(); + ИсточникиПараметров = Дескриптор.ИсточникиПараметров(); + + Ожидаем.Что(Дескриптор.ТипОбъекта()).Равно(Тип("БенчмаркСАннотациямиКонфигурации")); + Ожидаем.Что(Дескриптор.Метод()).Равно("Бенчмарк"); + Ожидаем.Что(Дескриптор.ЭтоЭталон()).ЭтоЛожь(); + + Ожидаем.Что(НаборыПараметров, "Наборы параметров").ИмеетДлину(2); + Ожидаем.Что(НаборыПараметров[0].Получить(0).Имя, "Наборы параметров [0].Имя").Равно("Парам"); + Ожидаем.Что(НаборыПараметров[0].Получить(0).Значение, "Наборы параметров [0].Значение").Равно(1); + Ожидаем.Что(НаборыПараметров[1].Получить(0).Имя, "Наборы параметров [1].Имя").Равно("Парам"); + Ожидаем.Что(НаборыПараметров[1].Получить(0).Значение, "Наборы параметров [1].Значение").Равно(2); + + Ожидаем.Что(ИсточникиПараметров, "Источники параметров").ИмеетДлину(1); + Ожидаем.Что(ИсточникиПараметров[0], "Источники параметров [0]").Равно("ПолучитьПараметры"); + +КонецПроцедуры + +Процедура ПроверитьКонфигурациюБенчмаркаСАннотациямиКонфигурации(Конфигурация) + + Экспортеры = Конфигурация.Экспортеры(); + КоллекцияЭкспортеры = ПроцессорыКоллекций.ИзКоллекции(Экспортеры); + ВерсииИсполняющейСреды = Конфигурация.ВерсииИсполняющейСреды(); + Колонки = Конфигурация.Колонки(); + Параметры = Конфигурация.Параметры(); + ИсточникиПараметров = Конфигурация.ИсточникиПараметров(); + + ФункцияПоискаЭкспортера = "Экспортер -> ТипЗнч(Экспортер) = Тип(""ЭкспортерРезультатовБенчмарковВ%1"")"; + + Ожидаем.Что(Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск); + Ожидаем.Что(Конфигурация.СортировкаОтчета()).Равно(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным); + Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина(); + Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(100); + Ожидаем.Что(Конфигурация.КоличествоВызововЗаИтерацию()).Равно(200); + Ожидаем.Что(Конфигурация.КоличествоПрогревочныхИтераций()).Равно(300); + Ожидаем.Что(Конфигурация.МинимальноеВремяИтерации()).Равно(400); + Ожидаем.Что(Конфигурация.МинимальноеКоличествоВызововЗаИтерацию()).Равно(500); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередВсеми), "Обработчики").Содержит("ПередВсеми"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеВсех), "Обработчики").Содержит("ПослеВсех"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередКаждым), "Обработчики").Содержит("ПередКаждым"); + Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого), "Обработчики").Содержит("ПослеКаждого"); + Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts"); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина(); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина(); + Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина(); + Ожидаем.Что(ВерсииИсполняющейСреды, "Должно быть 4 версии исполняющей среды").ИмеетДлину(4); + Ожидаем.Что(ВерсииИсполняющейСреды[0].Версия, "Версия исполняющей среды stable").Равно("stable"); + Ожидаем.Что(ВерсииИсполняющейСреды[1].Версия, "Версия исполняющей среды 1.9.3").Равно("1.9.3"); + Ожидаем.Что(ВерсииИсполняющейСреды[2].Версия, "Версия исполняющей среды 1.9.4").Равно("1.9.4"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].Версия, "Версия исполняющей среды 2.0.0").Равно("2.0.0"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].Наименование, "Наименование исполняющей среды 2.0.0").Равно("Новая"); + Ожидаем.Что(ВерсииИсполняющейСреды[3].ЭтоЭталон, "Исполняющая среда версии 2.0.0 - эталонная").ЭтоИстина(); + Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Мин); + Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Макс); + Ожидаем.Что(Параметры, "Параметры").ИмеетДлину(2); + Ожидаем.Что(Параметры[0], "Параметры").ИмеетТип("ПараметрБенчмарка"); + Ожидаем.Что(Параметры[0].Значение, "Параметры").Равно(100); + Ожидаем.Что(Параметры[1].Значение, "Параметры").Равно(200); + Ожидаем.Что(ИсточникиПараметров, "Источники параметров").ИмеетДлину(1); + Ожидаем.Что(ИсточникиПараметров[0].ИмяПоля, "Источники параметров").Равно("ОбщееЗначение"); + Ожидаем.Что(ИсточникиПараметров[0].Источник, "Источники параметров").Равно("ПолучитьЗначения"); + +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" index 378cdd1..eb38694 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\270.os" @@ -7,12 +7,12 @@ &Тест Процедура Тест_Пустой() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("", ""); + ТестовыеЗамеры = ТестовыеЗамеры("", ""); Статистика = Новый СтатистикаБенчмарка(); Параметры = Новый Массив(); - Параметры.Добавить(ТаблицаЗамеров); + Параметры.Добавить(ТестовыеЗамеры); Ожидаем.Что(Статистика).Метод("Прочитать", Параметры).ВыбрасываетИсключение("Набор замеров не должен быть пустым"); @@ -21,9 +21,9 @@ &Тест Процедура Тест_НечетныйРазмер() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 14", "100, 101, 102"); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 14", "100, 101, 102"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(19); Ожидаем.Что(Статистика.Мин, "Мин").Равно(12); @@ -45,9 +45,9 @@ &Тест Процедура Тест_ЧетныйРазмер() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 20, 4", "100, 102"); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 20, 4", "100, 102"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(17.875); Ожидаем.Что(Статистика.Мин, "Мин").Равно(4); @@ -69,9 +69,9 @@ &Тест Процедура Тест_ОдинаковыеЗначения() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("5, 5, 5, 5", "100, 100"); + ТестовыеЗамеры = ТестовыеЗамеры("5, 5, 5, 5", "100, 100"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(5); Ожидаем.Что(Статистика.Мин, "Мин").Равно(5); @@ -93,9 +93,9 @@ &Тест Процедура Тест_ОтрицательныеЗначения() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("-12, 15, -22, 25, 17, 28, 0, 4", "100, -100"); + ТестовыеЗамеры = ТестовыеЗамеры("-12, 15, -22, 25, 17, 28, 0, 4", "100, -100"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(6.875); Ожидаем.Что(Статистика.Мин, "Мин").Равно(-22); @@ -119,9 +119,9 @@ ОтношениеКБазовой = ЕдиницыИзмеренийБенчмарков.Миллисекунда.ОтношениеКБазовой; - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 14", "100, 101", ОтношениеКБазовой); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 14", "100, 101", ОтношениеКБазовой); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Статистика.ВМиллисекунды(); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(19); @@ -145,9 +145,9 @@ ОтношениеКБазовой = ЕдиницыИзмеренийБенчмарков.Секунда.ОтношениеКБазовой; - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 14", "100, 101", ОтношениеКБазовой); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 14", "100, 101", ОтношениеКБазовой); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Статистика.ВСекунды(); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(19); @@ -169,9 +169,9 @@ &Тест Процедура Тест_ВНаносекунды() Экспорт - ТаблицаЗамеров = ТаблицаЗамеров("12, 15, 22, 25, 17, 28, 14", "100, 101"); + ТестовыеЗамеры = ТестовыеЗамеры("12, 15, 22, 25, 17, 28, 14", "100, 101"); - Статистика = Новый СтатистикаБенчмарка(ТаблицаЗамеров); + Статистика = Новый СтатистикаБенчмарка(ТестовыеЗамеры); Статистика.ВСекунды().ВНаносекунды(); Ожидаем.Что(Статистика.Среднее, "Среднее").Равно(19); @@ -193,11 +193,11 @@ &Тест Процедура Тест_Разделить() Экспорт - ТаблицаЗамеров1 = ТаблицаЗамеров("32, 16, 64, 128", "100, 102"); - ТаблицаЗамеров2 = ТаблицаЗамеров("2, 8, 16, 4", "50, 51"); + ТестовыеЗамеры1 = ТестовыеЗамеры("32, 16, 64, 128", "100, 102"); + ТестовыеЗамеры2 = ТестовыеЗамеры("2, 8, 16, 4", "50, 51"); - Статистика1 = Новый СтатистикаБенчмарка(ТаблицаЗамеров1); - Статистика2 = Новый СтатистикаБенчмарка(ТаблицаЗамеров2); + Статистика1 = Новый СтатистикаБенчмарка(ТестовыеЗамеры1); + Статистика2 = Новый СтатистикаБенчмарка(ТестовыеЗамеры2); Статистика = Статистика1.Разделить(Статистика2); @@ -218,28 +218,27 @@ КонецПроцедуры -Функция ТаблицаЗамеров(СтрокаЗамерыВремени, СтрокаЗамерыПамяти, Множитель = 1) Экспорт +Функция ТестовыеЗамеры(СтрокаЗамерыВремени, СтрокаЗамерыПамяти, Множитель = 1) Экспорт - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("Этап"); - Таблица.Колонки.Добавить("НаносекундЗаОперацию"); - Таблица.Колонки.Добавить("ВыделяемаяПамятьЗаОперацию"); + Замеры = Новый Массив(); МассивЗамеровВремени = СтрРазделить(СтрокаЗамерыВремени, ",", Ложь); МассивЗамеровПамяти = СтрРазделить(СтрокаЗамерыПамяти, ",", Ложь); Для Каждого НаносекундЗаОперацию Из МассивЗамеровВремени Цикл - СтрокаТаблицы = Таблица.Добавить(); - СтрокаТаблицы.Этап = ЭтапыБенчмарка.Измерение; - СтрокаТаблицы.НаносекундЗаОперацию = Число(НаносекундЗаОперацию) * Множитель; + Замер = Новый РезультатИтерацииБенчмаркаДто(); + Замер.Этап = ЭтапыБенчмарка.Измерение; + Замер.НаносекундЗаОперацию = Число(НаносекундЗаОперацию) * Множитель; + Замеры.Добавить(Замер); КонецЦикла; Для Каждого ВыделяемаяПамятьЗаОперацию Из МассивЗамеровПамяти Цикл - СтрокаТаблицы = Таблица.Добавить(); - СтрокаТаблицы.Этап = ЭтапыБенчмарка.Память; - СтрокаТаблицы.ВыделяемаяПамятьЗаОперацию = Число(ВыделяемаяПамятьЗаОперацию) * Множитель; + Замер = Новый РезультатИтерацииБенчмаркаДто(); + Замер.Этап = ЭтапыБенчмарка.Память; + Замер.ВыделяемаяПамятьЗаОперацию = Число(ВыделяемаяПамятьЗаОперацию) * Множитель; + Замеры.Добавить(Замер); КонецЦикла; - Возврат Таблица; + Возврат Замеры; КонецФункции \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\276\320\262.os" new file mode 100644 index 0000000..e72057d --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\276\320\262.os" @@ -0,0 +1,103 @@ +#Использовать asserts +#Использовать delegate +#Использовать fs +#Использовать "helpers" + +&После +Процедура ПослеЗапускаТеста() Экспорт + + КаталогАртефактов = ".\BenchmarkArtifacts"; + + ФС.УдалитьФайлы(КаталогАртефактов); + +КонецПроцедуры + +&Тест +Процедура Тест_ЭкспортВMarkdown() Экспорт + + Тип = Тип("БенчмаркиДляЭкспорта"); + ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); + ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); + + ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.md", "UTF-8"); + ТекстЭталон = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); + Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); + Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Markdown); + + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "БенчмаркиДляЭкспорта-report.md"); + + Бенчмаркинг.Запустить(Тип, Конфигурация); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); + Текст = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Ожидаем.Что(Текст).Равно(ТекстЭталон); + +КонецПроцедуры + +&Тест +Процедура Тест_ЭкспортВJson() Экспорт + + Тип = Тип("БенчмаркиДляЭкспорта"); + ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); + ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); + + ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.json", "UTF-8"); + ТекстЭталон = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + Конфигурация + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого) + .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех) + .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json) + .УстановитьКоличествоИтераций(10); + + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "БенчмаркиДляЭкспорта-report.json"); + + Бенчмаркинг.Запустить(Тип, Конфигурация); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); + Текст = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Ожидаем.Что(Текст).Равно(ТекстЭталон); + +КонецПроцедуры + +&Тест +Процедура Тест_ЭкспортВHtml() Экспорт + + Тип = Тип("БенчмаркиДляЭкспорта"); + ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени"); + ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения"); + + ЧтениеТекста = Новый ЧтениеТекста("tests/fixtures/verified-report.html", "UTF-8"); + ТекстЭталон = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого); + Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех); + Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html); + + ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "БенчмаркиДляЭкспорта-report.html"); + + Бенчмаркинг.Запустить(Тип, Конфигурация); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлу, "UTF-8"); + Текст = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Ожидаем.Что(Текст).Равно(ТекстЭталон); + +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" index 31bc8ae..730d60e 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" @@ -1,3 +1,4 @@ +// BSLLS:LineLength-off // BSLLS:DuplicateStringLiteral-off // BSLLS:MagicNumber-off @@ -108,17 +109,17 @@ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable", Истина); Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - Расшифровка = Результат.Расшифровка; - - Ожидаем.Что(Расшифровка).ИмеетДлину(4); - Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("Бенчмарк"); - Ожидаем.Что(Расшифровка[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("stable"); - Ожидаем.Что(Расшифровка[1].ЭтоЭталон, "БенчмаркЭталон (dev) не должен быть эталоном").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[1].Эталон.ДескрипторБенчмарка.Метод(), "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); - Ожидаем.Что(Расшифровка[1].Эталон.ИсполняющаяСреда.Алиас, "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); - Ожидаем.Что(Расшифровка[2].ЭтоЭталон, "Бенчмарк (stable) должен быть эталоном").ЭтоИстина(); - Ожидаем.Что(Расшифровка[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); + Запуски = Результат.Запуски; + + Ожидаем.Что(Запуски).ИмеетДлину(4); + Ожидаем.Что(Запуски[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Запуски[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("Бенчмарк"); + Ожидаем.Что(Запуски[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("stable"); + Ожидаем.Что(Запуски[1].ЭтоЭталон, "БенчмаркЭталон (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Запуски[1].Эталон.ДескрипторБенчмарка.Метод(), "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Запуски[1].Эталон.ИсполняющаяСреда.Алиас, "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); + Ожидаем.Что(Запуски[2].ЭтоЭталон, "Бенчмарк (stable) должен быть эталоном").ЭтоИстина(); + Ожидаем.Что(Запуски[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); КонецПроцедуры @@ -134,17 +135,17 @@ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable"); Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - Расшифровка = Результат.Расшифровка; - - Ожидаем.Что(Расшифровка).ИмеетДлину(4); - Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("БенчмаркЭталон"); - Ожидаем.Что(Расшифровка[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("dev"); - Ожидаем.Что(Расшифровка[1].ЭтоЭталон, "БенчмаркЭталон (dev) должен быть эталоном").ЭтоИстина(); - Ожидаем.Что(Расшифровка[2].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); - Ожидаем.Что(Расшифровка[2].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); - Ожидаем.Что(Расшифровка[2].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); - Ожидаем.Что(Расшифровка[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); + Запуски = Результат.Запуски; + + Ожидаем.Что(Запуски).ИмеетДлину(4); + Ожидаем.Что(Запуски[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Запуски[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Запуски[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("dev"); + Ожидаем.Что(Запуски[1].ЭтоЭталон, "БенчмаркЭталон (dev) должен быть эталоном").ЭтоИстина(); + Ожидаем.Что(Запуски[2].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь(); + Ожидаем.Что(Запуски[2].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон"); + Ожидаем.Что(Запуски[2].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("stable"); + Ожидаем.Что(Запуски[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина(); КонецПроцедуры @@ -225,7 +226,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Запуски) .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркВ""") .ПолучитьПервый(); @@ -243,7 +244,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Запуски) .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 2") .ПолучитьПервый(); @@ -263,7 +264,7 @@ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация); // БенчмаркБ - СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка) + СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Запуски) .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 1") .ПолучитьПервый();