+{
+ [ContextProperty("Источник", "Source")]
+ public string Source =>
+#if NET6_0_OR_GREATER
+ AttachedScriptsFactory.GetModuleOfType(_type.ToString())?.Source?.Location ?? "";
+#else
+ AttachedScriptsFactory.GetModuleOfType(_type.ToString())?.ModuleInfo?.Origin ?? "";
+#endif
+
+ IValue _type;
+
+ public TypeExtension(IValue type)
+ {
+ _type = type;
+ }
+
+ [ScriptConstructor]
+ public static TypeExtension Constructor(IValue type)
+ {
+ return new TypeExtension(type);
+ }
+}
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os"
index 745a2ea..55e3154 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272.os"
@@ -4,7 +4,7 @@
// При запуске будут замеряться время выполнения, аллокации памяти (если включен мониторинг памяти),
// и другие параметры производительности.
//
-// Пример:
+// Примеры:
// &Бенчмарк
// Процедура МойБенчмарк() Экспорт
// // Тестируемый код
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260.os"
new file mode 100644
index 0000000..3c42a88
--- /dev/null
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260.os"
@@ -0,0 +1,36 @@
+// Аннотация определяет среду исполнения для запуска бенчмарков.
+//
+// Применяется только к методу ПриСозданииОбъекта.
+//
+// Параметры:
+// Версия - Строка - Версия OneScript:
+// 1) Номер версии ("1.9.3")
+// 2) Алиас ("stable", "dev")
+// 3) Абсолютный путь к исполняемому файлу ("path/to/oscript.exe")
+// Наименование - Строка - Произвольное имя среды для отчета
+// ЭтоЭталон - Булево - Флаг эталонной среды для сравнения результатов
+//
+// Примеры:
+// 1) &ИсполняющаяСреда("stable")
+// &ИсполняющаяСреда("dev")
+// &ИсполняющаяСреда("path/to/oscript.exe")
+// Процедура ПриСозданииОбъекта()
+// // ...
+// КонецПроцедуры
+//
+// 2) &ИсполняющаяСреда("1.9.3, dev")
+// Процедура ПриСозданииОбъекта()
+// // ...
+// КонецПроцедуры
+//
+// 3) &ИсполняющаяСреда(
+// Версия = "stable"
+// Наименование = "Стабильная",
+// ЭтоЭталон = Истина
+// )
+// Процедура ПриСозданииОбъекта()
+// // ...
+// КонецПроцедуры
+&Аннотация("ИсполняющаяСреда")
+Процедура ПриСозданииОбъекта(Версия, Наименование = "", ЭтоЭталон = Ложь)
+КонецПроцедуры
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\220\321\200\321\202\320\265\321\204\320\260\320\272\321\202\320\276\320\262.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\220\321\200\321\202\320\265\321\204\320\260\320\272\321\202\320\276\320\262.os"
index a665dae..78516fb 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\220\321\200\321\202\320\265\321\204\320\260\320\272\321\202\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\220\321\200\321\202\320\265\321\204\320\260\320\272\321\202\320\276\320\262.os"
@@ -3,7 +3,7 @@
// - Применяется только к методу ПриСозданииОбъекта
// - Путь может быть абсолютным или относительным
//
-// Пример:
+// Примеры:
// &КаталогАртефактов("path/to/artifacts")
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os"
index 4260dae..f43d72b 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os"
@@ -3,7 +3,7 @@
//
// Применяется только к методам бенчмарков.
//
-// Пример:
+// Примеры:
// &Бенчмарк
// &Категория("Имя категории")
// Процедура Бенчмарк() Экспорт
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os"
index 5c63e30..63bbeb3 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os"
@@ -6,7 +6,7 @@
// - Применяется только к методу ПриСозданииОбъекта
// - Если установлено "0", то количество будет рассчитано автоматически
//
-// Пример:
+// Примеры:
// &КоличествоВызововЗаИтерацию(100)
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os"
index 6c93ed9..4f9587c 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os"
@@ -5,7 +5,7 @@
//
// Применяется только к методу ПриСозданииОбъекта
//
-// Пример:
+// Примеры:
// &КоличествоИтераций(20)
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\237\321\200\320\276\320\263\321\200\320\265\320\262\320\276\321\207\320\275\321\213\321\205\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\237\321\200\320\276\320\263\321\200\320\265\320\262\320\276\321\207\320\275\321\213\321\205\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os"
index 9adbe1e..b286c0d 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\237\321\200\320\276\320\263\321\200\320\265\320\262\320\276\321\207\320\275\321\213\321\205\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\237\321\200\320\276\320\263\321\200\320\265\320\262\320\276\321\207\320\275\321\213\321\205\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\271.os"
@@ -7,7 +7,7 @@
// - Если установлено "0", то прогревочный этап будет пропущен
// - Игнорируется для стратегии "ХолодныйЗапуск"
//
-// Пример:
+// Примеры:
// &КоличествоПрогревочныхИтераций(10)
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260RatioSD.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260RatioSD.os"
index 9498316..6f94bfb 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260RatioSD.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260RatioSD.os"
@@ -9,7 +9,7 @@
// - Применяется только к методу ПриСозданииОбъекта.
// - Добавляется автоматически при наличии значимых данных
//
-// Пример:
+// Примеры:
// &КолонкаRatioSD
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
index 8ad5d5b..1420a67 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
@@ -6,7 +6,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &КолонкаВерхнийКвартиль
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\260\320\272\321\201.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\260\320\272\321\201.os"
index f56a4aa..e3b765a 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\260\320\272\321\201.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\260\320\272\321\201.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &КолонкаМакс
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os"
index 05baa42..bf54621 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os"
@@ -4,7 +4,7 @@
// - Применяется только к методу ПриСозданииОбъекта
// - Добавляется автоматически при значительном отклонении от среднего (mean)
//
-// Пример:
+// Примеры:
// &КолонкаМедиана
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\270\320\275.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\270\320\275.os"
index 95bb4d7..53006e5 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\270\320\275.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\234\320\270\320\275.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &КолонкаМин
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
index b659f84..7465ea9 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
@@ -6,7 +6,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &КолонкаНижнийКвартиль
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\222\321\200\320\265\320\274\321\217\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\270.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\222\321\200\320\265\320\274\321\217\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\270.os"
index 2e5e783..315a9b7 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\222\321\200\320\265\320\274\321\217\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\270.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\222\321\200\320\265\320\274\321\217\320\230\321\202\320\265\321\200\320\260\321\206\320\270\320\270.os"
@@ -1,13 +1,13 @@
// Задает минимальное время выполнения одной итерации бенчмарка в миллисекундах.
//
-// BenchmarkOneScript динамически подбирает количество вызовов за итерацию (см. АннотацияКоличествоВызововЗаИтерацию) так,
-// чтобы одна итерация длилась не меньше указанного времени.
+// BenchmarkOneScript динамически подбирает количество вызовов за итерацию (см. АннотацияКоличествоВызововЗаИтерацию)
+// так, чтобы одна итерация длилась не меньше указанного времени.
// Увеличивает стабильность замеров для коротких операций.
//
// - Применяется только к методу ПриСозданииОбъекта
// - Игнорируется для стратегии "ХолодныйЗапуск"
//
-// Пример:
+// Примеры:
// &МинимальноеВремяИтерации(1000)
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os"
index 5ea4110..dd68df8 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\270\320\275\320\270\320\274\320\260\320\273\321\214\320\275\320\276\320\265\320\232\320\276\320\273\320\270\321\207\320\265\321\201\321\202\320\262\320\276\320\222\321\213\320\267\320\276\320\262\320\276\320\262\320\227\320\260\320\230\321\202\320\265\321\200\320\260\321\206\320\270\321\216.os"
@@ -6,7 +6,7 @@
// - Применяется только к методу ПриСозданииОбъекта
// - Игнорируется для стратегии "ХолодныйЗапуск"
//
-// Пример:
+// Примеры:
// &МинимальноеКоличествоВызововЗаИтерацию(10)
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.os"
index 95a82cc..2717f24 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\234\320\276\320\275\320\270\321\202\320\276\321\200\320\270\320\275\320\263\320\237\320\260\320\274\321\217\321\202\320\270.os"
@@ -1,12 +1,10 @@
-// Включает мониторинг выделения памяти и сборок мусора (GC).
+// Включает мониторинг выделения памяти.
//
-// При использовании этой аннотации в отчете будут отображаться:
-// - Аллокации памяти в байтах за итерацию
-// - (нет) Количество сборок мусора для поколений (Gen 0, Gen 1, Gen 2) - пока нет необходимости, но средство получения есть
+// При использовании этой аннотации в отчете будут отображаться аллокации памяти в байтах за итерацию.
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &МониторингПамяти
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os"
index bc2d6fb..d4be7e8 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213.os"
@@ -5,7 +5,7 @@
//
// Применяется к публичным полям класса и к методам бенчмарков.
//
-// Пример:
+// Примеры:
// &Параметры(Истина, Ложь)
// Перем Флаг Экспорт;
//
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\222\321\201\320\265\320\274\320\270.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\222\321\201\320\265\320\274\320\270.os"
index cae63fa..54006da 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\222\321\201\320\265\320\274\320\270.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\222\321\201\320\265\320\274\320\270.os"
@@ -3,15 +3,16 @@
// Метод с этой аннотацией используется для подготовки данных, инициализации ресурсов
// или настройки окружения перед выполнением бенчмарков.
//
-// Пример:
-// // Параметры:
-// // Контекст - Структура:
-// // * Конфигурация - КонфигурацияБенчмарков
-// // * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
+// Параметры:
+// Контекст - Структура:
+// * Конфигурация - КонфигурацияБенчмарков
+// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
+//
+// Примеры:
// &ПередВсеми
// Процедура ПередВсеми(Контекст) Экспорт
// // Подготовка данных
// КонецПроцедуры
&Аннотация("ПередВсеми")
-Процедура ПриСозданииОбъекта()
+Процедура ПриСозданииОбъекта(Контекст)
КонецПроцедуры
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\232\320\260\320\266\320\264\321\213\320\274.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\232\320\260\320\266\320\264\321\213\320\274.os"
index fd1dccd..359e1da 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\232\320\260\320\266\320\264\321\213\320\274.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\265\321\200\320\265\320\264\320\232\320\260\320\266\320\264\321\213\320\274.os"
@@ -3,15 +3,16 @@
// Позволяет подготовить контекст для отдельного теста - например, сбросить состояние объекта,
// сгенерировать тестовые данные или выполнить предварительные проверки.
//
-// Пример:
-// // Параметры:
-// // Контекст - Структура:
-// // * ДескрипторБенчмарка - ДескрипторБенчмарка
-// // * ПараметрыМетода - Массив из Произвольный
+// Параметры:
+// Контекст - Структура:
+// * ДескрипторБенчмарка - ДескрипторБенчмарка
+// * ПараметрыМетода - Массив из Произвольный
+//
+// Примеры:
// &ПередКаждым
// Процедура ПередКаждым(Контекст) Экспорт
// // ...
// КонецПроцедуры
&Аннотация("ПередКаждым")
-Процедура ПриСозданииОбъекта()
+Процедура ПриСозданииОбъекта(Контекст)
КонецПроцедуры
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os"
index 61a7285..1dc370e 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\222\321\201\320\265\321\205.os"
@@ -3,18 +3,19 @@
// Используется для финализации: освобождения ресурсов (закрытие соединений),
// записи итоговых отчетов или выполнения других действий.
//
-// Пример:
-// // Параметры:
-// // Контекст - Структура:
-// // * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
-// // * Конфигурация - КонфигурацияБенчмарков
-// // * РезультатыЗапусков - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
-// // * Отчет - ОтчетБенчмарков
-// // * СредаОкружения - СредаОкруженияБенчмарков
+// Параметры:
+// Контекст - Структура:
+// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
+// * Конфигурация - КонфигурацияБенчмарков
+// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
+// * Отчет - ОтчетБенчмарков
+// * СредаОкружения - СредаОкруженияБенчмарков
+//
+// Примеры:
// &ПослеВсех
// Процедура ПослеВсех(Контекст) Экспорт
// // Очистка данных
// КонецПроцедуры
&Аннотация("ПослеВсех")
-Процедура ПриСозданииОбъекта()
+Процедура ПриСозданииОбъекта(Контекст)
КонецПроцедуры
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os"
index a8297a8..bf14c6c 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\237\320\276\321\201\320\273\320\265\320\232\320\260\320\266\320\264\320\276\320\263\320\276.os"
@@ -3,17 +3,18 @@
// Он используется для постобработки: валидации результатов, сброса временных значений
// или освобождения ресурсов, которые создавались для конкретного теста.
//
-// Пример:
-// // Параметры:
-// // Контекст - Структура:
-// // * ДескрипторБенчмарка - ДескрипторБенчмарка
-// // * Параметры - Массив из ПараметрБенчмарка
-// // * Замеры - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаЗамеров
-// // * Статистика - СтатистикаБенчмарка
+// Параметры:
+// Контекст - Структура:
+// * ДескрипторБенчмарка - ДескрипторБенчмарка
+// * Параметры - Массив из ПараметрБенчмарка
+// * Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров
+// * Статистика - СтатистикаБенчмарка
+//
+// Примеры:
// &ПослеКаждого
// Процедура ПослеКаждого(Контекст) Экспорт
// // ...
// КонецПроцедуры
&Аннотация("ПослеКаждого")
-Процедура ПриСозданииОбъекта()
+Процедура ПриСозданииОбъекта(Контекст)
КонецПроцедуры
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\221\321\213\321\201\321\202\321\200\321\213\321\205\320\232\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\320\274.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\221\321\213\321\201\321\202\321\200\321\213\321\205\320\232\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\320\274.os"
index dd6cc17..0f6f6ed 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\221\321\213\321\201\321\202\321\200\321\213\321\205\320\232\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\320\274.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\221\321\213\321\201\321\202\321\200\321\213\321\205\320\232\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\320\274.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &СортировкаОтБыстрыхКМедленным
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\321\205\320\232\320\221\321\213\321\201\321\202\321\200\321\213\320\274.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\321\205\320\232\320\221\321\213\321\201\321\202\321\200\321\213\320\274.os"
index fff66e6..913fd0c 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\321\205\320\232\320\221\321\213\321\201\321\202\321\200\321\213\320\274.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\236\321\202\320\234\320\265\320\264\320\273\320\265\320\275\320\275\321\213\321\205\320\232\320\221\321\213\321\201\321\202\321\200\321\213\320\274.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &СортировкаОтМедленныхКБыстрым
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\237\320\276\320\234\320\265\321\202\320\276\320\264\321\203.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\237\320\276\320\234\320\265\321\202\320\276\320\264\321\203.os"
index 170b53d..6a38873 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\237\320\276\320\234\320\265\321\202\320\276\320\264\321\203.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\320\276\321\200\321\202\320\270\321\200\320\276\320\262\320\272\320\260\320\237\320\276\320\234\320\265\321\202\320\276\320\264\321\203.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &СортировкаПоМетоду
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\237\321\200\320\276\320\277\321\203\321\201\320\272\320\275\320\260\321\217\320\241\320\277\320\276\321\201\320\276\320\261\320\275\320\276\321\201\321\202\321\214.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\237\321\200\320\276\320\277\321\203\321\201\320\272\320\275\320\260\321\217\320\241\320\277\320\276\321\201\320\276\320\261\320\275\320\276\321\201\321\202\321\214.os"
index b2e7823..4cf134e 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\237\321\200\320\276\320\277\321\203\321\201\320\272\320\275\320\260\321\217\320\241\320\277\320\276\321\201\320\276\320\261\320\275\320\276\321\201\321\202\321\214.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\237\321\200\320\276\320\277\321\203\321\201\320\272\320\275\320\260\321\217\320\241\320\277\320\276\321\201\320\276\320\261\320\275\320\276\321\201\321\202\321\214.os"
@@ -6,7 +6,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &СтратегияПропускнаяСпособность
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\245\320\276\320\273\320\276\320\264\320\275\321\213\320\271\320\227\320\260\320\277\321\203\321\201\320\272.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\245\320\276\320\273\320\276\320\264\320\275\321\213\320\271\320\227\320\260\320\277\321\203\321\201\320\272.os"
index 3892fc1..abd2c91 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\245\320\276\320\273\320\276\320\264\320\275\321\213\320\271\320\227\320\260\320\277\321\203\321\201\320\272.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\241\321\202\321\200\320\260\321\202\320\265\320\263\320\270\321\217\320\245\320\276\320\273\320\276\320\264\320\275\321\213\320\271\320\227\320\260\320\277\321\203\321\201\320\272.os"
@@ -6,7 +6,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &СтратегияХолодныйЗапуск
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Html.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Html.os"
index 6e12a4a..82c6514 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Html.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Html.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &ЭкспортHtml
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Json.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Json.os"
index c77b427..dd76207 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Json.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Json.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &ЭкспортJson
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Markdown.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Markdown.os"
index e185867..65e597a 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Markdown.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Markdown.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &ЭкспортMarkdown
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os"
index 7cb73d4..aa1ce58 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\320\272\321\201\320\277\320\276\321\200\321\202Xml.os"
@@ -2,7 +2,7 @@
//
// Применяется только к методу ПриСозданииОбъекта.
//
-// Пример:
+// Примеры:
// &ЭкспортXml
// Процедура ПриСозданииОбъекта()
// // ...
diff --git "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\321\202\320\260\320\273\320\276\320\275.os" "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\321\202\320\260\320\273\320\276\320\275.os"
index e95d3d6..0b46c46 100644
--- "a/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\321\202\320\260\320\273\320\276\320\275.os"
+++ "b/src/BenchmarkOneScript/annotations/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\255\321\202\320\260\320\273\320\276\320\275.os"
@@ -5,7 +5,7 @@
//
// Применяется только к методам бенчмарков.
//
-// Пример:
+// Примеры:
// &Бенчмарк
// &Эталон
// Процедура Бенчмарк() Экспорт
diff --git a/src/BenchmarkOneScript/cmd/main.os b/src/BenchmarkOneScript/cmd/main.os
index a46ce9f..5bdb9c4 100644
--- a/src/BenchmarkOneScript/cmd/main.os
+++ b/src/BenchmarkOneScript/cmd/main.os
@@ -1,5 +1,6 @@
#Использовать autumn
#Использовать autumn-cli
+#Использовать "../../../"
#Использовать "."
Поделка = Новый Поделка();
diff --git "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os" "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os"
index 46ab201..3ce69bf 100644
--- "a/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os"
+++ "b/src/BenchmarkOneScript/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\227\320\260\320\277\321\203\321\201\320\272\320\260.os"
@@ -1,6 +1,5 @@
// BSLLS:MissingVariablesDescription-off
-#Использовать "../../../../"
#Использовать fs
#Использовать logos
@@ -29,7 +28,7 @@
&ТЧисло
Перем _КоличествоВызововЗаИтерацию; // Число
-&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов (md, json, xml, html)")
+&Опция(Имя = "e exporters", Описание = "Форматы экспорта результатов через запятую (md, json, xml, html)")
&ТСтрока
Перем _Экспортеры; // Строка
@@ -38,18 +37,30 @@
Перем _КаталогАртефактов; // Строка
&Опция(Имя = "coldstart", Описание = "Стратегия 'Холодный запуск'")
-&ТБулево
+&Флаг
Перем _ХолодныйЗапуск; // Булево, Неопределено
&Опция(Имя = "throughput", Описание = "Стратегия 'Пропускная способность'")
-&ТБулево
+&Флаг
Перем _ПропускнаяСпособность; // Булево, Неопределено
-&Аргумент(Имя = "FILE", Описание = "Каталог, полный путь к файлу или имя файла в текущей директории")
+&Опция(Имя = "c config", Описание = "Файл конфигурации бенчмарков в формате JSON")
+&ТСтрока
+Перем _ФайлКонфигурации; // Строка
+
+&Опция(Имя = "runtime", Описание = "Версии OneScript через запятую (current, stable, dev, x.x.x)")
&ТСтрока
-Перем _ПутьКФайлу; // Строка
+Перем _ИсполняющаяСреда; // Строка, Неопределено
-Перем _Лог;
+&Опция(Имя = "worker", Описание = "Режим worker")
+&Флаг
+&ПоУмолчанию(Ложь)
+&СкрытьВСправке
+Перем _ЭтоВоркер; // Булево
+
+&Аргумент(Имя = "FILE", Описание = "Каталог, полный путь к файлу или имя файла в текущей директории")
+&ТМассивСтрок
+Перем _МассивФайлов; // Массив из Строка
&КомандаПриложения(Имя = "run", Описание = "Запуск бенчмарков")
Процедура ПриСозданииОбъекта()
@@ -58,45 +69,76 @@
&ВыполнениеКоманды
Процедура Запустить() Экспорт
- Если ФС.КаталогСуществует(_ПутьКФайлу) Тогда
- Бенчмаркинг.ЗапуститьИзКаталога(_ПутьКФайлу, _Рекурсивно, Конфигурация());
- Возврат;
- КонецЕсли;
+ УстановитьРежимВоркер();
- Файл = ФайлСценария();
- Если Файл = Неопределено Тогда
- _Лог.Ошибка("Файл <%1> не существует", _ПутьКФайлу);
- Возврат;
- КонецЕсли;
-
- Тип = Бенчмаркинг.ПодключитьКласс(Файл.ПолноеИмя);
- Если Не Тип = Неопределено Тогда
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- Конфигурация.Объединить(Конфигурация());
- Бенчмаркинг.Запустить(Тип, Конфигурация);
- КонецЕсли;
+ Для Каждого Каталог Из КаталогиБенчмарков() Цикл
+ Бенчмаркинг.ЗапуститьИзКаталога(Каталог, _Рекурсивно, ПрочитатьКонфигурацию());
+ КонецЦикла;
+
+ Для Каждого ИмяФайла Из ФайлыБенчмарков() Цикл
+ Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла);
+ Если Не Тип = Неопределено Тогда
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ Конфигурация.Объединить(ПрочитатьКонфигурацию());
+ Бенчмаркинг.Запустить(Тип, Конфигурация);
+ КонецЕсли;
+ КонецЦикла;
КонецПроцедуры
-Функция ФайлСценария()
+Функция КаталогиБенчмарков()
+
+ Каталоги = Новый Массив();
+
+ Для Каждого ИмяФайла Из _МассивФайлов Цикл
+ Если ФС.КаталогСуществует(ИмяФайла) Тогда
+ Каталоги.Добавить(ИмяФайла);
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Каталоги;
+
+КонецФункции
+
+Функция ФайлыБенчмарков()
+
+ Файлы = Новый Массив();
+
+ Для Каждого ИмяФайла Из _МассивФайлов Цикл
+ Если Не ФС.КаталогСуществует(ИмяФайла) Тогда
+ Файлы.Добавить(ПолноеИмяФайлаСценария(ИмяФайла));
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Файлы;
+
+КонецФункции
+
+Функция ПолноеИмяФайлаСценария(ИмяФайла)
ВариантыПутей = Новый Массив();
- ВариантыПутей.Добавить(_ПутьКФайлу);
- ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), _ПутьКФайлу));
- ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), _ПутьКФайлу + ".os"));
-
- Для Каждого Путь Из ВариантыПутей Цикл
- Файл = Новый Файл(Путь);
- Если Файл.Существует() Тогда
- Возврат Файл;
+ ВариантыПутей.Добавить(ИмяФайла);
+ ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ИмяФайла));
+ ВариантыПутей.Добавить(ОбъединитьПути(ТекущийКаталог(), ИмяФайла + ".os"));
+
+ Для Каждого ИмяФайла Из ВариантыПутей Цикл
+ Если ФС.ФайлСуществует(ИмяФайла) Тогда
+ Возврат ИмяФайла;
КонецЕсли;
КонецЦикла;
+ ВызватьИсключение СтрШаблон("Файл <%1> не существует", ИмяФайла);
+
КонецФункции
-Функция Конфигурация()
+Функция ПрочитатьКонфигурацию()
- Конфигурация = Новый КонфигурацияБенчмарков();
+ Если ЗначениеЗаполнено(_ФайлКонфигурации) Тогда
+ Сериализатор = Новый СериализаторКонфигурацииБенчмарков();
+ Конфигурация = Сериализатор.ДесериализоватьИзJSON(_ФайлКонфигурации);
+ Иначе
+ Конфигурация = Новый КонфигурацияБенчмарков();
+ КонецЕсли;
Если _МониторингПамяти = Истина Тогда
Конфигурация.ДобавитьМониторингПамяти();
@@ -131,15 +173,12 @@
КонецЕсли;
ПрочитатьЭкспортеры(Конфигурация);
+ ПрочитатьИсполняющуюСреду(Конфигурация);
Возврат Конфигурация;
КонецФункции
-Функция ЭтоЧисло(Значение)
- Возврат ТипЗнч(Значение) = Тип("Число");
-КонецФункции
-
Процедура ПрочитатьЭкспортеры(Конфигурация)
Если Не ЗначениеЗаполнено(_Экспортеры) Тогда
@@ -165,4 +204,29 @@
КонецПроцедуры
-_Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.cli");
\ No newline at end of file
+Процедура ПрочитатьИсполняющуюСреду(Конфигурация)
+
+ Если Не ЗначениеЗаполнено(_ИсполняющаяСреда) Тогда
+ Возврат;
+ КонецЕсли;
+
+ Конфигурация.ОчиститьВерсииИсполняющейСреды();
+
+ Если НРег(_ИсполняющаяСреда) = "current" Тогда
+ Возврат;
+ КонецЕсли;
+
+ ВерсииИсполняющейСреды = СтрРазделить(_ИсполняющаяСреда, ",");
+ Для Каждого Версия Из ВерсииИсполняющейСреды Цикл
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды(Версия);
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура УстановитьРежимВоркер()
+ УстановитьПеременнуюСреды("BENCHMARK_WORKER", Формат(_ЭтоВоркер, "БЛ=0; БИ=1"));
+КонецПроцедуры
+
+Функция ЭтоЧисло(Значение)
+ Возврат ТипЗнч(Значение) = Тип("Число");
+КонецФункции
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os"
index 5bced76..3db6d92 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262RatioSD.os"
@@ -26,14 +26,14 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
// Произвольный
Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off
- Если СтрокаРезультата.ДескрипторБенчмарка.ЭтоЭталон() Тогда
+ Если СтрокаРезультата.ЭтоЭталон Тогда
Возврат 0;
КонецЕсли;
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os"
new file mode 100644
index 0000000..9dd095b
--- /dev/null
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\201\320\270\321\217\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\265\320\271\320\241\321\200\320\265\320\264\321\213.os"
@@ -0,0 +1,34 @@
+#Использовать delegate
+
+// Создает экземпляр колонки
+//
+// Возвращаемое значение:
+// КолонкаОтчетаБенчмарков
+Функция Создать() Экспорт
+
+ Колонка = Новый КолонкаОтчетаБенчмарков(КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды);
+ Колонка.Заголовок = "Runtime";
+ Колонка.ЗначениеДелегат = Делегаты.Создать(ЭтотОбъект, "Значение");
+
+ Возврат Колонка;
+
+КонецФункции
+
+// Возвращает значение колонки
+//
+// Параметры:
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
+// Колонка - КолонкаОтчетаБенчмарков
+//
+// Возвращаемое значение:
+// Строка
+Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off
+
+ ИсполняющаяСреда = СтрокаРезультата.ИсполняющаяСреда;
+ Если ЗначениеЗаполнено(ИсполняющаяСреда.Наименование) Тогда
+ Возврат СтрШаблон("%1 (%2)", ИсполняющаяСреда.Наименование, ИсполняющаяСреда.Версия);
+ КонецЕсли;
+
+ Возврат СтрокаРезультата.ИсполняющаяСреда.Версия;
+
+КонецФункции
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
index 9e8319d..1d6d1e3 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\320\265\321\200\321\205\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os"
index 96866a0..cc0428b 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222\321\213\320\264\320\265\320\273\321\217\320\265\320\274\320\260\321\217\320\237\320\260\320\274\321\217\321\202\321\214.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os"
index 97c3884..00b3aef 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\260\321\202\320\265\320\263\320\276\321\200\320\270\321\217.os"
@@ -17,7 +17,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os"
index 90ff898..bdc4af0 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\232\320\276\321\215\321\204\321\204\320\270\321\206\320\270\320\265\320\275\321\202\320\237\321\200\320\276\320\270\320\267\320\262\320\276\320\264\320\270\321\202\320\265\320\273\321\214\320\275\320\276\321\201\321\202\320\270.os"
@@ -24,14 +24,14 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
// Произвольный
Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off
- Если СтрокаРезультата.ДескрипторБенчмарка.ЭтоЭталон() Тогда
+ Если СтрокаРезультата.ЭтоЭталон Тогда
Возврат 1;
КонецЕсли;
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os"
index 47abb2c..8ae23b5 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\260\320\272\321\201.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os"
index 7f88dc6..8d47e23 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\320\264\320\270\320\260\320\275\320\260.os"
@@ -22,7 +22,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os"
index 35f20c3..4715fac 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264.os"
@@ -17,7 +17,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os"
index 41b7330..f2985fe 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\234\320\270\320\275.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
index f2eda86..f56dee8 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\235\320\270\320\266\320\275\320\270\320\271\320\232\320\262\320\260\321\200\321\202\320\270\320\273\321\214.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os"
index f99bf9f..02aa94b 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\236\320\277\320\265\321\200\320\260\321\206\320\270\320\271\320\222\320\241\320\265\320\272\321\203\320\275\320\264\321\203.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os"
index 889c506..2af6551 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200.os"
@@ -21,7 +21,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os"
index 830c2b7..f835c83 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\237\321\200\320\276\321\206\320\265\320\275\321\202\320\270\320\273\321\214.os"
@@ -24,7 +24,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os"
index 7080f66..9c0d647 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\200\320\265\320\264\320\275\320\265\320\265.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os"
index b199b09..0d24a5a 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\260\321\217\320\236\321\210\320\270\320\261\320\272\320\260.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os"
index 2668d5d..a0be12e 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\320\276\320\265\320\236\321\202\320\272\320\273\320\276\320\275\320\265\320\275\320\270\320\265.os"
@@ -20,7 +20,7 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os" "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os"
index 1a49f67..a24378e 100644
--- "a/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os"
+++ "b/src/BenchmarkOneScript/columns/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\255\321\202\320\260\320\273\320\276\320\275.os"
@@ -18,13 +18,13 @@
// Возвращает значение колонки
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
// Произвольный
Функция Значение(СтрокаРезультата, Колонка) Экспорт // BSLLS:UnusedParameters-off
- Возврат СтрокаРезультата.ДескрипторБенчмарка.ЭтоЭталон();
+ Возврат СтрокаРезультата.ЭтоЭталон;
КонецФункции
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
new file mode 100644
index 0000000..a7aca7f
--- /dev/null
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\227\320\260\320\277\321\203\321\201\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -0,0 +1,191 @@
+#Использовать logos
+
+Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков
+Перем _Конфигурация; // КонфигурацияБенчмарков
+Перем _СписокОшибок; // Массив из Строка
+
+// Выполняет комплексную проверку для запуска бенчмарков
+//
+// Параметры:
+// ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
+// Конфигурация - КонфигурацияБенчмарков
+Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация)
+ _ДескрипторыБенчмарков = ДескрипторыБенчмарков;
+ _Конфигурация = Конфигурация;
+ _СписокОшибок = Новый Массив();
+КонецПроцедуры
+
+#Область ПрограммныйИнтерфейс
+
+// Проверяет возможность выполнения бенчмарков
+//
+// Возвращаемое значение:
+// Булево - Истина, если все проверки пройдены (ошибок нет),
+// Ложь в противном случае
+Функция ЗапускВозможен() Экспорт
+
+ _СписокОшибок.Очистить();
+
+ ПроверитьНаличиеБенчмарков();
+ ПроверитьТипыБенчмарков();
+ ПроверитьЭталоннуюВерсиюИсполняющейСреды();
+ ПроверитьЭталонныеБенчмарки();
+ ПроверитьПараметрыНаВозможностьСериализации();
+ ПроверитьОтсутствиеДелегатовПриНаличииДругойВерсииИсполняющейСреды();
+
+ Возврат _СписокОшибок.Количество() = 0;
+
+КонецФункции
+
+// Формирует сводный отчет об ошибках валидации в виде строки
+//
+// Возвращаемое значение:
+// Строка
+Функция ПолучитьТекстОшибок() Экспорт
+
+ Подстроки = Новый Массив();
+ Если _СписокОшибок.Количество() = 0 Тогда
+ Возврат "";
+ КонецЕсли;
+
+ Подстроки.Добавить("Валидация запуска не пройдена. Обнаружены ошибки:");
+
+ Для Каждого ТекстОшибки Из _СписокОшибок Цикл
+ Подстроки.Добавить("- " + ТекстОшибки);
+ КонецЦикла;
+
+ Возврат СтрСоединить(Подстроки, Символы.ПС);
+
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ПроверитьНаличиеБенчмарков()
+
+ Дескриптор = _ДескрипторыБенчмарков.ПолучитьПервый();
+ Если Дескриптор = Неопределено Тогда
+ _СписокОшибок.Добавить("Не найдены бенчмарки для запуска");
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПроверитьТипыБенчмарков()
+
+ ПредыдущийТип = Неопределено;
+ Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл
+
+ ТекущийТип = ДескрипторБенчмарка.ТипОбъекта();
+ Если ПредыдущийТип = Неопределено Тогда
+ ПредыдущийТип = ТекущийТип;
+ КонецЕсли;
+
+ Если Не ПредыдущийТип = ТекущийТип Тогда
+ ТекстОшибки = СтрШаблон("Запрещается запускать бенчмарки с разными типами: %1, %2...", ПредыдущийТип, ТекущийТип);
+ _СписокОшибок.Добавить(ТекстОшибки);
+ Возврат;
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ПроверитьЭталоннуюВерсиюИсполняющейСреды()
+
+ Отбор = Новый Структура("ЭтоЭталон", Истина);
+ НайденныеСтроки = _Конфигурация.ВерсииИсполняющейСреды().НайтиСтроки(Отбор);
+
+ Если НайденныеСтроки.Количество() > 1 Тогда
+ _СписокОшибок.Добавить("Допускается только одна эталонная версия исполняющей среды");
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПроверитьЭталонныеБенчмарки()
+
+ БылЭталонПоКатегории = Новый Соответствие();
+ Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл
+
+ Если Не ДескрипторБенчмарка.ЭтоЭталон() Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Категория = ДескрипторБенчмарка.Категория();
+
+ Если БылЭталонПоКатегории[Категория] = Истина Тогда
+ Если ЗначениеЗаполнено(Категория) Тогда
+ _СписокОшибок.Добавить("В пределах одной категории может быть только один эталонный бенчмарк");
+ Иначе
+ _СписокОшибок.Добавить("Может быть только один эталонный бенчмарк");
+ КонецЕсли;
+ КонецЕсли;
+
+ БылЭталонПоКатегории[Категория] = Истина;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ПроверитьПараметрыНаВозможностьСериализации()
+
+ Если Не ЕстьЭталоны() Или _Конфигурация.ИсполняющаяСредаОграниченаТекущей() Тогда
+ Возврат;
+ КонецЕсли;
+
+ Для Каждого Параметр Из _Конфигурация.Параметры() Цикл
+ ПроверитьПараметрНаВозможностьСериализации(Параметр);
+ КонецЦикла;
+
+ Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл
+ Для Каждого НаборыПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл
+ Для Каждого Параметр Из НаборыПараметров Цикл
+ ПроверитьПараметрНаВозможностьСериализации(Параметр);
+ КонецЦикла;
+ КонецЦикла;
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ПроверитьПараметрНаВозможностьСериализации(Параметр)
+
+ ШаблонОшибки =
+ "Значение параметра <%1> должно быть сериализуемым для определения эталонов между разными версиями OneScript";
+
+ Если Не СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Параметр.Значение) Тогда
+ ТекстОшибки = СтрШаблон(ШаблонОшибки, Параметр.Имя);
+ Если _СписокОшибок.Найти(ТекстОшибки) = Неопределено Тогда
+ _СписокОшибок.Добавить(ТекстОшибки);
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПроверитьОтсутствиеДелегатовПриНаличииДругойВерсииИсполняющейСреды()
+
+ ТекстОшибки =
+ "Использование делегатов как обработчиков событий не поддерживается при запуске в разных версиях OneScript";
+
+ Если _Конфигурация.ИсполняющаяСредаОграниченаТекущей() Тогда
+ Возврат;
+ КонецЕсли;
+
+ Для Каждого ОбработчикСобытия Из _Конфигурация.ОбработчикиСобытий() Цикл
+ Если ТипЗнч(ОбработчикСобытия.Обработчик) = Тип("Делегат") Тогда
+ _СписокОшибок.Добавить(ТекстОшибки);
+ Возврат;
+ КонецЕсли;
+ КонецЦикла;
+
+КонецПроцедуры
+
+Функция ЕстьЭталоны()
+
+ ЕстьЭталоннаяВерсия = _Конфигурация.ЭталоннаяВерсияИсполняющейСреды() <> Неопределено;
+ ЕстьЭталонныеБенчмарки = _ДескрипторыБенчмарков.ПолучитьЭталонные().Количество() > 0;
+
+ Возврат ЕстьЭталоннаяВерсия Или ЕстьЭталонныеБенчмарки;
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os"
index 4f6a5eb..fac6b6f 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os"
@@ -10,11 +10,11 @@
// Дескриптор бенчмарка
//
// Параметры:
-// Объект - Произвольный - Экземпляр класса бенчмарков
+// Объект - Тип, Произвольный - Тип или экземпляр класса бенчмарков
// Метод - Строка - Метод бенчмарка
Процедура ПриСозданииОбъекта(Объект, Метод)
- _Тип = ТипЗнч(Объект);
+ _Тип = ?(ТипЗнч(Объект) = Тип("Тип"), Объект, ТипЗнч(Объект));
_Метод = Метод;
_НаборыПараметров = Новый Массив();
_ЭтоЭталон = Ложь;
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index e960289..dcafb0d 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -1,11 +1,12 @@
+#Использовать fs
#Использовать asserts
-#Использовать coloratos
+#Использовать tempfiles
#Использовать logos
-#Использовать fs
-Перем _ОбъектБенчмарков; // Экземпляр класса бенчмарков
+Перем _ОбъектБенчмарков; // Экземпляр класса с бенчмарками
Перем _Конфигурация; // КонфигурацияБенчмарков
Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков
+Перем _МенеджерВременныхФайлов; // МенеджерВременныхФайлов
Перем _СтатистикаСборщикаМусора; // СтатистикаСборщикаМусора
Перем _Хронометр; // Хронометр
Перем _Лог; // Лог
@@ -13,15 +14,30 @@
// Запускает бенчмарки
//
// Параметры:
-// Источник - Тип - Класс бенчмарков
-// - КоллекцияДескрипторовБенчмарков
-// - ДескрипторБенчмарка
-// - Произвольный - Экземпляр класса с бенчмарками
-// Конфигурация - КонфигурацияБенчмарков - Полностью заменяет текущую конфигурацию на переданную
-Процедура ПриСозданииОбъекта(Источник, Конфигурация = Неопределено)
+// ИсточникБенчмарков - Тип - Класс, содержащий бенчмарки
+// - КоллекцияДескрипторовБенчмарков
+// - ДескрипторБенчмарка
+// - Произвольный - Экземпляр класса с бенчмарками
+// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков
+Процедура ПриСозданииОбъекта(ИсточникБенчмарков, Конфигурация = Неопределено)
+
+ ОберткаИсточника = Новый ОберткаИсточникаБенчмарков(ИсточникБенчмарков);
+
+ _ОбъектБенчмарков = ОберткаИсточника.ОбъектБенчмарков();
+ _ДескрипторыБенчмарков = ОберткаИсточника.Дескрипторы();
+ _Хронометр = Новый Хронометр();
- Инициализировать(Источник, Конфигурация);
+ Если Не Конфигурация = Неопределено Тогда
+ _Конфигурация = Конфигурация;
+ Иначе
+ _Конфигурация = Новый КонфигурацияБенчмарков(_ОбъектБенчмарков);
+ КонецЕсли;
+ Если _Конфигурация.ТребуетсяМониторингПамяти() Тогда
+ _СтатистикаСборщикаМусора = Новый СтатистикаСборщикаМусора();
+ КонецЕсли;
+
+ _МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов();
_Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЗапускательБенчмарков");
КонецПроцедуры
@@ -35,13 +51,18 @@
// * ИмяКласса - Строка - Имя класса
// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
// * Конфигурация - КонфигурацияБенчмарков
-// * СредаОкружения - СредаОкруженияБенчмарков
// * Отчет - ОтчетБенчмарков
-// * РезультатыЗапусков - ТаблицаЗначений:
+// * СредаОкружения - СредаОкруженияБенчмарков
+// * Расшифровка - ТаблицаЗначений:
// ** ДескрипторБенчмарка - ДескрипторБенчмарка
// ** Параметры - Массив из ПараметрБенчмарка
// ** Эталон - СтрокаТаблицыЗначений, Неопределено
+// ** ЭтоЭталон - Булево
// ** Статистика - СтатистикаБенчмарка
+// ** ИсполняющаяСреда - Структура:
+// *** Версия - Строка
+// *** Алиас - Строка
+// *** Наименование - Строка
// ** Замеры - ТаблицаЗначений:
// *** Этап - см. ЭтапыБенчмарка
// *** НомерИтерации - Число
@@ -52,21 +73,28 @@
// *** ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию
Функция Запустить() Экспорт
- _Хронометр = Новый Хронометр();
+ ЭтоВоркер = Бенчмаркинг.ЭтоВоркер();
+ ЗапускатьВТекущейСреде = _Конфигурация.ИсполняющаяСредаОграниченаТекущей() Или ЭтоВоркер;
- Если _Конфигурация.ТребуетсяМониторингПамяти() Тогда
- _СтатистикаСборщикаМусора = Новый СтатистикаСборщикаМусора();
+ Валидатор = Новый ВалидаторЗапускаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация);
+ Если Не Валидатор.ЗапускВозможен() Тогда
+ ВызватьИсключение Валидатор.ПолучитьТекстОшибок();
КонецЕсли;
- ВывестиКонфигурацию();
- ПрогретьИнструментыЗамера();
- ПроверитьБенчмарки();
+ Если ЗапускатьВТекущейСреде Тогда
+ Результат = ЗапуститьВсеБенчмарки();
+ Иначе
+ Результат = ЗапуститьБенчмаркиВКаждойВерсии();
+ КонецЕсли;
+
+ Если Не ЭтоВоркер Тогда
+ ВывестиРезультатыБенчмарков(Результат);
+ КонецЕсли;
- Результат = ЗапуститьВсеБенчмарки();
-
- ВывестиРезультатыБенчмарков(Результат);
ЭкспортироватьРезультаты(Результат);
+ _МенеджерВременныхФайлов.Удалить();
+
Возврат Результат;
КонецФункции
@@ -75,53 +103,221 @@
#Область СлужебныеПроцедурыИФункции
-Процедура Инициализировать(Источник, Конфигурация)
+#Область ЗапускВДругихСредах
- Если ТипЗнч(Источник) = Тип("Тип") Тогда
+Функция ЗапуститьБенчмаркиВКаждойВерсии()
+
+ ПередаваемаяКонфигурация = _Конфигурация
+ .Скопировать()
+ .УстановитьКаталогАртефактов(_МенеджерВременныхФайлов.НовоеИмяФайла())
+ .УдалитьЭкспортеры()
+ .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json);
+
+ МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков();
+ Результат = НовыйРезультат(МенеджерРасшифровкиРезультатов);
+ Результат.СредаОкружения.ВерсияИсполняющейСреды = "";
+
+ Для Каждого ИсполняющаяСреда Из _Конфигурация.ВерсииИсполняющейСреды() Цикл
+ ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, ПередаваемаяКонфигурация, Результат.Расшифровка);
+ КонецЦикла;
- _ОбъектБенчмарков = Новый(Источник);
+ МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(_Конфигурация);
- ИначеЕсли ТипЗнч(Источник) = Тип("КоллекцияДескрипторовБенчмарков") Тогда
+ Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, Результат.Расшифровка);
+ Результат.Отчет = Построитель.Сформировать();
- Ожидаем.Что(Источник.Количество(), "Коллекция дескрипторов бенчмарков пустая").Больше(0);
-
- ТипОбъекта = Источник.ПолучитьПервый().ТипОбъекта();
- _ОбъектБенчмарков = Новый(ТипОбъекта);
- _ДескрипторыБенчмарков = Источник;
-
- ИначеЕсли ТипЗнч(Источник) = Тип("ДескрипторБенчмарка") Тогда
+ Возврат Результат;
- _ОбъектБенчмарков = Новый(Источник.ТипОбъекта());
- _ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков();
- _ДескрипторыБенчмарков.Добавить(Источник);
+КонецФункции
- Иначе
+Процедура ЗапуститьВИсполняющейСреде(ИсполняющаяСреда, Конфигурация, РасшифровкаРезультатов)
+
+ ТаймаутМинут = 10;
+ МиллисекундВМинуте = 60000;
+ КаталогАртефактов = Конфигурация.КаталогАртефактов();
+
+ _Лог.Отладка("Запуск процесса в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия);
+
+ ФС.ОбеспечитьПустойКаталог(КаталогАртефактов);
+
+ ВывестиЗаголовок(ИсполняющаяСреда.Версия);
+ ВывестиКонфигурацию();
- _ОбъектБенчмарков = Источник;
+ Процесс = ПодготовитьПроцесс(Конфигурация, ИсполняющаяСреда.Версия);
+ Процесс.Запустить();
+ ВремяНачала = ТекущаяУниверсальнаяДата();
+
+ Пока Не ПроверитьЗавершениеПроцесса(Процесс) Цикл
+ ПрошлоМинут = (ТекущаяУниверсальнаяДата() - ВремяНачала) / МиллисекундВМинуте;
+ Если ПрошлоМинут >= ТаймаутМинут Тогда
+ Процесс.Завершить();
+ ВызватьИсключение СтрШаблон("Превышено время ожидания (%1 мин.) завершения дочернего процесса", ТаймаутМинут);
+ КонецЕсли;
+ КонецЦикла;
+
+ Если Процесс.КодВозврата <> 0 Тогда
+ ВызватьИсключение СтрШаблон("Завершение процесса с ошибкой в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия);
КонецЕсли;
+
+ ПрочитатьРасшифровкуЗамеровИзJSON(РасшифровкаРезультатов, КаталогАртефактов, ИсполняющаяСреда);
+
+ _Лог.Отладка("Завершение процесса в исполняющей среде версии <%1>", ИсполняющаяСреда.Версия);
+
+КонецПроцедуры
+
+Функция ПодготовитьПроцесс(Конфигурация, Версия)
- Если Не Конфигурация = Неопределено Тогда
- _Конфигурация = Конфигурация;
- Иначе
- _Конфигурация = Новый КонфигурацияБенчмарков(_ОбъектБенчмарков);
+ Тип = _ДескрипторыБенчмарков.ПолучитьПервый().ТипОбъекта();
+ ИмяФайлаИсполняющейСреды = ИмяФайлаИсполняющейСреды(Версия);
+ ИмяФайлаТочкиВхода = ТочкаВходаКонсольногоПриложения();
+ ИмяФайлаКонфигурации = ПолучитьИмяФайлаКонфигурацииДляПроцесса(Конфигурация);
+ ИмяФайлаТипа = Новый РасширениеТипа(Тип).Источник;
+ КаталогБиблиотек = ИсполняющаяСредаБенчмарков.КаталогБиблиотек();
+
+ ПеременныеСреды = ПеременныеСреды();
+ ПеременныеСреды.Вставить("OSCRIPT_CONFIG", СтрШаблон("lib.system=%1; systemlanguage=ru", КаталогБиблиотек));
+
+ СтрокаКоманды = Новый Массив();
+
+ // oscript.exe
+ СтрокаКоманды.Добавить(ИмяФайлаИсполняющейСреды);
+
+ // benchos
+ СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаТочкиВхода));
+
+ // run
+ СтрокаКоманды.Добавить("run");
+
+ // --worker
+ СтрокаКоманды.Добавить("--worker");
+
+ // --config
+ СтрокаКоманды.Добавить("--config");
+ СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаКонфигурации));
+
+ // FILE
+ СтрокаКоманды.Добавить(ОбернутьВКавычки(ИмяФайлаТипа));
+
+ СтрокаКоманды = СтрСоединить(СтрокаКоманды, " ");
+
+ _Лог.Отладка("Строка запуска: " + СтрокаКоманды);
+
+ Попытка
+ Процесс = СоздатьПроцесс(СтрокаКоманды, ".", Истина, , , ПеременныеСреды);
+ Исключение
+ ТекстОшибки = ИнформацияОбОшибке().ПодробноеОписаниеОшибки();
+ ВызватьИсключение СтрШаблон("Не удалось запустить процесс бенчмаркинга для версии <%1>.
+ |Ошибка: %2",
+ Версия,
+ ТекстОшибки);
+ КонецПопытки;
+
+ Возврат Процесс;
+
+КонецФункции
+
+Функция ПроверитьЗавершениеПроцесса(Процесс)
+
+ ПериодОпросаВМиллисекундах = 100;
+
+ Приостановить(ПериодОпросаВМиллисекундах);
+
+ Если Процесс.ПотокВывода.ЕстьДанные Тогда
+ СтрокаВывода = Процесс.ПотокВывода.Прочитать();
+ ВывестиСтроку(СтрокаВывода);
+ КонецЕсли;
+
+ Если Процесс.ПотокОшибок.ЕстьДанные Тогда
+ СтрокаВывода = Процесс.ПотокОшибок.Прочитать();
+ ВывестиСтроку(СтрокаВывода);
КонецЕсли;
- Если _ДескрипторыБенчмарков = Неопределено Тогда
- _ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(_ОбъектБенчмарков);
+ Возврат Процесс.Завершен;
+
+КонецФункции
+
+Функция ПолучитьИмяФайлаКонфигурацииДляПроцесса(Конфигурация)
+
+ ПутьКФайлу = _МенеджерВременныхФайлов.СоздатьФайл("json");
+
+ Сериализатор = Новый СериализаторКонфигурацииБенчмарков();
+ Сериализатор.СериализоватьВJSON(Конфигурация, ПутьКФайлу);
+
+ Возврат ПутьКФайлу;
+
+КонецФункции
+
+Функция ТочкаВходаКонсольногоПриложения()
+ Возврат Новый Файл(ОбъединитьПути(ТекущийСценарий().Каталог, "../../cmd/main.os")).ПолноеИмя;
+КонецФункции
+
+Функция ИмяФайлаИсполняющейСреды(Версия)
+
+ Если ФС.ФайлСуществует(Версия) Тогда
+ Возврат Версия;
+ КонецЕсли;
+
+ КаталогУстановки = ИсполняющаяСредаБенчмарков.КаталогУстановки();
+ Если КаталогУстановки = Неопределено Тогда
+ ВызватьИсключение "Не найден каталог с установленными версиями OneScript.
+ |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно.";
+ КонецЕсли;
+
+ _Лог.Отладка(СтрШаблон("Каталог с установленными версиями OneScript: %1", КаталогУстановки));
+
+ ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия);
+
+ Если ИмяФайла = Неопределено Тогда
+ ВызватьИсключение СтрШаблон("Не найден OneScript версии %1 в каталоге OVM (OneScript Version Manager)", Версия);
КонецЕсли;
+
+ Возврат ИмяФайла;
+
+КонецФункции
+
+Процедура ПрочитатьРасшифровкуЗамеровИзJSON(РасшифровкаРезультатов, Каталог, ИсполняющаяСреда)
+
+ Сериализатор = Новый СериализаторРезультатовБенчмарков();
+
+ Файлы = НайтиФайлы(Каталог, "*-report.json");
+ Для Каждого Файл Из Файлы Цикл
+ Данные = Сериализатор.ДесериализоватьИзJSON(Файл.ПолноеИмя, _Конфигурация);
+ Для Каждого СтрокаРезультата Из Данные.Расшифровка Цикл
+ НоваяСтрокаТаблицы = РасшифровкаРезультатов.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрокаТаблицы, СтрокаРезультата);
+ НоваяСтрокаТаблицы.ИсполняющаяСреда.Алиас = ИсполняющаяСреда.Версия; // Заменяем current
+ НоваяСтрокаТаблицы.ИсполняющаяСреда.Наименование = ИсполняющаяСреда.Наименование;
+ КонецЦикла;
+ КонецЦикла;
КонецПроцедуры
+#КонецОбласти
+
+#Область ЗапускВТекущейСреде
+
Функция ЗапуститьВсеБенчмарки()
+ ПрогретьИнструментыЗамера();
+
+ Если Не Бенчмаркинг.ЭтоВоркер() Тогда
+ ВывестиЗаголовок();
+ ВывестиКонфигурацию();
+ КонецЕсли;
+
+ // Событие ПередВсеми
КонтекстСобытия = Новый Структура();
КонтекстСобытия.Вставить("Конфигурация", _Конфигурация);
КонтекстСобытия.Вставить("ДескрипторыБенчмарков", _ДескрипторыБенчмарков);
ВызватьОбработчикСобытия(СобытияБенчмарков.ПередВсеми, КонтекстСобытия);
- РезультатыЗапусков = НоваяТаблицаРезультатовЗапусков();
+ // Инициализация результатов
+ МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков();
+ Результат = НовыйРезультат(МенеджерРасшифровкиРезультатов);
+
+ // Запуск бенчмарков
Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл
КомбинацииПараметров = КомбинаторПараметровБенчмарка.Комбинировать(ДескрипторБенчмарка, _Конфигурация);
@@ -131,81 +327,81 @@
КонецЕсли;
Для Каждого Параметры Из КомбинацииПараметров Цикл
-
- РезультатЗапуска = ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры);
-
- СтрокаРезультата = РезультатыЗапусков.Добавить();
- СтрокаРезультата.ДескрипторБенчмарка = ДескрипторБенчмарка;
- СтрокаРезультата.Параметры = Параметры;
- СтрокаРезультата.Замеры = РезультатЗапуска.Замеры;
- СтрокаРезультата.Статистика = РезультатЗапуска.Статистика;
-
+ ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры, МенеджерРасшифровкиРезультатов);
КонецЦикла;
КонецЦикла;
- ЗаполнитьЭталоны(РезультатыЗапусков);
-
- Результат = ПодготовитьРезультат(РезультатыЗапусков);
+ // Подготовка результатов
+ МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(_Конфигурация);
+ МенеджерРасшифровкиРезультатов.ОбновитьСтатистику();
+ Построитель = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, Результат.Расшифровка);
+ Результат.Отчет = Построитель.Сформировать();
+
+ // Событие ПослеВсех
ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, Результат);
Возврат Результат;
КонецФункции
-Функция ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры)
+Процедура ЗапуститьБенчмарк(ДескрипторБенчмарка, Параметры, МенеджерРасшифровкиРезультатов)
ВывестиЗаголовокБенчмарка(ДескрипторБенчмарка);
ВывестиПараметры(Параметры);
ПараметрыМетода = ПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры);
УстановитьПараметрыОбъекта(Параметры);
+
+ // Инициализация результата
+ Результат = МенеджерРасшифровкиРезультатов.Добавить();
+ Результат.ДескрипторБенчмарка = ДескрипторБенчмарка;
+ Результат.Параметры = Параметры;
+ Результат.Статистика = Новый СтатистикаБенчмарка();
+
+ Если Бенчмаркинг.ЭтоВоркер() Тогда
+ Результат.ИсполняющаяСреда.Версия = Новый СистемнаяИнформация().Версия;
+ Результат.ИсполняющаяСреда.Алиас = "current";
+ КонецЕсли;
+ // Событие ПередКаждым
КонтекстСобытия = Новый Структура();
КонтекстСобытия.Вставить("ДескрипторБенчмарка", ДескрипторБенчмарка);
КонтекстСобытия.Вставить("ПараметрыМетода", ПараметрыМетода);
ВызватьОбработчикСобытия(СобытияБенчмарков.ПередКаждым, КонтекстСобытия);
+ // Запуск итераций
Делегат = ДескрипторБенчмарка.Делегат(_ОбъектБенчмарков, ПараметрыМетода);
-
- Если _Конфигурация.Стратегия() = СтратегииЗапускаБенчмарка.ХолодныйЗапуск Тогда
+ Если _Конфигурация.Стратегия() = СтратегииЗапускаБенчмарка.ХолодныйЗапуск Тогда
КоличествоВызововЗаИтерацию = 1;
-
Иначе
-
КоличествоВызововЗаИтерацию = РассчитатьКоличествоВызововЗаИтерацию(Делегат);
ЗапуститьЭтапПрогрева(Делегат, КоличествоВызововЗаИтерацию);
-
КонецЕсли;
- Замеры = НоваяТаблицаЗамеров();
-
- ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, Замеры);
+ ЗапуститьЭтапИзмерения(Делегат, КоличествоВызововЗаИтерацию, Результат.Замеры);
Если _Конфигурация.ТребуетсяМониторингПамяти() Тогда
- ЗапуститьМониторингПамяти(Делегат, КоличествоВызововЗаИтерацию, Замеры);
+ ЗапуститьМониторингПамяти(Делегат, КоличествоВызововЗаИтерацию, Результат.Замеры);
КонецЕсли;
- Статистика = Новый СтатистикаБенчмарка(Замеры);
+ // Сбор статистики
+ Результат.Статистика.Прочитать(Результат.Замеры);
+ ВывестиСтатистику(Результат.Статистика);
+ // Событие ПослеКаждого
КонтекстСобытия = Новый Структура();
КонтекстСобытия.Вставить("ДескрипторБенчмарка", ДескрипторБенчмарка);
КонтекстСобытия.Вставить("Параметры", Параметры);
- КонтекстСобытия.Вставить("Замеры", Замеры);
- КонтекстСобытия.Вставить("Статистика", Статистика);
+ КонтекстСобытия.Вставить("Замеры", Результат.Замеры);
+ КонтекстСобытия.Вставить("Статистика", Результат.Статистика);
ВызватьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, КонтекстСобытия);
- ЦветнойВывод.Вывести(Символы.ПС);
- ЦветнойВывод.ВывестиСтроку("// Статистика", "Малиновый");
- ЦветнойВывод.ВывестиСтроку(Статистика.ВСтроку(), "Бирюза");
-
- Возврат Новый Структура("Замеры, Статистика", Замеры, Статистика);
-
-КонецФункции
+КонецПроцедуры
Функция РассчитатьКоличествоВызововЗаИтерацию(Делегат)
@@ -335,10 +531,10 @@
РезультатИтерации.ВыделяемаяПамятьЗаОперацию = ВыделяемаяПамять / КоличествоВызовов;
Если НомерИтерации = 1 Тогда
- Консоль.Вывести(Символы.ПС);
+ ВывестиСтроку(" ");
КонецЕсли;
- ЦветнойВывод.ВывестиСтроку(ПредставлениеРезультатаИтерации(РезультатИтерации), "Серый");
+ ВывестиСтроку(ПредставлениеРезультатаИтерации(РезультатИтерации), "Серый");
Возврат РезультатИтерации;
@@ -432,96 +628,20 @@
// Параметры - Массив из ПараметрБенчмарка
Процедура УстановитьПараметрыОбъекта(Параметры)
+ ШаблонОшибки = "Не удалось задать значение поля <%1> для объекта <%2>";
+
Для Каждого Параметр Из Параметры Цикл
Если Не Параметр.ЭтоПараметрМетода Тогда
- _ОбъектБенчмарков[Параметр.Имя] = Параметр.Значение;
+ Попытка
+ _ОбъектБенчмарков[Параметр.Имя] = Параметр.Значение;
+ Исключение
+ ВызватьИсключение СтрШаблон(ШаблонОшибки, Параметр.Имя, ТипЗнч(_ОбъектБенчмарков));
+ КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
-Процедура ЗаполнитьЭталоны(РезультатыЗапусков)
-
- Для Каждого Строка Из РезультатыЗапусков Цикл
- Если Не Строка.ДескрипторБенчмарка.ЭтоЭталон() Тогда
- Строка.Эталон = НайтиЭталон(РезультатыЗапусков, Строка);
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-Функция НайтиЭталон(РезультатыЗапусков, СтрокаПоиска)
-
- Для Каждого СтрокаЭталон Из РезультатыЗапусков Цикл
-
- Если СтрокаЭталон = СтрокаПоиска Тогда
- Продолжить;
- КонецЕсли;
-
- Если Не СтрокаЭталон.ДескрипторБенчмарка.ЭтоЭталон() Тогда
- Продолжить;
- КонецЕсли;
-
- Если Не СтрокаПоиска.ДескрипторБенчмарка.Категория() = СтрокаЭталон.ДескрипторБенчмарка.Категория() Тогда
- Продолжить;
- КонецЕсли;
-
- ПараметрыСовпадают = Истина;
- Для Каждого Параметр Из СтрокаПоиска.Параметры Цикл
-
- ПараметрНайден = Ложь;
- Для Каждого ПараметрЭталона Из СтрокаЭталон.Параметры Цикл
- Если Параметр.Имя = ПараметрЭталона.Имя
- И Параметр.Значение = ПараметрЭталона.Значение Тогда
- ПараметрНайден = Истина;
- Прервать;
- КонецЕсли;
- КонецЦикла;
-
- Если Не ПараметрНайден Тогда
- ПараметрыСовпадают = Ложь;
- Прервать;
- КонецЕсли;
-
- КонецЦикла;
-
- Если ПараметрыСовпадают Тогда
- Возврат СтрокаЭталон;
- КонецЕсли;
-
- КонецЦикла;
-
-КонецФункции
-
-Процедура ПроверитьБенчмарки()
-
- БылЭталонПоКатегории = Новый Соответствие();
- НаличиеТиповОбъектов = Новый Соответствие();
-
- Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл
-
- НаличиеТиповОбъектов[ДескрипторБенчмарка.ТипОбъекта()] = Истина;
-
- Ожидаем
- .Что(НаличиеТиповОбъектов, "Не поддерживается запуск с разными типами объектов бенчмарков")
- .ИмеетДлину(1);
-
- Если ДескрипторБенчмарка.ЭтоЭталон() Тогда
-
- Категория = ДескрипторБенчмарка.Категория();
-
- Ожидаем
- .Что(БылЭталонПоКатегории[Категория], "Может быть только один эталонный бенчмарк в пределах категории")
- .ЭтоНеопределено();
-
- БылЭталонПоКатегории[Категория] = Истина;
-
- КонецЕсли;
-
- КонецЦикла;
-
-КонецПроцедуры
-
Функция ПредставлениеРезультатаИтерации(РезультатИтерации)
ДлинаЭтапа = Макс(
@@ -571,27 +691,12 @@
КонецФункции
-Функция ПодготовитьРезультат(РезультатыЗапусков)
-
- ПостроительОтчета = Новый ПостроительОтчетаБенчмарков(_ДескрипторыБенчмарков, _Конфигурация, РезультатыЗапусков);
- Отчет = ПостроительОтчета.Сформировать();
-
- Результат = Новый Структура();
- Результат.Вставить("ИмяКласса", Строка(ТипЗнч(_ОбъектБенчмарков)));
- Результат.Вставить("ДескрипторыБенчмарков", _ДескрипторыБенчмарков);
- Результат.Вставить("Конфигурация", _Конфигурация);
- Результат.Вставить("СредаОкружения", Новый СредаОкруженияБенчмарков());
- Результат.Вставить("РезультатыЗапусков", РезультатыЗапусков);
- Результат.Вставить("Отчет", Отчет);
-
- Возврат Результат;
-
-КонецФункции
+#КонецОбласти
-Процедура ЭкспортироватьРезультаты(РезультатыЗапусков)
+Процедура ЭкспортироватьРезультаты(Результаты)
КаталогАртефактов = _Конфигурация.КаталогАртефактов();
- МаскаФайлов = СтрШаблон("%1-*", РезультатыЗапусков.ИмяКласса);
+ МаскаФайлов = СтрШаблон("%1-*", Результаты.ИмяКласса);
Экспортеры = _Конфигурация.Экспортеры();
Если Не ЗначениеЗаполнено(КаталогАртефактов) Или Экспортеры.Количество() = 0 Тогда
@@ -602,26 +707,68 @@
ФС.УдалитьФайлы(КаталогАртефактов, МаскаФайлов);
Для Каждого Экспортер Из _Конфигурация.Экспортеры() Цикл
- Экспортер.Записать(РезультатыЗапусков);
+ Экспортер.Записать(Результаты);
КонецЦикла;
- Артефакты = НайтиФайлы(КаталогАртефактов, МаскаФайлов);
- Если Артефакты.Количество() Тогда
- ЦветнойВывод.Вывести(Символы.ПС);
- ЦветнойВывод.ВывестиСтроку( "// Артефакты", "Малиновый");
+ Если Не Бенчмаркинг.ЭтоВоркер() Тогда
+ Артефакты = НайтиФайлы(КаталогАртефактов, МаскаФайлов);
+ Если Артефакты.Количество() Тогда
+ ВывестиСтроку(" ");
+ ВывестиСтроку("// Артефакты", "Малиновый");
+ КонецЕсли;
+
+ Для Каждого Артефакт Из Артефакты Цикл
+ ВывестиСтроку(Артефакт.ПолноеИмя, "ТемноЖелтый");
+ КонецЦикла;
КонецЕсли;
- Для Каждого Артефакт Из Артефакты Цикл
- ЦветнойВывод.ВывестиСтроку(Артефакт.ПолноеИмя, "ТемноЖелтый");
- КонецЦикла;
+КонецПроцедуры
+
+Процедура ВывестиРезультатыБенчмарков(Результат)
+
+ // Среда окружения
+ ТекстСреды = Результат.СредаОкружения.ВСтроку();
+ ТекстСреды = СтрЗаменить(ТекстСреды, Символы.ПС, " \" + Символы.ПС);
+
+ ВывестиСтроку(" ");
+ ВывестиСтроку("// Сводка", "Малиновый");
+ ВывестиСтроку(ТекстСреды, "ТемноЖелтый");
+
+ // Отчет в Markdown
+ ВывестиСтроку(" ");
+ ВывестиСтроку(Результат.Отчет.КакMarkdown(), "Бирюза");
+
+ // Легенда
+ ВывестиСтроку(" ");
+ ВывестиСтроку("// Легенда", "Малиновый");
+ ВывестиСтроку(Результат.Отчет.Легенда(), "Синий");
+
+КонецПроцедуры
+
+Процедура ВывестиЗаголовок(Версия = "")
+
+ Если Не ЗначениеЗаполнено(Версия) Тогда
+ Версия = Новый СистемнаяИнформация().Версия;
+ КонецЕсли;
+
+ ВывестиСтроку(" ");
+ ВывестиСтроку(СтрШаблон("*** Запуск бенчмарков в исполняющей среде OneScript <%1> ***", Версия), "Синий");
КонецПроцедуры
Процедура ВывестиКонфигурацию()
- ЦветнойВывод.Вывести(Символы.ПС);
- ЦветнойВывод.ВывестиСтроку("// Конфигурация", "Малиновый");
- ЦветнойВывод.ВывестиСтроку(_Конфигурация.ВСтроку(), "ТемноЖелтый");
+ ВывестиСтроку(" ");
+ ВывестиСтроку("// Конфигурация", "Малиновый");
+ ВывестиСтроку(_Конфигурация.ВСтроку(), "ТемноЖелтый");
+
+КонецПроцедуры
+
+Процедура ВывестиСтатистику(Статистика)
+
+ ВывестиСтроку(" ");
+ ВывестиСтроку("// Статистика", "Малиновый");
+ ВывестиСтроку(Статистика.ВСтроку(), "Бирюза");
КонецПроцедуры
@@ -629,8 +776,8 @@
Текст = СтрШаблон("// Бенчмарк: %1.%2", ДескрипторБенчмарка.ТипОбъекта(), ДескрипторБенчмарка.Метод());
- ЦветнойВывод.Вывести(Символы.ПС);
- ЦветнойВывод.ВывестиСтроку(Текст, "Малиновый");
+ ВывестиСтроку(" ");
+ ВывестиСтроку(Текст, "Малиновый");
КонецПроцедуры
@@ -642,46 +789,38 @@
Возврат;
КонецЕсли;
- ЦветнойВывод.Вывести("Параметры: ", Цвет);
+ Вывести("Параметры: ", Цвет);
ЭтоПервыйПараметр = Истина;
Для Каждого Параметр Из Параметры Цикл
Если Не ЭтоПервыйПараметр Тогда
- ЦветнойВывод.Вывести(", ", Цвет);
+ Вывести(", ", Цвет);
КонецЕсли;
- ЦветнойВывод.Вывести(СтрШаблон("%1 = %2", Параметр.Имя, Строка(Параметр.Значение)), Цвет);
+ Вывести(СтрШаблон("%1 = %2", Параметр.Имя, Строка(Параметр.Значение)), Цвет);
ЭтоПервыйПараметр = Ложь;
КонецЦикла;
- ЦветнойВывод.ВывестиСтроку("");
+ ВывестиСтроку("");
КонецПроцедуры
-Процедура ВывестиРезультатыБенчмарков(Результат)
-
- // Среда окружения
- ТекстСреды = Результат.СредаОкружения.ВСтроку();
- ТекстСреды = СтрЗаменить(ТекстСреды, Символы.ПС, " \" + Символы.ПС);
-
- ЦветнойВывод.Вывести(Символы.ПС);
- ЦветнойВывод.ВывестиСтроку("// Сводка", "Малиновый");
- ЦветнойВывод.ВывестиСтроку(ТекстСреды, "ТемноЖелтый");
-
- // Отчет в Markdown
- ЦветнойВывод.Вывести(Символы.ПС);
- ЦветнойВывод.ВывестиСтроку(Результат.Отчет.КакMarkdown(), "Бирюза");
-
- // Легенда
- ЦветнойВывод.Вывести(Символы.ПС);
- ЦветнойВывод.ВывестиСтроку("// Легенда", "Малиновый");
- ЦветнойВывод.ВывестиСтроку(Результат.Отчет.Легенда(), "Синий");
+Процедура ВывестиСтроку(Текст, Цвет = Неопределено)
+ КонсольныйВыводБенчмаркера.ВывестиСтроку(Текст, Цвет);
+КонецПроцедуры
+Процедура Вывести(Текст, Цвет = Неопределено)
+ КонсольныйВыводБенчмаркера.Вывести(Текст, Цвет);
КонецПроцедуры
+Функция ОбернутьВКавычки(Строка)
+ Кавычка = ?(ИсполняющаяСредаБенчмарков.ЭтоWindows(), """", "'");
+ Возврат СтрШаблон("%2%1%2", Строка, Кавычка);
+КонецФункции
+
Функция НовыйРезультатИтерации()
Результат = Новый Структура();
@@ -697,52 +836,18 @@
КонецФункции
-// Таблица замеров
-//
-// Возвращаемое значение:
-// ТаблицаЗначений:
-// * Этап - см. ЭтапыБенчмарка
-// * НомерИтерации - Число
-// * КоличествоОпераций - Число
-// * Наносекунд - Число - Наносекунд за итерацию
-// * НаносекундЗаОперацию - Число - Наносекунд за операцию
-// * ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию
-// * ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию
-Функция НоваяТаблицаЗамеров()
-
- Таблица = Новый ТаблицаЗначений();
- Таблица.Колонки.Добавить("Этап");
- Таблица.Колонки.Добавить("НомерИтерации");
- Таблица.Колонки.Добавить("КоличествоОпераций");
- Таблица.Колонки.Добавить("Наносекунд");
- Таблица.Колонки.Добавить("НаносекундЗаОперацию");
- Таблица.Колонки.Добавить("ВыделяемаяПамять");
- Таблица.Колонки.Добавить("ВыделяемаяПамятьЗаОперацию");
-
- Возврат Таблица;
-
-КонецФункции
+Функция НовыйРезультат(МенеджерРасшифровкиРезультатов) Экспорт
-// Таблица результатов запусков
-//
-// Возвращаемое значение:
-// ТаблицаЗначений:
-// * ДескрипторБенчмарка - ДескрипторБенчмарка
-// * Параметры - Массив из ПараметрБенчмарка
-// * Статистика - СтатистикаБенчмарка
-// * Эталон - СтрокаТаблицыЗначений, Неопределено
-// * Замеры - см. НоваяТаблицаЗамеров
-Функция НоваяТаблицаРезультатовЗапусков()
-
- Таблица = Новый ТаблицаЗначений();
- Таблица.Колонки.Добавить("ДескрипторБенчмарка");
- Таблица.Колонки.Добавить("Параметры");
- Таблица.Колонки.Добавить("Статистика");
- Таблица.Колонки.Добавить("Эталон");
- Таблица.Колонки.Добавить("Замеры");
-
- Возврат Таблица;
+ Результат = Новый Структура();
+ Результат.Вставить("ИмяКласса", Строка(ТипЗнч(_ОбъектБенчмарков)));
+ Результат.Вставить("ДескрипторыБенчмарков", _ДескрипторыБенчмарков);
+ Результат.Вставить("Конфигурация", _Конфигурация);
+ Результат.Вставить("Расшифровка", МенеджерРасшифровкиРезультатов.ВТаблицу());
+ Результат.Вставить("Отчет", Неопределено);
+ Результат.Вставить("СредаОкружения", Новый СредаОкруженияБенчмарков());
+ Возврат Результат;
+
КонецФункции
#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index 563e3ce..442efb4 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -5,13 +5,13 @@
// Коллекция дескрипторов бенчмарков
//
// Параметры:
-// Источник - Тип, Произвольный - Тип или экземпляр класса бенчмарков
-Процедура ПриСозданииОбъекта(Источник = Неопределено) Экспорт
+// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков
+Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено) Экспорт
_ДескрипторыБенчмарков = Новый Массив();
- Если Не Источник = Неопределено Тогда
- ИзвлекательДескрипторовБенчмарков.Извлечь(Источник, ЭтотОбъект);
+ Если Не ИсточникБенчмарков = Неопределено Тогда
+ ИзвлекательДескрипторовБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
@@ -75,6 +75,30 @@
КонецФункции
+// Создает новую коллекцию из эталонных бенчмарков
+//
+// Возвращаемое значение:
+// КоллекцияДескрипторовБенчмарков
+Функция ПолучитьЭталонные() Экспорт
+ Возврат Скопировать().Фильтровать("Бенчмарк -> Бенчмарк.ЭтоЭталон() = Истина");
+КонецФункции
+
+// Создает копию коллекции дескрипторов бенчмарков
+//
+// Возвращаемое значение:
+// КоллекцияДескрипторовБенчмарков
+Функция Скопировать() Экспорт
+
+ Коллекция = Новый КоллекцияДескрипторовБенчмарков();
+
+ Для Каждого Бенчмарк Из _ДескрипторыБенчмарков Цикл
+ Коллекция.Добавить(Бенчмарк);
+ КонецЦикла;
+
+ Возврат Коллекция;
+
+КонецФункции
+
// Фильтровать коллекцию по условию
//
// Параметры:
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index 169861e..0646644 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\273\320\276\320\275\320\272\320\260\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -38,7 +38,7 @@
// Значение по результатам замеров
//
// Параметры:
-// СтрокаРезультата - СтрокаТаблицыЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// СтрокаРезультата - СтрокаТаблицыЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// Колонка - КолонкаОтчетаБенчмарков
//
// Возвращаемое значение:
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index 3d41718..ad5faa6 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -23,6 +23,7 @@
Перем _Обработчики; // Соответствие
Перем _Колонки; // Массив из Строка - см. КолонкиОтчетаБенчмарков
Перем _Экспортеры; // Массив из см. ЭкспортерыРезультатовБенчмарков
+Перем _ВерсииИсполняющейСреды; // ТаблицаЗначений
Перем _МодифицированныеПоля; // Соответствие
Перем _Рефлектор; // Рефлектор, Неопределено
@@ -30,8 +31,8 @@
// Конфигурация бенчмарков
//
// Параметры:
-// Источник - Тип, Произвольный - Тип или экземпляр класса бенчмарков
-Процедура ПриСозданииОбъекта(Источник = Неопределено)
+// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков
+Процедура ПриСозданииОбъекта(ИсточникБенчмарков = Неопределено)
_СтратегияПоУмолчанию = СтратегииЗапускаБенчмарка.ПропускнаяСпособность;
_КоличествоИтерацийПоУмолчанию = 15;
@@ -48,6 +49,7 @@
_Колонки = Новый Массив();
_Экспортеры = Новый Массив();
_МодифицированныеПоля = Новый Соответствие();
+ _ВерсииИсполняющейСреды = ПустаяТаблицаВерсииИсполняющейСреды();
_ТребуетсяМониторингПамяти = _ТребуетсяМониторингПамятиПоУмолчанию;
@@ -62,14 +64,16 @@
_МодифицированныеПоля.Очистить();
- Если Не Источник = Неопределено Тогда
- ИзвлекательКонфигурацииБенчмарков.Извлечь(Источник, ЭтотОбъект);
+ Если Не ИсточникБенчмарков = Неопределено Тогда
+ ИзвлекательКонфигурацииБенчмарков.Извлечь(ИсточникБенчмарков, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#Область ПрограммныйИнтерфейс
+#Область СвойстваКонфигурации
+
// Устанавливает количество итераций для основных этапов (ЭтапыБенчмарка.Измерение, ЭтапыБенчмарка.Память)
//
// Используется для тонкой настройки баланса между точностью измерений и временем выполнения теста.
@@ -297,7 +301,7 @@
// Параметры, используемые для запуска бенчмарков с разными наборами входных данных
//
// Возвращаемое значение:
-// Массив из
+// Массив из ПараметрБенчмарка
Функция Параметры() Экспорт
@@ -363,7 +367,7 @@
КонецФункции
-// Добавляет этап мониторинга выделения памяти и сборок мусора (GC)
+// Добавляет этап мониторинга выделения памяти
//
// При использовании этой аннотации в отчете будут отображаться:
// - Аллокации памяти в байтах за итерацию
@@ -379,7 +383,7 @@
КонецФункции
-// Требуется мониторинг выделения памяти и сборок мусора (GC)
+// Требуется мониторинг выделения памяти
//
// Возвращаемое значение:
// Булево
@@ -410,9 +414,7 @@
// * Контекст - Структура:
// ** ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
// ** Конфигурация - КонфигурацияБенчмарков
-// ** СредаОкружения - СредаОкруженияБенчмарков
-// ** РезультатыЗапусков - ТаблицаЗначений -
-// см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+// ** Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
// ** Отчет - ОтчетБенчмарков
//
// ПередКаждым - Вызывается перед каждым запуском бенчмарка.
@@ -432,7 +434,7 @@
// * Контекст - Структура:
// ** ДескрипторБенчмарка - ДескрипторБенчмарка
// ** Параметры - Массив из ПараметрБенчмарка
-// ** Замеры - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаЗамеров
+// ** Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров
// ** Статистика - СтатистикаБенчмарка
//
// Параметры:
@@ -488,26 +490,55 @@
// Обработчики событий
//
// Возвращаемое значение:
-// Соответствие из КлючИЗначение:
-// * Ключ - Строка - см. СобытияБенчмарков
-// * Значение - Массив из Строка - Массив экспортных методов экземпляра класса бенчмарков
-// - Массив из Делегат - Массив делегатов
+// ТаблицаЗначений:
+// * Событие - Строка - см. СобытияБенчмарков
+// * Обработчик - Строка - Экспортный метод экземпляра класса бенчмарков
+// - Делегат - Делегат
Функция ОбработчикиСобытий() Экспорт
- События = Новый Соответствие();
+ Результат = Новый ТаблицаЗначений();
+ Результат.Колонки.Добавить("Событие");
+ Результат.Колонки.Добавить("Обработчик");
Для Каждого ОбработчикиСобытия Из _Обработчики Цикл
- Обработчики = Новый Массив();
- Для Каждого ОбработчикСобытия Из ОбработчикиСобытия.Значение Цикл
- Обработчики.Добавить(ОбработчикСобытия.Ключ);
+ Событие = ОбработчикиСобытия.Ключ;
+ Обработчики = ОбработчикиСобытия.Значение;
+
+ Для Каждого КлючЗначение Из Обработчики Цикл
+ СтрокаТаблицы = Результат.Добавить();
+ СтрокаТаблицы.Событие = Событие;
+ СтрокаТаблицы.Обработчик = КлючЗначение.Ключ;
КонецЦикла;
- События[ОбработчикиСобытия.Ключ] = Обработчики;
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+// Обработчики события
+//
+// Параметры:
+// ИмяСобытия - Строка - см. СобытияБенчмарков
+//
+// Возвращаемое значение:
+// Массив из Строка - Экспортный метод экземпляра класса бенчмарков
+// Массив из Делегат
+Функция ОбработчикиСобытия(ИмяСобытия) Экспорт
+
+ Результат = Новый Массив();
+
+ ОбработчикиСобытия = _Обработчики[ИмяСобытия];
+ Если ОбработчикиСобытия = Неопределено Тогда
+ Возврат Результат;
+ КонецЕсли;
+ Для Каждого Строка Из ОбработчикиСобытия Цикл
+ Результат.Добавить(Строка.Ключ);
КонецЦикла;
- Возврат События;
+ Возврат Результат;
КонецФункции
@@ -671,7 +702,98 @@
КонецФункции
-// Объединяет переданную конфигурацию с текущей конфигурацию
+// Добавляет версию исполняющей среды OneScript
+//
+// Параметры:
+// Версия - Строка - Версия OneScript (x.x.x, stable, dev) или путь к oscript.exe.
+// Наименование - Строка - Имя среды для отчета.
+// ЭтоЭталон - Булево - Использовать как эталонную среду для сравнения результатов.
+//
+// Возвращаемое значение:
+// ЭтотОбъект
+Функция ДобавитьВерсиюИсполняющейСреды(Версия, Наименование = "", ЭтоЭталон = Ложь) Экспорт
+
+ ДанныеСреды = _ВерсииИсполняющейСреды.Добавить();
+ ДанныеСреды.Версия = Версия;
+ ДанныеСреды.Наименование = Наименование;
+ ДанныеСреды.ЭтоЭталон = ЭтоЭталон;
+
+ УстановитьМодифицированность(ИмяПоля_ВерсииИсполняющейСреды());
+
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+// Версии исполняющей среды OneScript
+//
+// Возвращаемое значение:
+// ТаблицаЗначений:
+// * Версия - Строка - Версия OneScript (x.x.x, stable, dev) или путь к oscript.exe.
+// * Наименование - Строка - Имя для отчетов.
+// * ЭтоЭталон - Булево - Использовать как эталонную среду для сравнения результатов.
+Функция ВерсииИсполняющейСреды() Экспорт
+ Возврат _ВерсииИсполняющейСреды.Скопировать();
+КонецФункции
+
+// Очищает версии исполняющей среды OneScript
+//
+// Возвращаемое значение:
+// ЭтотОбъект
+Функция ОчиститьВерсииИсполняющейСреды() Экспорт
+
+ _ВерсииИсполняющейСреды.Очистить();
+ УстановитьМодифицированность(ИмяПоля_ВерсииИсполняющейСреды());
+
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+// Версия исполняющей среды OneScript ограничена текущей
+//
+// Возвращаемое значение:
+// Булево
+Функция ИсполняющаяСредаОграниченаТекущей() Экспорт
+
+ КоличествоВерсий = _ВерсииИсполняющейСреды.Количество();
+
+ Возврат КоличествоВерсий = 0
+ Или КоличествоВерсий = 1 И НРег(_ВерсииИсполняющейСреды[0].Версия) = "current";
+
+КонецФункции
+
+// Возвращает эталонную версию исполняющей среды OneScript
+//
+// Возвращаемое значение:
+// Строка
+Функция ЭталоннаяВерсияИсполняющейСреды() Экспорт
+
+ НайденнаяСтрока = _ВерсииИсполняющейСреды.Найти(Истина, "ЭтоЭталон");
+ Если НайденнаяСтрока = Неопределено Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Возврат НайденнаяСтрока.Версия;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область Агрегация
+
+// Создает новый экземпляр конфигурации копированием существующего.
+//
+// Возвращаемое значение:
+// КонфигурацияБенчмарков
+Функция Скопировать() Экспорт
+
+ Конфигурация = Новый КонфигурацияБенчмарков();
+ Конфигурация.Объединить(ЭтотОбъект);
+
+ Возврат Конфигурация;
+
+КонецФункции
+
+// Применяет модифицированные поля переданной конфигурации к текущей.
//
// Параметры:
// Конфигурация - КонфигурацияБенчмарков
@@ -737,11 +859,16 @@
ПрименитьМодифицированныеОбработчикиСобытий(ЗначенияМодифицированныхПолей);
ПрименитьМодифицированныеКолонки(ЗначенияМодифицированныхПолей);
ПрименитьМодифицированныеЭкспортеры(ЗначенияМодифицированныхПолей);
+ ПрименитьМодифицированныеВерсииИсполняющейСреды(ЗначенияМодифицированныхПолей);
Возврат ЭтотОбъект;
КонецФункции
+#КонецОбласти
+
+#Область Конвертация
+
// Конвертация объекта конфигурации в таблицу значений
//
// Возвращаемое значение:
@@ -770,6 +897,7 @@
ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ОбработчикиСобытий(), ОбработчикиСобытий());
ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Колонки(), Колонки());
ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_Экспортеры(), Экспортеры());
+ ДобавитьСтрокуВТаблицу(Таблица, ИмяПоля_ВерсииИсполняющейСреды(), ВерсииИсполняющейСреды());
Возврат Таблица;
@@ -781,7 +909,7 @@
// Строка
Функция ВСтроку() Экспорт
- Подстроки = Новый Массив();
+ Подстроки = Новый Массив();
Подстроки.Добавить(СтрШаблон("Стратегия = ""%1""", Стратегия()));
Подстроки.Добавить("Измерительных итераций = " + КоличествоИтераций());
@@ -820,6 +948,8 @@
#КонецОбласти
+#КонецОбласти
+
#Область СлужебныеПроцедурыИФункции
Функция ДелегатОбработчика(Обработчик, ОбъектБенчмарков)
@@ -832,6 +962,37 @@
КонецФункции
+Функция ЕстьПараметрыМетода(Делегат)
+
+ РефлекторОбъекта = Новый РефлекторОбъекта(Делегат.Объект());
+ ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь);
+ СвойстваМетода = ТаблицаМетодов.Найти(Делегат.ИмяМетода(), "Имя");
+
+ Возврат СвойстваМетода.Параметры.Количество() > 0;
+
+КонецФункции
+
+Функция ДобавитьСтрокуВТаблицу(Таблица, Имя, Значение)
+
+ Строка = Таблица.Добавить();
+ Строка.Имя = Имя;
+ Строка.Значение = Значение;
+ Строка.Модифицирован = _МодифицированныеПоля[Имя];
+
+ Возврат Строка;
+
+КонецФункции
+
+Функция ПустаяТаблицаВерсииИсполняющейСреды()
+ Таблица = Новый ТаблицаЗначений();
+ Таблица.Колонки.Добавить("Версия");
+ Таблица.Колонки.Добавить("Наименование");
+ Таблица.Колонки.Добавить("ЭтоЭталон");
+ Возврат Таблица;
+КонецФункции
+
+#Область Модифицированность
+
Процедура УстановитьМодифицированность(ИмяПоля_)
_МодифицированныеПоля[ИмяПоля_] = Истина;
КонецПроцедуры
@@ -890,9 +1051,7 @@
УдалитьОбработчикиСобытий();
Для Каждого СтрокаСобытия Из ЗначенияМодифицированныхПолей[ИмяПоля_ОбработчикиСобытий()] Цикл
- Для Каждого Обработчик Из СтрокаСобытия.Значение Цикл
- ДобавитьОбработчикСобытия(СтрокаСобытия.Ключ, Обработчик);
- КонецЦикла;
+ ДобавитьОбработчикСобытия(СтрокаСобытия.Событие, СтрокаСобытия.Обработчик);
КонецЦикла;
КонецПроцедуры
@@ -911,26 +1070,21 @@
КонецПроцедуры
-Функция ЕстьПараметрыМетода(Делегат)
-
- РефлекторОбъекта = Новый РефлекторОбъекта(Делегат.Объект());
- ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь);
- СвойстваМетода = ТаблицаМетодов.Найти(Делегат.ИмяМетода(), "Имя");
-
- Возврат СвойстваМетода.Параметры.Количество() > 0;
-
-КонецФункции
+Процедура ПрименитьМодифицированныеВерсииИсполняющейСреды(ЗначенияМодифицированныхПолей)
+
+ Если ЗначенияМодифицированныхПолей[ИмяПоля_ВерсииИсполняющейСреды()] = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
-Функция ДобавитьСтрокуВТаблицу(Таблица, Имя, Значение) Экспорт
+ ОчиститьВерсииИсполняющейСреды();
- Строка = Таблица.Добавить();
- Строка.Имя = Имя;
- Строка.Значение = Значение;
- Строка.Модифицирован = _МодифицированныеПоля[Имя];
+ Для Каждого ДанныеСреды Из ЗначенияМодифицированныхПолей[ИмяПоля_ВерсииИсполняющейСреды()] Цикл
+ ДобавитьВерсиюИсполняющейСреды(ДанныеСреды.Версия, ДанныеСреды.Наименование, ДанныеСреды.ЭтоЭталон);
+ КонецЦикла;
- Возврат Строка;
+КонецПроцедуры
-КонецФункции
+#КонецОбласти
#Область ИменаПолей
@@ -986,6 +1140,10 @@
Возврат "Экспортеры";
КонецФункции
+Функция ИмяПоля_ВерсииИсполняющейСреды()
+ Возврат "ВерсииИсполняющейСреды";
+КонецФункции
+
#КонецОбласти
#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
new file mode 100644
index 0000000..93a889d
--- /dev/null
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\240\320\260\321\201\321\210\320\270\321\204\321\200\320\276\320\262\320\272\320\270\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -0,0 +1,210 @@
+Перем _Таблица; // см. НоваяТаблицаРасшифровки
+
+// Расшифровка результатов бенчмарков.
+//
+// Параметры:
+// РасшифровкаРезультатов - см. НоваяТаблицаРасшифровки
+// - Неопределено
+Процедура ПриСозданииОбъекта(РасшифровкаРезультатов = Неопределено)
+
+ _Таблица = РасшифровкаРезультатов;
+
+ Если _Таблица = Неопределено Тогда
+ _Таблица = НоваяТаблицаРасшифровки();
+ КонецЕсли;
+
+КонецПроцедуры
+
+#Область ПрограммныйИнтерфейс
+
+// Возвращает таблицу с расшифровкой замеров бенчмарков.
+//
+// Возвращаемое значение:
+// см. НоваяТаблицаРасшифровки
+Функция ВТаблицу() Экспорт
+ Возврат _Таблица;
+КонецФункции
+
+// Создает новую строку в таблице расшифровки.
+//
+// Возвращаемое значение:
+// СтрокаТаблицыЗначения
+Функция Добавить() Экспорт
+
+ СтрокаТаблицы = _Таблица.Добавить();
+ СтрокаТаблицы.Параметры = Новый Массив();
+ СтрокаТаблицы.Замеры = НоваяТаблицаЗамеров();
+ СтрокаТаблицы.Статистика = Новый СтатистикаБенчмарка();
+ СтрокаТаблицы.ИсполняющаяСреда = НоваяИсполняющаяСреда();
+
+ Возврат СтрокаТаблицы;
+
+КонецФункции
+
+// Связывает каждую строку замеров с эталонной строкой.
+//
+// Алгоритм поиска эталонов (в порядке приоритета):
+// 1. При наличии эталонной версии исполняющей среды:
+// - Ищет строку бенчмарка с идентичным именем и набором параметров в соответствующей эталонной среде
+// 2. При отсутствии эталонной среды, но при наличии эталонного бенчмарка:
+// - Ищет строку бенчмарка в пределах текущей категории бенчмарков, наборов параметров и исполняющей среды
+//
+// Параметры:
+// Конфигурация - КонфигурацияБенчмарков
+Процедура ОпределитьЭталоны(Конфигурация) Экспорт
+
+ ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды();
+
+ Для Каждого СтрокаРасшифровкиЗамеров Из _Таблица Цикл
+ СтрокаРасшифровкиЗамеров.Эталон = НайтиЭталонДляСтроки(СтрокаРасшифровкиЗамеров, ЭталоннаяВерсия);
+
+ Если Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда
+ СтрокаРасшифровкиЗамеров.ЭтоЭталон = СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.ЭтоЭталон();
+ Иначе
+ СтрокаРасшифровкиЗамеров.ЭтоЭталон =
+ ЭталоннаяВерсия = СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия
+ Или ЭталоннаяВерсия = СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Алиас;
+ КонецЕсли;
+ КонецЦикла;
+
+КонецПроцедуры
+
+// Пересчитывает статистические показатели для всех замеров в таблице
+Процедура ОбновитьСтатистику() Экспорт
+ Для Каждого СтрокаРасшифровкиЗамеров Из _Таблица Цикл
+ СтрокаРасшифровкиЗамеров.Статистика.Прочитать(СтрокаРасшифровкиЗамеров.Замеры);
+ КонецЦикла;
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция НайтиЭталонДляСтроки(ВходнаяСтрока, ЭталоннаяВерсияИсполняющейСреды)
+
+ Для Каждого СтрокаЭталон Из _Таблица Цикл
+
+ ЭтоЭталон = СтрокаЭталон.ДескрипторБенчмарка.ЭтоЭталон();
+ ЭтоРазныеСтроки = Не СтрокаЭталон = ВходнаяСтрока;
+ ИмяМетодаСовпадает = СтрокаЭталон.ДескрипторБенчмарка.Метод() = ВходнаяСтрока.ДескрипторБенчмарка.Метод();
+ КатегорияСовпадает = СтрокаЭталон.ДескрипторБенчмарка.Категория() = ВходнаяСтрока.ДескрипторБенчмарка.Категория();
+ ПараметрыСовпадают = ПараметрыСовпадают(СтрокаЭталон, ВходнаяСтрока);
+ ВерсияИсполняющейСредыСовпадает = СтрокаЭталон.ИсполняющаяСреда.Версия = ВходнаяСтрока.ИсполняющаяСреда.Версия;
+ ЭталоннаяВерсияИсполняющейСредыУказана = ЗначениеЗаполнено(ЭталоннаяВерсияИсполняющейСреды);
+ ЭталоннаяВерсияИсполняющейСредыСовпадает = ЭталоннаяВерсияИсполняющейСреды = СтрокаЭталон.ИсполняющаяСреда.Версия
+ Или ЭталоннаяВерсияИсполняющейСреды = СтрокаЭталон.ИсполняющаяСреда.Алиас;
+
+ ПоискПоЭталоннойСреде = ЭталоннаяВерсияИсполняющейСредыУказана
+ И ЭталоннаяВерсияИсполняющейСредыСовпадает
+ И ИмяМетодаСовпадает;
+
+ ПоискПоЭталонномуБенчмарку = Не ЭталоннаяВерсияИсполняющейСредыУказана
+ И ЭтоЭталон
+ И КатегорияСовпадает
+ И ВерсияИсполняющейСредыСовпадает;
+
+ НайденЭталон = ЭтоРазныеСтроки
+ И ПараметрыСовпадают
+ И (ПоискПоЭталоннойСреде Или ПоискПоЭталонномуБенчмарку);
+
+ Если НайденЭталон Тогда
+ Возврат СтрокаЭталон;
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецФункции
+
+Функция ПараметрыСовпадают(СтрокаПервая, СтрокаВторая)
+
+ Если СтрокаПервая.Параметры.Количество() <> СтрокаВторая.Параметры.Количество() Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ ПараметрыСовпадают = Истина;
+ Для Каждого ПараметрПервой Из СтрокаПервая.Параметры Цикл
+
+ ПараметрНайден = Ложь;
+ Для Каждого ПараметрВторой Из СтрокаВторая.Параметры Цикл
+ Если ПараметрПервой.Имя = ПараметрВторой.Имя
+ И ПараметрПервой.Значение = ПараметрВторой.Значение Тогда
+ ПараметрНайден = Истина;
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если Не ПараметрНайден Тогда
+ ПараметрыСовпадают = Ложь;
+ Прервать;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат ПараметрыСовпадают;
+
+КонецФункции
+
+// Пустая таблица расшифровки
+//
+// Возвращаемое значение:
+// ТаблицаЗначений:
+// * ДескрипторБенчмарка - ДескрипторБенчмарка
+// * Параметры - Массив из ПараметрБенчмарка
+// * Статистика - СтатистикаБенчмарка
+// * Эталон - СтрокаТаблицыЗначений, Неопределено
+// * ЭтоЭталон - Булево
+// * Замеры - см. НоваяТаблицаЗамеров
+// * ИсполняющаяСреда - см. НоваяИсполняющаяСреда
+Функция НоваяТаблицаРасшифровки()
+
+ Таблица = Новый ТаблицаЗначений();
+ Таблица.Колонки.Добавить("ДескрипторБенчмарка");
+ Таблица.Колонки.Добавить("Параметры");
+ Таблица.Колонки.Добавить("Статистика");
+ Таблица.Колонки.Добавить("Эталон");
+ Таблица.Колонки.Добавить("ЭтоЭталон");
+ Таблица.Колонки.Добавить("Замеры");
+ Таблица.Колонки.Добавить("ИсполняющаяСреда");
+
+ Возврат Таблица;
+
+КонецФункции
+
+// Пустая таблица замеров
+//
+// Возвращаемое значение:
+// ТаблицаЗначений:
+// * Этап - см. ЭтапыБенчмарка
+// * НомерИтерации - Число
+// * КоличествоОпераций - Число
+// * Наносекунд - Число - Наносекунд за итерацию
+// * НаносекундЗаОперацию - Число - Наносекунд за операцию
+// * ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию
+// * ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию
+Функция НоваяТаблицаЗамеров()
+
+ Таблица = Новый ТаблицаЗначений();
+ Таблица.Колонки.Добавить("Этап");
+ Таблица.Колонки.Добавить("НомерИтерации");
+ Таблица.Колонки.Добавить("КоличествоОпераций");
+ Таблица.Колонки.Добавить("Наносекунд");
+ Таблица.Колонки.Добавить("НаносекундЗаОперацию");
+ Таблица.Колонки.Добавить("ВыделяемаяПамять");
+ Таблица.Колонки.Добавить("ВыделяемаяПамятьЗаОперацию");
+
+ Возврат Таблица;
+
+КонецФункции
+
+Функция НоваяИсполняющаяСреда()
+
+ ИсполняющаяСреда = Новый Структура();
+ ИсполняющаяСреда.Вставить("Версия", "");
+ ИсполняющаяСреда.Вставить("Алиас", "");
+ ИсполняющаяСреда.Вставить("Наименование", "");
+
+ Возврат ИсполняющаяСреда;
+
+КонецФункции
+
+#КонецОбласти
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\200\321\202\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\200\321\202\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
new file mode 100644
index 0000000..4b91ed2
--- /dev/null
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\261\320\265\321\200\321\202\320\272\320\260\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -0,0 +1,66 @@
+#Использовать asserts
+
+Перем _ИсточникБенчмарков; // Произвольный
+Перем _ОбъектБенчмарков; // Экземпляр класса с бенчмарками
+Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков
+
+// Обертка источника бенчмарков
+//
+// Параметры:
+// ИсточникБенчмарков - Тип - Класс, содержащий бенчмарки
+// - КоллекцияДескрипторовБенчмарков
+// - ДескрипторБенчмарка
+// - Произвольный - Экземпляр класса с бенчмарками
+Процедура ПриСозданииОбъекта(ИсточникБенчмарков)
+ _ИсточникБенчмарков = ИсточникБенчмарков;
+КонецПроцедуры
+
+Функция ОбъектБенчмарков() Экспорт
+
+ Если Не _ОбъектБенчмарков = Неопределено Тогда
+ Возврат _ОбъектБенчмарков;
+ КонецЕсли;
+
+ Если ТипЗнч(_ИсточникБенчмарков) = Тип("Тип") Тогда
+
+ _ОбъектБенчмарков = Новый(_ИсточникБенчмарков);
+
+ ИначеЕсли ТипЗнч(_ИсточникБенчмарков) = Тип("КоллекцияДескрипторовБенчмарков") Тогда
+
+ Дескриптор = _ИсточникБенчмарков.ПолучитьПервый();
+ Если Не Дескриптор = Неопределено Тогда
+ _ОбъектБенчмарков = Новый(Дескриптор.ТипОбъекта());
+ КонецЕсли;
+
+ ИначеЕсли ТипЗнч(_ИсточникБенчмарков) = Тип("ДескрипторБенчмарка") Тогда
+
+ _ОбъектБенчмарков = Новый(_ИсточникБенчмарков.ТипОбъекта());
+
+ Иначе
+
+ _ОбъектБенчмарков = _ИсточникБенчмарков;
+
+ КонецЕсли;
+
+ Возврат _ОбъектБенчмарков;
+
+КонецФункции
+
+Функция Дескрипторы() Экспорт
+
+ Если Не _ДескрипторыБенчмарков = Неопределено Тогда
+ Возврат _ДескрипторыБенчмарков;
+ КонецЕсли;
+
+ Если ТипЗнч(_ИсточникБенчмарков) = Тип("КоллекцияДескрипторовБенчмарков") Тогда
+ _ДескрипторыБенчмарков = _ИсточникБенчмарков;
+ ИначеЕсли ТипЗнч(_ИсточникБенчмарков) = Тип("ДескрипторБенчмарка") Тогда
+ _ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков();
+ _ДескрипторыБенчмарков.Добавить(_ИсточникБенчмарков);
+ Иначе
+ _ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(ОбъектБенчмарков());
+ КонецЕсли;
+
+ Возврат _ДескрипторыБенчмарков;
+
+КонецФункции
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index 066330e..49d9acf 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -1,8 +1,8 @@
#Использовать lambdas
-Перем _ДескрипторыБенчмарков; // Массив из ДескрипторБенчмарка
+Перем _ДескрипторыБенчмарков; // КоллекцияДескрипторовБенчмарков
Перем _Конфигурация; // КонфигурацияБенчмарков
-Перем _РезультатыЗапусков; // ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
+Перем _РасшифровкаРезультатов; // см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
Перем _Отчет; // ОтчетБенчмарков
Перем _КолонкиКонфигурации; // Массив из Строка
@@ -11,12 +11,12 @@
// Параметры:
// ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
// Конфигурация - КонфигурацияБенчмарков
-// РезультатыЗапусков - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаРезультатовЗапусков
-Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, РезультатыЗапусков)
+// РасшифровкаРезультатов - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
+Процедура ПриСозданииОбъекта(ДескрипторыБенчмарков, Конфигурация, РасшифровкаРезультатов)
- _ДескрипторыБенчмарков = ДескрипторыБенчмарков.ВМассив();
+ _ДескрипторыБенчмарков = ДескрипторыБенчмарков;
_Конфигурация = Конфигурация;
- _РезультатыЗапусков = РезультатыЗапусков;
+ _РасшифровкаРезультатов = РасшифровкаРезультатов;
_КолонкиКонфигурации = _Конфигурация.Колонки();
КонецПроцедуры
@@ -51,10 +51,11 @@
Процедура ДобавитьКолонки()
ДобавитьКолонкуПорядкаПоУмолчанию();
- ДобавитьКолонкуРезультатЗапуска();
+ ДобавитьКолонкуРасшифровкаРезультатов();
ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьМетод());
ДобавитьКолонкуКатегория();
ДобавитьКолонкиПараметров();
+ ДобавитьКолонкуВерсияИсполняющейСреды();
ДобавитьКолонкуЭталон();
ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьСреднее());
ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьСтандартнаяОшибка());
@@ -76,8 +77,8 @@
_Отчет.Таблица.Колонки.Добавить(ИмяКолонкиПорядокПоУмолчанию());
КонецПроцедуры
-Процедура ДобавитьКолонкуРезультатЗапуска()
- _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРезультатЗапуска());
+Процедура ДобавитьКолонкуРасшифровкаРезультатов()
+ _Отчет.Таблица.Колонки.Добавить(ИмяКолонкиРасшифровкаРезультатов());
КонецПроцедуры
Процедура ДобавитьКолонкиПараметров()
@@ -86,7 +87,7 @@
ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Параметр.Имя));
КонецЦикла;
- Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков Цикл
+ Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл
Для Каждого Имя Из ДескрипторБенчмарка.ИменаПараметров() Цикл
ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьПараметр(Имя));
КонецЦикла;
@@ -102,11 +103,28 @@
КонецПроцедуры
+Процедура ДобавитьКолонкуВерсияИсполняющейСреды()
+
+ ЕстьВерсия = Ложь;
+
+ Для Каждого СтрокаРасшифровкиЗамеров Из _РасшифровкаРезультатов Цикл
+ Если ЗначениеЗаполнено(СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия) Тогда
+ ЕстьВерсия = Истина;
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если ЕстьВерсия Тогда
+ ДобавитьКолонку(КолонкиОтчетаБенчмарков.СоздатьВерсияИсполняющейСреды());
+ КонецЕсли;
+
+КонецПроцедуры
+
Процедура ДобавитьКолонкуКатегория()
ЕстьКатегория = Ложь;
- Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков Цикл
+ Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков.ВМассив() Цикл
Если ЗначениеЗаполнено(ДескрипторБенчмарка.Категория()) Тогда
ЕстьКатегория = Истина;
Прервать;
@@ -190,7 +208,7 @@
СкрываемыеКолонки = Новый Массив();
СкрываемыеКолонки.Добавить(ИмяКолонкиПорядокПоУмолчанию());
- СкрываемыеКолонки.Добавить(ИмяКолонкиРезультатЗапуска());
+ СкрываемыеКолонки.Добавить(ИмяКолонкиРасшифровкаРезультатов());
Для Каждого Колонка Из _Отчет.Колонки Цикл
Если СкрыватьКолонку(Колонка) Тогда
@@ -226,7 +244,7 @@
Контекст = Новый Структура();
Контекст.Вставить("Значение", СтрокаОтчета[Колонка.Имя]);
- Контекст.Вставить("Статистика", СтрокаОтчета.РезультатЗапуска.Статистика);
+ Контекст.Вставить("Статистика", СтрокаОтчета.РасшифровкаРезультатов.Статистика);
Попытка
Скрывать = Действие.Выполнить(Контекст) = Истина;
@@ -251,9 +269,9 @@
НомерБенчмарка = 0;
ПредыдущийБенчмарк = "";
- Для Каждого СтрокаРезультат Из _РезультатыЗапусков Цикл
+ Для Каждого СтрокаРасшифровкиЗамеров Из _РасшифровкаРезультатов Цикл
- ИмяБенчмарка = СтрокаРезультат.ДескрипторБенчмарка.Метод();
+ ИмяБенчмарка = СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.Метод();
Если Не ПредыдущийБенчмарк = ИмяБенчмарка Тогда
НомерБенчмарка = НомерБенчмарка + 1;
ПредыдущийБенчмарк = ИмяБенчмарка;
@@ -261,10 +279,10 @@
СтрокаОтчета = _Отчет.Таблица.Добавить();
СтрокаОтчета[ИмяКолонкиПорядокПоУмолчанию()] = НомерБенчмарка;
- СтрокаОтчета[ИмяКолонкиРезультатЗапуска()] = СтрокаРезультат;
+ СтрокаОтчета[ИмяКолонкиРасшифровкаРезультатов()] = СтрокаРасшифровкиЗамеров;
Для Каждого Колонка Из _Отчет.Колонки Цикл
- СтрокаОтчета[Колонка.Имя] = Колонка.Значение(СтрокаРезультат, Колонка);
+ СтрокаОтчета[Колонка.Имя] = Колонка.Значение(СтрокаРасшифровкиЗамеров, Колонка);
КонецЦикла;
КонецЦИкла;
@@ -394,7 +412,10 @@
Процедура ДобавитьСортировкуПоПараметрам(Сортировка)
Для Каждого ИмяПараметра Из _Конфигурация.ИменаПараметров() Цикл
- ДобавитьСортировку(Сортировка, КолонкиОтчетаБенчмарков.Параметр(ИмяПараметра));
+ ИмяКолонки = КолонкиОтчетаБенчмарков.Параметр(ИмяПараметра);
+ Если КолонкаСодержитТолькоСериализуемыеЗначения(ИмяКолонки) Тогда
+ ДобавитьСортировку(Сортировка, ИмяКолонки);
+ КонецЕсли;
КонецЦикла;
КонецПроцедуры
@@ -407,15 +428,24 @@
КонецПроцедуры
-Функция ИспользуетсяЭталон()
+Функция КолонкаСодержитТолькоСериализуемыеЗначения(ИмяКолонки)
- Для Каждого ДескрипторБенчмарка Из _ДескрипторыБенчмарков Цикл
- Если ДескрипторБенчмарка.ЭтоЭталон() Тогда
- Возврат Истина;
+ Для Каждого Строка Из _Отчет.Таблица Цикл
+ Если Не СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Строка[ИмяКолонки]) Тогда
+ Возврат Ложь;
КонецЕсли;
КонецЦикла;
- Возврат Ложь;
+ Возврат Истина;
+
+КонецФункции
+
+Функция ИспользуетсяЭталон()
+
+ ЕстьЭталоннаяВерсия = _Конфигурация.ВерсииИсполняющейСреды().Найти(Истина, "ЭтоЭталон") <> Неопределено;
+ ЕстьЭталонныеБенчмарки = _ДескрипторыБенчмарков.ПолучитьЭталонные().Количество() > 0;
+
+ Возврат ЕстьЭталоннаяВерсия Или ЕстьЭталонныеБенчмарки;
КонецФункции
@@ -437,8 +467,8 @@
Возврат "ПорядокПоУмолчанию";
КонецФункции
-Функция ИмяКолонкиРезультатЗапуска()
- Возврат "РезультатЗапуска";
+Функция ИмяКолонкиРасшифровкаРезультатов()
+ Возврат "РасшифровкаРезультатов";
КонецФункции
#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
new file mode 100644
index 0000000..3da4d47
--- /dev/null
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -0,0 +1,207 @@
+#Использовать logos
+#Использовать asserts
+
+Перем _Лог; // Лог
+
+// Сериализатор конфигурации бенчмарков
+Процедура ПриСозданииОбъекта()
+ _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторКонфигурацииБенчмарков");
+КонецПроцедуры
+
+#Область ПрограммныйИнтерфейс
+
+// Сериализует конфигурацию бенчмарков в JSON-файл
+//
+// Параметры:
+// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков
+// ИмяФайла - Строка - Имя файла, в который будет записана конфигурация.
+Процедура СериализоватьВJSON(Конфигурация, ИмяФайла) Экспорт
+
+ _Лог.Отладка("Начало формирования файла: %1", ИмяФайла);
+
+ ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
+
+ ЗаписьJSON = Новый ЗаписьJSON();
+ ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON);
+ ЗаписатьJSON(ЗаписьJSON, Конвертировать(Конфигурация));
+ ЗаписьJSON.Закрыть();
+
+ _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла);
+
+КонецПроцедуры
+
+// Десериализует конфигурацию бенчмарков из JSON-файла
+//
+// Параметры:
+// ИмяФайла - Строка - Имя файла, из которого будет прочитана конфигурация.
+//
+// Возвращаемое значение:
+// КонфигурацияБенчмарков
+Функция ДесериализоватьИзJSON(ИмяФайла) Экспорт
+
+ _Лог.Отладка("Начало чтения файла: %1", ИмяФайла);
+
+ ЧтениеJSON = Новый ЧтениеJSON();
+ ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8");
+ Данные = ПрочитатьJSON(ЧтениеJSON, Ложь);
+ ЧтениеJSON.Закрыть();
+
+ _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла);
+
+ Возврат СобратьКонфигурацию(Данные);
+
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция Конвертировать(Конфигурация)
+
+ Данные = Новый Структура();
+
+ Для Каждого СтрокаТаблицы Из Конфигурация.ВТаблицу() Цикл
+
+ Если СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(СтрокаТаблицы.Значение)
+ Или СтрокаТаблицы.Имя = "Колонки" Тогда
+ Значение = СтрокаТаблицы.Значение;
+ ИначеЕсли СтрокаТаблицы.Имя = "Параметры" Тогда
+ Значение = КонвертироватьПараметры(СтрокаТаблицы.Значение);
+ ИначеЕсли СтрокаТаблицы.Имя = "ОбработчикиСобытий" Тогда
+ Значение = КонвертироватьОбработчикиСобытий(СтрокаТаблицы.Значение);
+ ИначеЕсли СтрокаТаблицы.Имя = "Экспортеры" Тогда
+ Значение = КонвертироватьЭкспортеры(СтрокаТаблицы.Значение);
+ ИначеЕсли СтрокаТаблицы.Имя = "ВерсииИсполняющейСреды" Тогда
+ Значение = КонвертироватьВерсииИсполняющейСреды(СтрокаТаблицы.Значение);
+ Иначе
+ ВызватьИсключение СтрШаблон("Не реализована конвертация параметра '%1'", СтрокаТаблицы.Имя);
+ КонецЕсли;
+
+ Данные.Вставить(СтрокаТаблицы.Имя, Значение);
+
+ КонецЦикла;
+
+ Возврат Данные;
+
+КонецФункции
+
+Функция КонвертироватьПараметры(Параметры)
+
+ Результат = Новый Массив();
+
+ Для Каждого ПараметрБенчмарка Из Параметры Цикл
+
+ Значение = Новый Структура();
+ Значение.Вставить("Имя", ПараметрБенчмарка.Имя);
+ Значение.Вставить("Значение", ПараметрБенчмарка.Значение);
+ Значение.Вставить("ЭтоПараметрМетода", ПараметрБенчмарка.ЭтоПараметрМетода);
+
+ Результат.Добавить(Значение);
+
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция КонвертироватьОбработчикиСобытий(ОбработчикиСобытий)
+
+ Результат = Новый Массив();
+
+ Для Каждого Строка Из ОбработчикиСобытий Цикл
+
+ Если ТипЗнч(Строка.Обработчик) <> Тип("Строка") Тогда
+ _Лог.Предупреждение(
+ "Делегат %1.%2 не будет сериализован",
+ ТипЗнч(Строка.Обработчик.Объект()),
+ Строка.Обработчик.ИмяМетода
+ );
+ Продолжить;
+ КонецЕсли;
+
+ Значение = Новый Структура();
+ Значение.Вставить("Событие", Строка.Событие);
+ Значение.Вставить("Обработчик", Строка.Обработчик);
+
+ Результат.Добавить(Значение);
+
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция КонвертироватьЭкспортеры(Экспортеры)
+
+ Результат = Новый Массив();
+
+ Для Каждого Экспортер Из Экспортеры Цикл
+ Результат.Добавить(Строка(ТипЗнч(Экспортер)));
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция КонвертироватьВерсииИсполняющейСреды(Версии)
+
+ Результат = Новый Массив();
+
+ Для Каждого СтрокаВерсия Из Версии Цикл
+ Версия = Новый Структура();
+ Версия.Вставить("Версия", СтрокаВерсия.Версия);
+ Версия.Вставить("Наименование", СтрокаВерсия.Наименование);
+ Версия.Вставить("ЭтоЭталон", СтрокаВерсия.ЭтоЭталон);
+
+ Результат.Добавить(Версия);
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция СобратьКонфигурацию(Данные)
+
+ Конфигурация = Новый КонфигурацияБенчмарков();
+ Конфигурация.УстановитьКоличествоИтераций(Данные.КоличествоИтераций);
+ Конфигурация.УстановитьКоличествоВызововЗаИтерацию(Данные.КоличествоВызововЗаИтерацию);
+ Конфигурация.УстановитьКоличествоПрогревочныхИтераций(Данные.КоличествоПрогревочныхИтераций);
+ Конфигурация.УстановитьМинимальноеВремяИтерации(Данные.МинимальноеВремяИтерации);
+ Конфигурация.УстановитьМинимальноеКоличествоВызововЗаИтерацию(Данные.МинимальноеКоличествоВызововЗаИтерацию);
+ Конфигурация.УстановитьСтратегию(Данные.Стратегия);
+ Конфигурация.УстановитьСортировкуОтчета(Данные.СортировкаОтчета);
+ Конфигурация.УстановитьКаталогАртефактов(Данные.КаталогАртефактов);
+
+ Если Данные.ТребуетсяМониторингПамяти Тогда
+ Конфигурация.ДобавитьМониторингПамяти();
+ КонецЕсли;
+
+ Для Каждого Параметр Из Данные.Параметры Цикл
+ Конфигурация.ДобавитьПараметр(Параметр.Имя, Параметр.Значение);
+ КонецЦикла;
+
+ Для Каждого ДанныеСобытия Из Данные.ОбработчикиСобытий Цикл
+ Конфигурация.ДобавитьОбработчикСобытия(ДанныеСобытия.Событие, ДанныеСобытия.Обработчик);
+ КонецЦикла;
+
+ Для Каждого Колонка Из Данные.Колонки Цикл
+ Конфигурация.ДобавитьКолонку(Колонка);
+ КонецЦикла;
+
+ Для Каждого Экспортер Из Данные.Экспортеры Цикл
+ Конфигурация.ДобавитьЭкспортер(Новый(Тип(Экспортер)));
+ КонецЦикла;
+
+ Для Каждого ВерсияИсполняющейСреды Из Данные.ВерсииИсполняющейСреды Цикл
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды(
+ ВерсияИсполняющейСреды.Версия,
+ ВерсияИсполняющейСреды.Наименование,
+ ВерсияИсполняющейСреды.ЭтоЭталон
+ );
+ КонецЦикла;
+
+ Возврат Конфигурация;
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
new file mode 100644
index 0000000..623102c
--- /dev/null
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -0,0 +1,373 @@
+#Использовать logos
+#Использовать xml-parser
+
+Перем _Лог; // Лог
+
+// Сериализатор результатов бенчмарков
+Процедура ПриСозданииОбъекта()
+ _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.СериализаторРезультатовБенчмарков");
+КонецПроцедуры
+
+#Область ПрограммныйИнтерфейс
+
+// Сериализует результаты бенчмарков в JSON-файл
+//
+// Параметры:
+// РезультатыБенчмарков - Структура:
+// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
+// * СредаОкружения - СредаОкруженияБенчмарков
+// ИмяФайла - Строка - Имя файла, в который будут записаны результаты бенчмарков.
+Процедура СериализоватьВJSON(РезультатыБенчмарков, ИмяФайла) Экспорт
+
+ _Лог.Отладка("Начало формирования файла: %1", ИмяФайла);
+
+ Данные = СтруктураДляСериализации(РезультатыБенчмарков);
+
+ ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
+
+ ЗаписьJSON = Новый ЗаписьJSON();
+ ЗаписьJSON.ОткрытьФайл(ИмяФайла, "UTF-8", , ПараметрыЗаписиJSON);
+ ЗаписатьJSON(ЗаписьJSON, Данные);
+ ЗаписьJSON.Закрыть();
+
+ _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла);
+
+КонецПроцедуры
+
+// Десериализует результаты бенчмарков из JSON-файла
+//
+// Параметры:
+// ИмяФайла - Строка - Имя файла, из которого будут прочитаны результаты бенчмарков.
+// Конфигурация - КонфигурацияБенчмарков - Конфигурация
+//
+// Возвращаемое значение:
+// Структура:
+// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
+// * СредаОкружения - СредаОкруженияБенчмарков
+Функция ДесериализоватьИзJSON(ИмяФайла, Конфигурация) Экспорт
+
+ _Лог.Отладка("Начало чтения файла: %1", ИмяФайла);
+
+ ЧтениеJSON = Новый ЧтениеJSON();
+ ЧтениеJSON.ОткрытьФайл(ИмяФайла, "UTF-8");
+ Данные = ПрочитатьJSON(ЧтениеJSON, Ложь);
+ ЧтениеJSON.Закрыть();
+
+ _Лог.Отладка("Завершение чтения файла: %1", ИмяФайла);
+
+ Возврат СобратьРезультатыБенчмарков(Данные, Конфигурация);
+
+КонецФункции
+
+// Сериализует результаты бенчмарков в XML-файл
+//
+// Параметры:
+// РезультатыБенчмарков - Структура:
+// * Расшифровка - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаРасшифровки
+// * СредаОкружения - СредаОкруженияБенчмарков
+// ИмяФайла - Строка - Имя файла, в который будут записаны результаты бенчмарков.
+Процедура СериализоватьВXML(РезультатыБенчмарков, ИмяФайла) Экспорт
+
+ _Лог.Отладка("Начало формирования файла: %1", ИмяФайла);
+
+ Данные = СтруктураДляСериализации(РезультатыБенчмарков);
+ ПодготовитьЗначенияДляЗаписиВXML(Данные);
+ ПодготовитьМассивыДляЗаписиВXML(Данные);
+ Данные = Новый Структура("Отчет", Данные);
+
+ ПроцессорXML = Новый СериализацияДанныхXML(Ложь);
+ ПроцессорXML.ЗаписатьВФайл(Данные, ИмяФайла, Истина);
+
+ _Лог.Отладка("Завершение формирования файла: %1", ИмяФайла);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция СтруктураДляСериализации(РезультатыБенчмарков)
+
+ ИнформацияОПроцессоре = РезультатыБенчмарков.СредаОкружения.ИнформацияОПроцессоре;
+
+ УзелСредаОкружения = Новый Структура();
+ УзелСредаОкружения.Вставить("ВерсияBenchmarkOneScript", РезультатыБенчмарков.СредаОкружения.ВерсияБиблиотеки);
+ УзелСредаОкружения.Вставить("ВерсияОС", РезультатыБенчмарков.СредаОкружения.ВерсияОС);
+ УзелСредаОкружения.Вставить("ВерсияИсполняющейСреды", РезультатыБенчмарков.СредаОкружения.ВерсияИсполняющейСреды);
+ УзелСредаОкружения.Вставить("ИмяПроцессора", ИнформацияОПроцессоре.ИмяПроцессора);
+ УзелСредаОкружения.Вставить("КоличествоПроцессоров", ИнформацияОПроцессоре.КоличествоПроцессоров);
+ УзелСредаОкружения.Вставить("КоличествоЯдер", ИнформацияОПроцессоре.КоличествоЯдер);
+ УзелСредаОкружения.Вставить("КоличествоЛогическихПроцессоров", ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров);
+
+ УзелБенчмарки = Новый Массив();
+
+ Для Каждого СтрокаРасшифровкиЗамеров Из РезультатыБенчмарков.Расшифровка Цикл
+
+ УзелИсполняющаяСреда = Новый Структура();
+ УзелИсполняющаяСреда.Вставить("Версия", СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Версия);
+ УзелИсполняющаяСреда.Вставить("Алиас", СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Алиас);
+ УзелИсполняющаяСреда.Вставить("Наименование", СтрокаРасшифровкиЗамеров.ИсполняющаяСреда.Наименование);
+
+ УзелБенчмарк = Новый Структура();
+ УзелБенчмарк.Вставить("Тип", Строка(СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.ТипОбъекта()));
+ УзелБенчмарк.Вставить("Метод", СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.Метод());
+ УзелБенчмарк.Вставить("Категория", СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.Категория());
+ УзелБенчмарк.Вставить("ЭтоЭталон", СтрокаРасшифровкиЗамеров.ДескрипторБенчмарка.ЭтоЭталон());
+ УзелБенчмарк.Вставить("ИсполняющаяСреда", УзелИсполняющаяСреда);
+ УзелБенчмарк.Вставить("Параметры", Новый Структура());
+ УзелБенчмарк.Вставить("Статистика", Новый Структура());
+ УзелБенчмарк.Вставить("Замеры", Новый Массив());
+
+ Статистика = СтрокаРасшифровкиЗамеров.Статистика;
+ УзелБенчмарк.Статистика.Вставить("Значения", Новый Массив());
+ УзелБенчмарк.Статистика.Вставить("Количество", 0);
+ УзелБенчмарк.Статистика.Вставить("Мин", Статистика.Мин);
+ УзелБенчмарк.Статистика.Вставить("Q1", Статистика.НижнийКвартиль);
+ УзелБенчмарк.Статистика.Вставить("Медиана", Статистика.Медиана);
+ УзелБенчмарк.Статистика.Вставить("Среднее", Статистика.Среднее);
+ УзелБенчмарк.Статистика.Вставить("Q3", Статистика.ВерхнийКвартиль);
+ УзелБенчмарк.Статистика.Вставить("Макс", Статистика.Макс);
+ УзелБенчмарк.Статистика.Вставить("СтандартноеОтклонение", Статистика.СтандартноеОтклонение);
+ УзелБенчмарк.Статистика.Вставить("СтандартнаяОшибкаСреднего", Статистика.СтандартнаяОшибкаСреднего);
+ УзелБенчмарк.Статистика.Вставить("ОперацийВСекунду", Статистика.ОперацийВСекунду);
+ УзелБенчмарк.Статистика.Вставить("Процентили", Новый Структура());
+
+ // BSLLS:MagicNumber-off
+ УзелБенчмарк.Статистика.Процентили.Вставить("P0", Статистика.Квантиль(0));
+ УзелБенчмарк.Статистика.Процентили.Вставить("P25", Статистика.Квантиль(0.25));
+ УзелБенчмарк.Статистика.Процентили.Вставить("P50", Статистика.Квантиль(0.5));
+ УзелБенчмарк.Статистика.Процентили.Вставить("P67", Статистика.Квантиль(0.67));
+ УзелБенчмарк.Статистика.Процентили.Вставить("P80", Статистика.Квантиль(0.8));
+ УзелБенчмарк.Статистика.Процентили.Вставить("P85", Статистика.Квантиль(0.85));
+ УзелБенчмарк.Статистика.Процентили.Вставить("P90", Статистика.Квантиль(0.90));
+ УзелБенчмарк.Статистика.Процентили.Вставить("P95", Статистика.Квантиль(0.95));
+ УзелБенчмарк.Статистика.Процентили.Вставить("P100", Статистика.Квантиль(1));
+ // BSLLS:MagicNumber-on
+
+ УзелБенчмарк.Статистика.Вставить("Память", Новый Структура());
+ УзелБенчмарк.Статистика.Память.Вставить("ВыделяемаяЗаОперацию", Статистика.ВыделяемаяПамять);
+
+ Для Каждого Замер Из СтрокаРасшифровкиЗамеров.Замеры Цикл
+
+ Если Замер.Этап = ЭтапыБенчмарка.Измерение Тогда
+ УзелБенчмарк.Статистика.Значения.Добавить(Замер.НаносекундЗаОперацию);
+ КонецЕсли;
+
+ УзелЗамера = Новый Структура();
+ УзелЗамера.Вставить("Этап", Замер.Этап);
+ УзелЗамера.Вставить("НомерИтерации", Замер.НомерИтерации);
+ УзелЗамера.Вставить("КоличествоОпераций", Замер.КоличествоОпераций);
+ УзелЗамера.Вставить("Наносекунд", Замер.Наносекунд);
+ УзелЗамера.Вставить("НаносекундЗаОперацию", Замер.НаносекундЗаОперацию);
+ УзелЗамера.Вставить("ВыделяемаяПамять", Замер.ВыделяемаяПамять);
+ УзелЗамера.Вставить("ВыделяемаяПамятьЗаОперацию", Замер.ВыделяемаяПамятьЗаОперацию);
+
+ УзелБенчмарк.Замеры.Добавить(УзелЗамера);
+
+ КонецЦикла;
+
+ УзелБенчмарк.Статистика.Количество = УзелБенчмарк.Статистика.Значения.Количество();
+
+ Для Каждого Параметр Из СтрокаРасшифровкиЗамеров.Параметры Цикл
+ Значение = СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Параметр.Значение);
+ УзелБенчмарк.Параметры.Вставить(Параметр.Имя, Значение);
+ КонецЦикла;
+
+ УзелБенчмарки.Добавить(УзелБенчмарк);
+
+ КонецЦикла;
+
+ Данные = Новый Структура();
+ Данные.Вставить("СредаОкружения", УзелСредаОкружения);
+ Данные.Вставить("Бенчмарки", УзелБенчмарки);
+
+ Возврат Данные;
+
+КонецФункции
+
+Процедура ПодготовитьМассивыДляЗаписиВXML(Данные)
+
+ Для Каждого Строка Из Данные.Бенчмарки Цикл
+ ПодготовитьМассивДляЗаписиВXML(Строка.Статистика.Значения, "Значение");
+ ПодготовитьМассивДляЗаписиВXML(Строка.Замеры, "Замер");
+ КонецЦикла;
+
+ ПодготовитьМассивДляЗаписиВXML(Данные.Бенчмарки, "Бенчмарк");
+
+КонецПроцедуры
+
+Процедура ПодготовитьЗначенияДляЗаписиВXML(Данные)
+
+ // В xml-parser не все простые типы корректно сериализуются
+ Для Каждого Строка Из Данные.Бенчмарки Цикл
+ Для Каждого Параметр Из Строка.Параметры Цикл
+ Если СериализацияОбъектовБенчмаркинга.ЗначениеСериализуется(Параметр.Значение) Тогда
+ Строка.Параметры[Параметр.Ключ] = XMLСтрока(Параметр.Значение);
+ КонецЕсли;
+ КонецЦикла;
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ПодготовитьМассивДляЗаписиВXML(Массив, Имя)
+
+ Для Инд = 0 По Массив.ВГраница() Цикл
+ Значение = Массив[Инд];
+ Массив[Инд] = Новый Структура(Имя, Значение);
+ КонецЦикла;
+
+КонецПроцедуры
+
+Функция СобратьРезультатыБенчмарков(Данные, Конфигурация)
+
+ // Расшифровка замеров
+ МенеджерРасшифровкиРезультатов = Новый МенеджерРасшифровкиРезультатовБенчмарков();
+
+ ДескрипторыБенчмарков = Новый Соответствие();
+
+ Для Каждого УзелБенчмарк Из Данные.Бенчмарки Цикл
+
+ ДескрипторБенчмарка = СобратьДескрипторБенчмарка(УзелБенчмарк, ДескрипторыБенчмарков, Конфигурация);
+
+ СтрокаТаблицы = МенеджерРасшифровкиРезультатов.Добавить();
+ СтрокаТаблицы.ДескрипторБенчмарка = ДескрипторБенчмарка;
+ СтрокаТаблицы.ИсполняющаяСреда.Версия = УзелБенчмарк.ИсполняющаяСреда.Версия;
+ СтрокаТаблицы.ИсполняющаяСреда.Алиас = УзелБенчмарк.ИсполняющаяСреда.Алиас;
+ СтрокаТаблицы.ИсполняющаяСреда.Наименование = УзелБенчмарк.ИсполняющаяСреда.Наименование;
+
+ ЗаполнитьПараметрыВСтроке(СтрокаТаблицы, УзелБенчмарк);
+ ЗаполнитьЗамерыВСтроке(СтрокаТаблицы, УзелБенчмарк);
+
+ КонецЦикла;
+
+ МенеджерРасшифровкиРезультатов.ОпределитьЭталоны(Конфигурация);
+ МенеджерРасшифровкиРезультатов.ОбновитьСтатистику();
+
+ // Среда окружения
+ УзелСредаОкружения = Данные.СредаОкружения;
+
+ ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре(Ложь);
+ ИнформацияОПроцессоре.ИмяПроцессора = УзелСредаОкружения.ИмяПроцессора;
+ ИнформацияОПроцессоре.КоличествоПроцессоров = УзелСредаОкружения.КоличествоПроцессоров;
+ ИнформацияОПроцессоре.КоличествоЯдер = УзелСредаОкружения.КоличествоЯдер;
+ ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров = УзелСредаОкружения.КоличествоЛогическихПроцессоров;
+
+ СредаОкружения = Новый СредаОкруженияБенчмарков();
+ СредаОкружения.ВерсияБиблиотеки = УзелСредаОкружения.ВерсияBenchmarkOneScript;
+ СредаОкружения.ВерсияОС = УзелСредаОкружения.ВерсияОС;
+ СредаОкружения.ВерсияИсполняющейСреды = УзелСредаОкружения.ВерсияИсполняющейСреды;
+ СредаОкружения.ИнформацияОПроцессоре = ИнформацияОПроцессоре;
+
+ // Подготовка результата
+ Результат = Новый Структура();
+ Результат.Вставить("Расшифровка", МенеджерРасшифровкиРезультатов.ВТаблицу());
+ Результат.Вставить("СредаОкружения", СредаОкружения);
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция СобратьДескрипторБенчмарка(УзелБенчмарк, ДескрипторыБенчмарков, Конфигурация)
+
+ Тип = Тип(УзелБенчмарк.Тип);
+ ЭталоннаяВерсия = Конфигурация.ЭталоннаяВерсияИсполняющейСреды();
+
+ Если ДескрипторыБенчмарков[Тип] = Неопределено Тогда
+ ДескрипторыБенчмарков[Тип] = Новый Соответствие();
+ КонецЕсли;
+
+ ДескрипторБенчмарка = ДескрипторыБенчмарков[Тип][УзелБенчмарк.Метод];
+ Если Не ДескрипторБенчмарка = Неопределено Тогда
+ Возврат ДескрипторБенчмарка;
+ КонецЕсли;
+
+ ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Тип, УзелБенчмарк.Метод);
+
+ Если УзелБенчмарк.ЭтоЭталон И Не ЗначениеЗаполнено(ЭталоннаяВерсия) Тогда
+ ДескрипторБенчмарка.ИспользоватьКакЭталон(УзелБенчмарк.ЭтоЭталон);
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(УзелБенчмарк.Категория) Тогда
+ ДескрипторБенчмарка.УстановитьКатегорию(УзелБенчмарк.Категория);
+ КонецЕсли;
+
+ ДескрипторыБенчмарков[Тип].Вставить(УзелБенчмарк.Метод, ДескрипторБенчмарка);
+
+ Возврат ДескрипторБенчмарка;
+
+КонецФункции
+
+Процедура ЗаполнитьПараметрыВСтроке(СтрокаРезультата, УзелБенчмарк)
+
+ ИменаПараметровБенчмарка = СтрокаРезультата.ДескрипторБенчмарка.ИменаПараметров();
+ КоличествоПараметров = ИменаПараметровБенчмарка.Количество();
+
+ Если КоличествоПараметров = 0 Тогда
+ ПараметрыМетода = Новый Массив();
+ Иначе
+ ПараметрыМетода = Новый Массив(КоличествоПараметров);
+ КонецЕсли;
+
+ Для Каждого УзелПараметр Из УзелБенчмарк.Параметры Цикл
+
+ Имя = УзелПараметр.Ключ;
+ Значение = УзелПараметр.Значение;
+
+ ИндексПараметра = ИменаПараметровБенчмарка.Найти(Имя);
+ ЭтоПараметрМетода = Не ИндексПараметра = Неопределено;
+
+ ПараметрБенчмарка = Новый ПараметрБенчмарка(Имя, Значение, ЭтоПараметрМетода);
+ СтрокаРезультата.Параметры.Добавить(ПараметрБенчмарка);
+
+ Если ЭтоПараметрМетода Тогда
+ ПараметрыМетода[ИндексПараметра] = Значение;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если ПараметрыМетода.Количество() > 0
+ И ОтсутствуетНаборПараметровБенчмарка(СтрокаРезультата.ДескрипторБенчмарка, ПараметрыМетода) Тогда
+ СтрокаРезультата.ДескрипторБенчмарка.ДобавитьПараметры(ПараметрыМетода);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Функция ОтсутствуетНаборПараметровБенчмарка(ДескрипторБенчмарка, ПараметрыМетода)
+
+ НайденНабор = Ложь;
+ Для Каждого НаборПараметров Из ДескрипторБенчмарка.НаборыПараметров() Цикл
+ НайденНабор = Истина;
+ Для Инд = 0 По НаборПараметров.ВГраница() Цикл
+ Если Не НаборПараметров[Инд].Значение = ПараметрыМетода[Инд] Тогда
+ НайденНабор = Ложь;
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+ КонецЦикла;
+
+ Возврат Не НайденНабор;
+
+КонецФункции
+
+Процедура ЗаполнитьЗамерыВСтроке(СтрокаРезультата, УзелБенчмарк)
+
+ Для Каждого УзелЗамер Из УзелБенчмарк.Замеры Цикл
+
+ СтрокаЗамера = СтрокаРезультата.Замеры.Добавить();
+ СтрокаЗамера.Этап = УзелЗамер.Этап;
+ СтрокаЗамера.НомерИтерации = ВЧисло(УзелЗамер.НомерИтерации);
+ СтрокаЗамера.КоличествоОпераций = ВЧисло(УзелЗамер.КоличествоОпераций);
+ СтрокаЗамера.Наносекунд = ВЧисло(УзелЗамер.Наносекунд);
+ СтрокаЗамера.НаносекундЗаОперацию = ВЧисло(УзелЗамер.НаносекундЗаОперацию);
+ СтрокаЗамера.ВыделяемаяПамять = ВЧисло(УзелЗамер.ВыделяемаяПамять);
+ СтрокаЗамера.ВыделяемаяПамятьЗаОперацию = ВЧисло(УзелЗамер.ВыделяемаяПамятьЗаОперацию);
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Функция ВЧисло(Значение)
+ Возврат XMLЗначение(Тип("Число"), Значение);
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index e17b0ec..cefd206 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\200\320\265\320\264\320\260\320\236\320\272\321\200\321\203\320\266\320\265\320\275\320\270\321\217\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -4,7 +4,7 @@
Перем ВерсияБиблиотеки Экспорт; // Строка
Перем ВерсияОС Экспорт; // Строка
-Перем ВерсияПлатформы Экспорт; // Строка
+Перем ВерсияИсполняющейСреды Экспорт; // Строка
Перем ИнформацияОПроцессоре Экспорт; // см. ИнформацияОПроцессоре
Процедура ПриСозданииОбъекта()
@@ -13,7 +13,7 @@
СистемнаяИнформация = Новый СистемнаяИнформация();
ВерсияОС = СистемнаяИнформация.ВерсияОС;
- ВерсияПлатформы = СистемнаяИнформация.Версия;
+ ВерсияИсполняющейСреды = СистемнаяИнформация.Версия;
ИнформацияОПроцессоре = Новый ИнформацияОПроцессоре();
@@ -21,7 +21,16 @@
Функция ВСтроку() Экспорт
- Возврат СтрШаблон("BenchmarkOneScript v%1, OneScript v%2, %3
- |%4", ВерсияБиблиотеки, ВерсияПлатформы, ВерсияОС, ИнформацияОПроцессоре.ПолноеОписание());
+ Процессор = ИнформацияОПроцессоре.ПолноеОписание();
+
+ Если ПустаяСтрока(ВерсияИсполняющейСреды) Тогда
+ Возврат СтрШаблон("BenchmarkOneScript v%1, %2
+ |%3", ВерсияБиблиотеки, ВерсияОС, Процессор
+ );
+ Иначе
+ Возврат СтрШаблон("BenchmarkOneScript v%1, OneScript v%2, %3
+ |%4", ВерсияБиблиотеки, ВерсияИсполняющейСреды, ВерсияОС, Процессор
+ );
+ КонецЕсли;
КонецФункции
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os"
index 70fdb24..d16f007 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\241\321\202\320\260\321\202\320\270\321\201\321\202\320\270\320\272\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os"
@@ -24,7 +24,7 @@
// Статистика бенчмарка
//
// Параметры:
-// Замеры - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаЗамеров
+// Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров
// - Структура:
// * ЗамерыВремени - Массив из Число
// * ЗамерыПамяти - Массив из Число
@@ -67,7 +67,7 @@
// Читает замеры и формирует статистику
//
// Параметры:
-// Замеры - ТаблицаЗначений - см. ЗапускательБенчмарков.НоваяТаблицаЗамеров
+// Замеры - ТаблицаЗначений - см. МенеджерРасшифровкиРезультатовБенчмарков.НоваяТаблицаЗамеров
// - Структура:
// * ЗамерыВремени - Массив из Число
// * ЗамерыПамяти - Массив из Число
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Json.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Json.os"
index 69f2848..6651e56 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Json.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Json.os"
@@ -1,14 +1,4 @@
-
-#Использовать logos
-
-Перем _Лог; // Лог
-
-// Экспортирует результаты бенчмарков в файл JSON
-Процедура ПриСозданииОбъекта()
- _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЭкспортерРезультатовБенчмарковВJson");
-КонецПроцедуры
-
-// Экспортирует результаты бенчмарков в файл JSON
+// Экспортирует результаты бенчмарков в JSON-файл
//
// Параметры:
// РезультатыБенчмарков - см. Бенчмаркинг.Запустить
@@ -17,18 +7,8 @@
КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов();
ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение());
- _Лог.Отладка("Начало формирования файла: %1", ПутьКФайлу);
-
- Данные = ЭкспортРезультатовБенчмарков.ПодготовитьРезультаты(РезультатыБенчмарков);
-
- ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
-
- ЗаписьJSON = Новый ЗаписьJSON();
- ЗаписьJSON.ОткрытьФайл(ПутьКФайлу, "UTF-8", , ПараметрыЗаписиJSON);
- ЗаписатьJSON(ЗаписьJSON, Данные);
- ЗаписьJSON.Закрыть();
-
- _Лог.Отладка("Завершение формирования файла: %1", ПутьКФайлу);
+ Сериализатор = Новый СериализаторРезультатовБенчмарков();
+ Сериализатор.СериализоватьВJSON(РезультатыБенчмарков, ПутьКФайлу);
КонецПроцедуры
diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os"
index bc8a53e..9f9d369 100644
--- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os"
+++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\265\321\200\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262\320\222Xml.os"
@@ -1,15 +1,4 @@
-
-#Использовать xml-parser
-#Использовать logos
-
-Перем _Лог; // Лог
-
-// Экспортирует результаты бенчмарков в файл XML
-Процедура ПриСозданииОбъекта()
- _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ЭкспортерРезультатовБенчмарковВXml");
-КонецПроцедуры
-
-// Экспортирует результаты бенчмарков в файл XML
+// Экспортирует результаты бенчмарков в XML-файл
//
// Параметры:
// РезультатыБенчмарков - см. Бенчмаркинг.Запустить
@@ -18,16 +7,8 @@
КаталогАртефактов = РезультатыБенчмарков.Конфигурация.КаталогАртефактов();
ПутьКФайлу = ОбъединитьПути(КаталогАртефактов, РезультатыБенчмарков.ИмяКласса + "-report." + Расширение());
- _Лог.Отладка("Начало формирования файла: %1", ПутьКФайлу);
-
- Данные = ЭкспортРезультатовБенчмарков.ПодготовитьРезультаты(РезультатыБенчмарков);
- ПодготовитьМассивы(Данные);
- Данные = Новый Структура("Отчет", Данные);
-
- ПроцессорXML = Новый СериализацияДанныхXML(Ложь);
- ПроцессорXML.ЗаписатьВФайл(Данные, ПутьКФайлу, Истина);
-
- _Лог.Отладка("Завершение формирования файла: %1", ПутьКФайлу);
+ Сериализатор = Новый СериализаторРезультатовБенчмарков();
+ Сериализатор.СериализоватьВXML(РезультатыБенчмарков, ПутьКФайлу);
КонецПроцедуры
@@ -37,14 +18,4 @@
// Строка
Функция Расширение() Экспорт
Возврат "xml";
-КонецФункции
-
-Процедура ПодготовитьМассивы(Данные)
-
- Для Каждого Бенчмарк Из Данные.Бенчмарки Цикл
- Бенчмарк.Статистика.Значения = Новый Структура("Значение", Бенчмарк.Статистика.Значения);
- КонецЦикла;
-
- Данные.Бенчмарки = Новый Структура("Бенчмарк", Данные.Бенчмарки);
-
-КонецПроцедуры
\ No newline at end of file
+КонецФункции
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os"
index 63a9318..f3266a1 100644
--- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os"
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263.os"
@@ -8,10 +8,10 @@
// Запускает бенчмарки
//
// Параметры:
-// Источник - Тип - Класс бенчмарков
-// - КоллекцияДескрипторовБенчмарков
-// - ДескрипторБенчмарка
-// - Произвольный - Экземпляр класса бенчмарков
+// ИсточникБенчмарков - Тип - Класс, содержащий бенчмарки
+// - КоллекцияДескрипторовБенчмарков
+// - ДескрипторБенчмарка
+// - Произвольный - Экземпляр класса с бенчмарками
// Конфигурация - КонфигурацияБенчмарков - Конфигурация бенчмарков
//
// Возвращаемое значение:
@@ -19,13 +19,18 @@
// * ИмяКласса - Строка - Имя класса
// * ДескрипторыБенчмарков - КоллекцияДескрипторовБенчмарков
// * Конфигурация - КонфигурацияБенчмарков
-// * СредаОкружения - СредаОкруженияБенчмарков
// * Отчет - ОтчетБенчмарков
-// * РезультатыЗапусков - ТаблицаЗначений:
+// * СредаОкружения - СредаОкруженияБенчмарков
+// * Расшифровка - ТаблицаЗначений:
// ** ДескрипторБенчмарка - ДескрипторБенчмарка
// ** Параметры - Массив из ПараметрБенчмарка
-// ** Статистика - СтатистикаБенчмарка
// ** Эталон - СтрокаТаблицыЗначений, Неопределено
+// ** ЭтоЭталон - Булево
+// ** Статистика - СтатистикаБенчмарка
+// ** ИсполняющаяСреда - Структура:
+// *** Версия - Строка
+// *** Алиас - Строка
+// *** Наименование - Строка
// ** Замеры - ТаблицаЗначений:
// *** Этап - см. ЭтапыБенчмарка
// *** НомерИтерации - Число
@@ -34,9 +39,9 @@
// *** НаносекундЗаОперацию - Число - Наносекунд за операцию
// *** ВыделяемаяПамять - Число - Байт выделяемой памяти за итерацию
// *** ВыделяемаяПамятьЗаОперацию - Число - Байт выделяемой памяти за операцию
-Функция Запустить(Источник, Конфигурация = Неопределено) Экспорт
+Функция Запустить(ИсточникБенчмарков, Конфигурация = Неопределено) Экспорт
- ЗапускательБенчмарков = Новый ЗапускательБенчмарков(Источник, Конфигурация);
+ ЗапускательБенчмарков = Новый ЗапускательБенчмарков(ИсточникБенчмарков, Конфигурация);
Возврат ЗапускательБенчмарков.Запустить();
КонецФункции
@@ -51,7 +56,8 @@
//
// Возвращаемое значение:
// ТаблицаЗначений:
-// * Результат - см. Бенчмаркинг.Запустить, Неопределено
+// * Результат - см. Бенчмаркинг.Запустить
+// - Неопределено
// * ИмяКласса - Строка - Имя класса
// * ИмяФайла - Строка - Имя файла
// * ПутьКФайлу - Строка - Путь к файлу сценария
@@ -76,7 +82,6 @@
// Тип, Неопределено
Функция ПодключитьКласс(ПутьКФайлу) Экспорт
- Объект = Неопределено;
ИмяКласса = ИмяКлассаИзСтроки(Новый Файл(ПутьКФайлу).ИмяБезРасширения);
Если СценарийПодключенПоИмени(ИмяКласса) Тогда
@@ -103,6 +108,10 @@
КонецФункции
+Функция ЭтоВоркер() Экспорт
+ Возврат ПолучитьПеременнуюСреды("BENCHMARK_WORKER") = "1";
+КонецФункции
+
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index eb12ae0..fc08226 100644
--- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -6,19 +6,13 @@
// Извлекает дескрипторы бенчмарков
//
// Параметры:
-// Источник - Тип, Произвольный - Тип или экземпляр класса бенчмарков
+// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков
// НаборДескрипторов - КоллекцияДескрипторовБенчмарков - Коллекция, в которую будут добавлены извлеченные
// дескрипторы бенчмарков
//
// Возвращаемое значение:
// КоллекцияДескрипторовБенчмарков
-Функция Извлечь(Источник, НаборДескрипторов = Неопределено) Экспорт
-
- Если ТипЗнч(Источник) = Тип("Тип") Тогда
- Объект = Новый(Источник);
- Иначе
- Объект = Источник;
- КонецЕсли;
+Функция Извлечь(ИсточникБенчмарков, НаборДескрипторов = Неопределено) Экспорт
Если НаборДескрипторов = Неопределено Тогда
Набор = Новый КоллекцияДескрипторовБенчмарков();
@@ -26,12 +20,12 @@
Набор = НаборДескрипторов;
КонецЕсли;
- РефлекторОбъекта = Новый РефлекторОбъекта(Объект);
+ РефлекторОбъекта = Новый РефлекторОбъекта(ИсточникБенчмарков);
ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов("Бенчмарк");
Для Каждого СвойстваМетода Из ТаблицаМетодов Цикл
- ДескрипторБенчмарка = Новый ДескрипторБенчмарка(Объект, СвойстваМетода.Имя);
+ ДескрипторБенчмарка = Новый ДескрипторБенчмарка(ИсточникБенчмарков, СвойстваМетода.Имя);
ПрочитатьАннотациюЭталон(СвойстваМетода, ДескрипторБенчмарка);
ПрочитатьАннотациюКатегория(СвойстваМетода, ДескрипторБенчмарка);
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index 10f2fbe..20e6cdb 100644
--- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -5,26 +5,20 @@
// Извлекает конфигурацию бенчмарков
//
// Параметры:
-// Источник - Тип, Произвольный - Тип или экземпляр класса бенчмарков
+// ИсточникБенчмарков - Тип, Произвольный - Тип или экземпляр класса бенчмарков
// Конфигурация - КонфигурацияБенчмарков - Конфигурация, в которую будут записаны данные
//
// Возвращаемое значение:
// КонфигурацияБенчмарков
-Функция Извлечь(Источник, Конфигурация = Неопределено) Экспорт
+Функция Извлечь(ИсточникБенчмарков, Конфигурация = Неопределено) Экспорт
- Если ТипЗнч(Источник) = Тип("Тип") Тогда
- Объект = Новый(Источник);
- Иначе
- Объект = Источник;
- КонецЕсли;
-
Если Конфигурация = Неопределено Тогда
КонфигурацияБенчмарков = Новый КонфигурацияБенчмарков();
Иначе
КонфигурацияБенчмарков = Конфигурация;
КонецЕсли;
- РефлекторОбъекта = Новый РефлекторОбъекта(Объект);
+ РефлекторОбъекта = Новый РефлекторОбъекта(ИсточникБенчмарков);
ТаблицаМетодов = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь);
ТаблицаСвойств = РефлекторОбъекта.ПолучитьТаблицуСвойств();
@@ -45,6 +39,7 @@
ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, Конфигурация);
ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, Конфигурация);
ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, Конфигурация);
+ ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, Конфигурация);
КонецЕсли;
Для Каждого СвойстваПоля Из ТаблицаСвойств Цикл
@@ -285,4 +280,33 @@
КонецПроцедуры
+Процедура ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, Конфигурация)
+
+ Аннотации = РаботаСАннотациями.ПолучитьАннотации(СвойстваКонструктора, "ИсполняющаяСреда");
+
+ Для Каждого Аннотация Из Аннотации Цикл
+
+ // &ИсполняющаяСреда("stable")
+ // &ИсполняющаяСреда("stable, dev")
+ Значения = РаботаСАннотациями.ПолучитьЗначенияПараметровАннотации(Аннотация, "Значение");
+
+ Для Каждого Значение Из Значения Цикл
+ ВерсииСреды = СтрРазделить(Значение, ", ", Ложь);
+ Для Каждого Версия Из ВерсииСреды Цикл
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды(Версия);
+ КонецЦикла;
+ КонецЦикла;
+
+ // &ИсполняющаяСреда(Версия = "stable", Наименование = "Стабильная", ЭтоЭталон = Ложь) // BSLLS:CommentedCode-off
+ Версия = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация, "Версия", , Истина);
+ Если Не Версия = Неопределено Тогда
+ Наименование = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация, "Наименование", "", Истина);
+ ЭтоЭталон = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация, "ЭтоЭталон", Ложь, Истина);
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды(Версия, Наименование, ЭтоЭталон);
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
new file mode 100644
index 0000000..98b0ad2
--- /dev/null
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\321\201\320\277\320\276\320\273\320\275\321\217\321\216\321\211\320\260\321\217\320\241\321\200\320\265\320\264\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -0,0 +1,72 @@
+#Использовать fs
+
+// Поиск исполняемого файла OneScript в системе с учетом версии
+//
+// Параметры:
+// Версия - Строка - Версия OneScript (например: "1.9.3", "dev")
+//
+// Возвращаемое значение:
+// Строка, Неопределено
+Функция НайтиИсполняемыйФайл(Версия) Экспорт
+
+ КаталогУстановки = КаталогУстановки();
+ Если Не ЗначениеЗаполнено(КаталогУстановки) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ КаталогBin = ОбъединитьПути(КаталогУстановки, Версия, "bin");
+
+ Если ЭтоWindows() Тогда
+ ИмяФайла = ОбъединитьПути(КаталогBin, "oscript.exe");
+ Иначе
+ ИмяФайла = ОбъединитьПути(КаталогBin, "oscript");
+ КонецЕсли;
+
+ Если ФС.ФайлСуществует(ИмяФайла) Тогда
+ Возврат ИмяФайла;
+ КонецЕсли;
+
+КонецФункции
+
+// Определяет каталог установленных версий OneScript
+//
+// Возвращаемое значение:
+// Строка, Неопределено
+Функция КаталогУстановки() Экспорт
+
+ КаталогOVM = ПолучитьПеременнуюСреды("OVM_INSTALL_PATH");
+ Если Не ЗначениеЗаполнено(КаталогOVM) Тогда
+ СистемнаяИнформация = Новый СистемнаяИнформация();
+ КаталогOVM = ОбъединитьПути(
+ СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений),
+ "ovm"
+ );
+ КонецЕсли;
+
+ Если ФС.КаталогСуществует(КаталогOVM) Тогда
+ Возврат КаталогOVM;
+ КонецЕсли;
+
+КонецФункции
+
+// Получает системный каталог для хранения библиотек
+//
+// Возвращаемое значение:
+// Строка
+Функция КаталогБиблиотек() Экспорт
+ Возврат ПолучитьЗначениеСистемнойНастройки("lib.system");
+КонецФункции
+
+// Определяет, является ли текущая ОС Windows
+//
+// Возвращаемое значение:
+// Булево
+Функция ЭтоWindows() Экспорт
+
+ СистемнаяИнформация = Новый СистемнаяИнформация();
+ ТекущаяПлатформа = СистемнаяИнформация.ТипПлатформы;
+
+ Возврат ТекущаяПлатформа = ТипПлатформы.Windows_x86_64
+ Или ТекущаяПлатформа = ТипПлатформы.Windows_x86;
+
+КонецФункции
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index 65373a8..996e0d7 100644
--- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\276\320\275\320\272\320\270\320\236\321\202\321\207\320\265\321\202\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -18,6 +18,7 @@
Перем Мин Экспорт; // Строка
Перем Макс Экспорт; // Строка
Перем Процентиль Экспорт; // Строка
+Перем ВерсияИсполняющейСреды Экспорт; // Строка
Функция СоздатьМетод() Экспорт
Возврат КолонкаОтчетаБенчмарковМетод.Создать();
@@ -95,6 +96,10 @@
Возврат КолонкаОтчетаБенчмарковПараметр.ИмяКолонки(ИмяПараметра);
КонецФункции
+Функция СоздатьВерсияИсполняющейСреды() Экспорт
+ Возврат КолонкаОтчетаБенчмарковВерсияИсполняющейСреды.Создать();
+КонецФункции
+
Метод = "Метод";
Среднее = "Среднее";
СтандартноеОтклонение = "СтандартноеОтклонение";
@@ -110,4 +115,5 @@ RatioSD = "RatioSD";
ВыделяемаяПамять = "ВыделяемаяПамять";
Мин = "Мин";
Макс = "Макс";
-Процентиль = "Процентиль";
\ No newline at end of file
+Процентиль = "Процентиль";
+ВерсияИсполняющейСреды = "ВерсияИсполняющейСреды";
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\222\321\213\320\262\320\276\320\264\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\265\321\200\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\222\321\213\320\262\320\276\320\264\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\265\321\200\320\260.os"
new file mode 100644
index 0000000..894b1c3
--- /dev/null
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\222\321\213\320\262\320\276\320\264\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\265\321\200\320\260.os"
@@ -0,0 +1,56 @@
+#Использовать coloratos
+
+#Область ПрограммныйИнтерфейс
+
+// Выводит текст с автоматическим переводом строки и поддержкой цветового форматирования.
+//
+// Параметры:
+// Текст - Строка - Выводимый текст
+// Цвет - Строка - Цвет текста
+Процедура ВывестиСтроку(Текст, Цвет = Неопределено) Экспорт
+
+ Если Бенчмаркинг.ЭтоВоркер() И Не Цвет = Неопределено Тогда
+ ЦветнойВывод.ВывестиСтроку(ТекстСЦветом(Текст, Цвет));
+ Иначе
+ ЦветнойВывод.ВывестиСтроку(ПодготовитьТекст(Текст), Цвет);
+ КонецЕсли;
+
+КонецПроцедуры
+
+// Выводит текст без перевода строки с поддержкой цветового форматирования.
+//
+// Параметры:
+// Текст - Строка - Выводимый текст
+// Цвет - Строка - Цвет текста
+Процедура Вывести(Текст, Цвет = Неопределено) Экспорт
+
+ Если Бенчмаркинг.ЭтоВоркер() И Не Цвет = Неопределено Тогда
+ ЦветнойВывод.Вывести(ТекстСЦветом(Текст, Цвет));
+ Иначе
+ ЦветнойВывод.Вывести(ПодготовитьТекст(Текст), Цвет);
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПодготовитьТекст(Знач Текст)
+ Возврат СтрЗаменить(Текст, "|!#color=", "|#color=");
+КонецФункции
+
+Функция ТекстСЦветом(Текст, Цвет)
+
+ Шаблон = "(%1|!#color=%2)";
+ МассивСтрок = СтрРазделить(Текст, Символы.ПС);
+
+ Для Инд = 0 По МассивСтрок.ВГраница() Цикл
+ МассивСтрок[Инд] = СтрШаблон(Шаблон, МассивСтрок[Инд], Цвет);
+ КонецЦикла;
+
+ Возврат СтрСоединить(МассивСтрок, Символы.ПС);
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index e532daa..024e375 100644
--- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\234\320\260\321\202\320\265\320\274\320\260\321\202\320\270\321\207\320\265\321\201\320\272\320\270\320\265\320\244\321\203\320\275\320\272\321\206\320\270\320\270\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -69,11 +69,13 @@
Функция Квартили(УпорядоченныеЗначения) Экспорт
Квартили = Новый Структура();
+ // BSLLS:MagicNumber-off
Квартили.Вставить("Q0", Квантиль(УпорядоченныеЗначения, 0));
Квартили.Вставить("Q1", Квантиль(УпорядоченныеЗначения, 0.25));
Квартили.Вставить("Q2", Квантиль(УпорядоченныеЗначения, 0.5));
Квартили.Вставить("Q3", Квантиль(УпорядоченныеЗначения, 0.75));
Квартили.Вставить("Q4", Квантиль(УпорядоченныеЗначения, 1));
+ // BSLLS:MagicNumber-on
Возврат Квартили;
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index 9e0e40e..4615001 100644
--- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\321\217\320\237\320\276\320\272\320\260\320\267\320\260\321\202\320\265\320\273\320\265\320\271\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -11,7 +11,7 @@
ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
Представление = ПредставлениеБулево(Значение);
Иначе
- Представление = Строка(Значение);
+ Представление = Строка(СериализацияОбъектовБенчмаркинга.ПодготовитьЗначение(Значение));
КонецЕсли;
Если Не ЕдиницаИзмерения = Неопределено И ДополнитьЕдиницейИзмерения Тогда
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os"
new file mode 100644
index 0000000..0f6d80d
--- /dev/null
+++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\275\320\263\320\260.os"
@@ -0,0 +1,64 @@
+Перем _СериализуемыеТипы; // Неопределено, Соответствие
+
+#Область ПрограммныйИнтерфейс
+
+// Подготавливает значение для безопасной сериализации или вывода.
+//
+// Параметры:
+// Значение - Произвольный - Любое значение для обработки
+//
+// Возвращаемое значение:
+// Произвольный - Обработанное значение по правилам:
+// 1. Для сериализуемых типов (число, строка, булево и др.) - исходное значение
+// 2. Для несериализуемых типов:
+// а) Если строковое представление совпадает с именем типа - "Тип@ХешКод"
+// б) Иначе - обычное строковое представление
+Функция ПодготовитьЗначение(Значение) Экспорт
+
+ Если ЗначениеСериализуется(Значение) Тогда
+ Возврат Значение;
+ КонецЕсли;
+
+ Представление = Строка(Значение);
+ Тип = ТипЗнч(Значение);
+ Если Представление = Строка(Тип) Тогда
+ Представление = СтрШаблон("%1@%2", Тип, Новый РасширениеОбъекта(Значение).ХешКод);
+ КонецЕсли;
+
+ Возврат Представление;
+
+КонецФункции
+
+// Проверяет, относится ли значение к сериализуемым типам данных
+//
+// Параметры:
+// Значение - Произвольный - Проверяемое значение
+//
+// Возвращаемое значение:
+// Булево
+Функция ЗначениеСериализуется(Значение) Экспорт
+ Возврат СериализуемыеТипы()[ТипЗнч(Значение)] = Истина;
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция СериализуемыеТипы()
+
+ Если Не _СериализуемыеТипы = Неопределено Тогда
+ Возврат _СериализуемыеТипы;
+ КонецЕсли;
+
+ _СериализуемыеТипы = Новый Соответствие();
+ _СериализуемыеТипы.Вставить(Тип("Число"), Истина);
+ _СериализуемыеТипы.Вставить(Тип("Строка"), Истина);
+ _СериализуемыеТипы.Вставить(Тип("Булево"), Истина);
+ _СериализуемыеТипы.Вставить(Тип("Дата"), Истина);
+ _СериализуемыеТипы.Вставить(Тип("Неопределено"), Истина);
+
+ Возврат _СериализуемыеТипы;
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
deleted file mode 100644
index ddd7734..0000000
--- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\255\320\272\321\201\320\277\320\276\321\200\321\202\320\240\320\265\320\267\321\203\320\273\321\214\321\202\320\260\321\202\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ /dev/null
@@ -1,77 +0,0 @@
-Функция ПодготовитьРезультаты(РезультатыБенчмарков) Экспорт
-
- ИнформацияОПроцессоре = РезультатыБенчмарков.СредаОкружения.ИнформацияОПроцессоре;
-
- УзелСредаОкружения = Новый Структура();
- УзелСредаОкружения.Вставить("ВерсияBenchmarkOneScript", РезультатыБенчмарков.СредаОкружения.ВерсияБиблиотеки);
- УзелСредаОкружения.Вставить("ВерсияOneScript", РезультатыБенчмарков.СредаОкружения.ВерсияПлатформы);
- УзелСредаОкружения.Вставить("ВерсияОС", РезультатыБенчмарков.СредаОкружения.ВерсияОС);
- УзелСредаОкружения.Вставить("ИмяПроцессора", ИнформацияОПроцессоре.ИмяПроцессора);
- УзелСредаОкружения.Вставить("КоличествоПроцессоров", ИнформацияОПроцессоре.КоличествоПроцессоров);
- УзелСредаОкружения.Вставить("КоличествоЯдер", ИнформацияОПроцессоре.КоличествоЯдер);
- УзелСредаОкружения.Вставить("КоличествоЛогическихПроцессоров", ИнформацияОПроцессоре.КоличествоЛогическихПроцессоров);
-
- УзелБенчмарки = Новый Массив();
-
- Для Каждого РезультатЗапуска Из РезультатыБенчмарков.РезультатыЗапусков Цикл
-
- УзелБенчмарк = Новый Структура();
- УзелБенчмарк.Вставить("Тип", Строка(РезультатЗапуска.ДескрипторБенчмарка.ТипОбъекта()));
- УзелБенчмарк.Вставить("Метод", РезультатЗапуска.ДескрипторБенчмарка.Метод());
- УзелБенчмарк.Вставить("Категория", РезультатЗапуска.ДескрипторБенчмарка.Категория());
- УзелБенчмарк.Вставить("Эталон", РезультатЗапуска.ДескрипторБенчмарка.ЭтоЭталон());
- УзелБенчмарк.Вставить("Параметры", Новый Структура());
- УзелБенчмарк.Вставить("Статистика", Новый Структура());
-
- Статистика = РезультатЗапуска.Статистика;
- УзелБенчмарк.Статистика.Вставить("Значения", Новый Массив());
- УзелБенчмарк.Статистика.Вставить("Количество", 0);
- УзелБенчмарк.Статистика.Вставить("Мин", Статистика.Мин);
- УзелБенчмарк.Статистика.Вставить("Q1", Статистика.НижнийКвартиль);
- УзелБенчмарк.Статистика.Вставить("Медиана", Статистика.Медиана);
- УзелБенчмарк.Статистика.Вставить("Среднее", Статистика.Среднее);
- УзелБенчмарк.Статистика.Вставить("Q3", Статистика.ВерхнийКвартиль);
- УзелБенчмарк.Статистика.Вставить("Макс", Статистика.Макс);
- УзелБенчмарк.Статистика.Вставить("СтандартноеОтклонение", Статистика.СтандартноеОтклонение);
- УзелБенчмарк.Статистика.Вставить("СтандартнаяОшибкаСреднего", Статистика.СтандартнаяОшибкаСреднего);
- УзелБенчмарк.Статистика.Вставить("ОперацийВСекунду", Статистика.ОперацийВСекунду);
- УзелБенчмарк.Статистика.Вставить("Процентили", Новый Структура());
-
- // BSLLS:MagicNumber-off
- УзелБенчмарк.Статистика.Процентили.Вставить("P0", Статистика.Квантиль(0));
- УзелБенчмарк.Статистика.Процентили.Вставить("P25", Статистика.Квантиль(0.25));
- УзелБенчмарк.Статистика.Процентили.Вставить("P50", Статистика.Квантиль(0.5));
- УзелБенчмарк.Статистика.Процентили.Вставить("P67", Статистика.Квантиль(0.67));
- УзелБенчмарк.Статистика.Процентили.Вставить("P80", Статистика.Квантиль(0.8));
- УзелБенчмарк.Статистика.Процентили.Вставить("P85", Статистика.Квантиль(0.85));
- УзелБенчмарк.Статистика.Процентили.Вставить("P90", Статистика.Квантиль(0.90));
- УзелБенчмарк.Статистика.Процентили.Вставить("P95", Статистика.Квантиль(0.95));
- УзелБенчмарк.Статистика.Процентили.Вставить("P100", Статистика.Квантиль(1));
- // BSLLS:MagicNumber-on
-
- УзелБенчмарк.Статистика.Вставить("Память", Новый Структура());
- УзелБенчмарк.Статистика.Память.Вставить("ВыделяемаяЗаОперацию", Статистика.ВыделяемаяПамять);
-
- Для Каждого Замер Из РезультатЗапуска.Замеры Цикл
- Если Замер.Этап = ЭтапыБенчмарка.Измерение Тогда
- УзелБенчмарк.Статистика.Значения.Добавить(Замер.НаносекундЗаОперацию);
- КонецЕсли;
- КонецЦикла;
-
- УзелБенчмарк.Статистика.Количество = УзелБенчмарк.Статистика.Значения.Количество();
-
- Для Каждого Параметр Из РезультатЗапуска.Параметры Цикл
- УзелБенчмарк.Параметры.Вставить(Параметр.Имя, Параметр.Значение);
- КонецЦикла;
-
- УзелБенчмарки.Добавить(УзелБенчмарк);
-
- КонецЦикла;
-
- Данные = Новый Структура();
- Данные.Вставить("СредаОкружения", УзелСредаОкружения);
- Данные.Вставить("Бенчмарки", УзелБенчмарки);
-
- Возврат Данные;
-
-КонецФункции
\ No newline at end of file
diff --git a/tasks/oscript.cfg b/tasks/oscript.cfg
index 2303418..745ac9b 100644
--- a/tasks/oscript.cfg
+++ b/tasks/oscript.cfg
@@ -1 +1,2 @@
-lib.system=../oscript_modules
\ No newline at end of file
+lib.system = ../oscript_modules
+systemlanguage = ru
\ No newline at end of file
diff --git a/tests/fixtures/verified-report.html b/tests/fixtures/verified-report.html
index 0e0d211..5a9de89 100644
--- a/tests/fixtures/verified-report.html
+++ b/tests/fixtures/verified-report.html
@@ -11,7 +11,7 @@
-BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0.0-mock, Microsoft Windows NT 10.0.x.mock
+BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock
MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores
@@ -20,6 +20,9 @@
Method
|
+Значение
+ |
+
Mean
|
@@ -36,7 +39,30 @@
|
|
-Бенчмарк
+БенчмаркПервый
+ |
+
+100
+ |
+
+1.0 ms
+ |
+
+0.0 ns
+ |
+
+0.0 ns
+ |
+
+1,000
+ |
+
+
+|
+БенчмаркВторой
+ |
+
+100
|
1.0 ms
diff --git a/tests/fixtures/verified-report.json b/tests/fixtures/verified-report.json
index df86fc1..8805735 100644
--- a/tests/fixtures/verified-report.json
+++ b/tests/fixtures/verified-report.json
@@ -1,8 +1,8 @@
{
"СредаОкружения": {
"ВерсияBenchmarkOneScript": "0.1.x-mock",
- "ВерсияOneScript": "2.0.0.0-mock",
"ВерсияОС": "Microsoft Windows NT 10.0.x.mock",
+ "ВерсияИсполняющейСреды": "2.0.0-mock",
"ИмяПроцессора": "MockIntel Core i7-6700HQ CPU 2.60GHz",
"КоличествоПроцессоров": 1,
"КоличествоЯдер": 4,
@@ -10,16 +10,32 @@
},
"Бенчмарки": [
{
- "Тип": "ПустойБенчмарк",
- "Метод": "Бенчмарк",
+ "Тип": "ДваБенчмаркаИПоле",
+ "Метод": "БенчмаркПервый",
"Категория": "",
- "Эталон": false,
- "Параметры": {},
+ "ЭтоЭталон": false,
+ "ИсполняющаяСреда": {
+ "Версия": "",
+ "Алиас": "",
+ "Наименование": ""
+ },
+ "Параметры": {
+ "Значение": 100
+ },
"Статистика": {
"Значения": [
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
1000000
],
- "Количество": 1,
+ "Количество": 10,
"Мин": 1000000,
"Q1": 1000000,
"Медиана": 1000000,
@@ -43,7 +59,243 @@
"Память": {
"ВыделяемаяЗаОперацию": 0
}
- }
+ },
+ "Замеры": [
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 1,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 2,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 3,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 4,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 5,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 6,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 7,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 8,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 9,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 10,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ }
+ ]
+ },
+ {
+ "Тип": "ДваБенчмаркаИПоле",
+ "Метод": "БенчмаркВторой",
+ "Категория": "",
+ "ЭтоЭталон": false,
+ "ИсполняющаяСреда": {
+ "Версия": "",
+ "Алиас": "",
+ "Наименование": ""
+ },
+ "Параметры": {
+ "Значение": 100
+ },
+ "Статистика": {
+ "Значения": [
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000,
+ 1000000
+ ],
+ "Количество": 10,
+ "Мин": 1000000,
+ "Q1": 1000000,
+ "Медиана": 1000000,
+ "Среднее": 1000000,
+ "Q3": 1000000,
+ "Макс": 1000000,
+ "СтандартноеОтклонение": 0,
+ "СтандартнаяОшибкаСреднего": 0,
+ "ОперацийВСекунду": 1000,
+ "Процентили": {
+ "P0": 1000000,
+ "P25": 1000000,
+ "P50": 1000000,
+ "P67": 1000000,
+ "P80": 1000000,
+ "P85": 1000000,
+ "P90": 1000000,
+ "P95": 1000000,
+ "P100": 1000000
+ },
+ "Память": {
+ "ВыделяемаяЗаОперацию": 0
+ }
+ },
+ "Замеры": [
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 1,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 2,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 3,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 4,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 5,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 6,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 7,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 8,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 9,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ },
+ {
+ "Этап": "Измерение",
+ "НомерИтерации": 10,
+ "КоличествоОпераций": 1,
+ "Наносекунд": 1000000,
+ "НаносекундЗаОперацию": 1000000,
+ "ВыделяемаяПамять": 0,
+ "ВыделяемаяПамятьЗаОперацию": 0
+ }
+ ]
}
]
}
\ No newline at end of file
diff --git a/tests/fixtures/verified-report.md b/tests/fixtures/verified-report.md
index 6bb66e2..046dc30 100644
--- a/tests/fixtures/verified-report.md
+++ b/tests/fixtures/verified-report.md
@@ -1,6 +1,7 @@
-BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0.0-mock, Microsoft Windows NT 10.0.x.mock
+BenchmarkOneScript v0.1.x-mock, OneScript v2.0.0-mock, Microsoft Windows NT 10.0.x.mock
MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 physical cores
-| Method | Mean | StdErr | StdDev | Op/s |
-|----------|-------:|-------:|-------:|------:|
-| Бенчмарк | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 |
+| Method | Значение | Mean | StdErr | StdDev | Op/s |
+|----------------|---------:|-------:|-------:|-------:|------:|
+| БенчмаркПервый | 100 | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 |
+| БенчмаркВторой | 100 | 1.0 ms | 0.0 ns | 0.0 ns | 1,000 |
diff --git a/tests/fixtures/verified-report.xml b/tests/fixtures/verified-report.xml
index 0d67b3c..88dd0af 100644
--- a/tests/fixtures/verified-report.xml
+++ b/tests/fixtures/verified-report.xml
@@ -2,8 +2,8 @@
<Отчет>
<СредаОкружения>
<ВерсияBenchmarkOneScript>0.1.x-mockВерсияBenchmarkOneScript>
- <ВерсияOneScript>2.0.0.0-mockВерсияOneScript>
<ВерсияОС>Microsoft Windows NT 10.0.x.mockВерсияОС>
+ <ВерсияИсполняющейСреды>2.0.0-mockВерсияИсполняющейСреды>
<ИмяПроцессора>MockIntel Core i7-6700HQ CPU 2.60GHzИмяПроцессора>
<КоличествоПроцессоров>1КоличествоПроцессоров>
<КоличествоЯдер>4КоличествоЯдер>
@@ -11,16 +11,176 @@
СредаОкружения>
<Бенчмарки>
<Бенчмарк>
- <Тип>ПустойБенчмаркТип>
- <Метод>БенчмаркМетод>
+ <Тип>ДваБенчмаркаИПолеТип>
+ <Метод>БенчмаркПервыйМетод>
<Категория/>
- <Эталон>falseЭталон>
- <Параметры/>
+ <ЭтоЭталон>falseЭтоЭталон>
+ <ИсполняющаяСреда>
+ <Версия/>
+ <Алиас/>
+ <Наименование/>
+ ИсполняющаяСреда>
+ <Параметры>
+ <Значение>100Значение>
+ Параметры>
<Статистика>
<Значения>
<Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ Значения>
+ <Количество>10Количество>
+ <Мин>1000000Мин>
+ 1000000
+ <Медиана>1000000Медиана>
+ <Среднее>1000000Среднее>
+ 1000000
+ <Макс>1000000Макс>
+ <СтандартноеОтклонение/>
+ <СтандартнаяОшибкаСреднего/>
+ <ОперацийВСекунду>1000ОперацийВСекунду>
+ <Процентили>
+ 1000000
+ 1000000
+ 1000000
+ 1000000
+ 1000000
+ 1000000
+ 1000000
+ 1000000
+ 1000000
+ Процентили>
+ <Память>
+ <ВыделяемаяЗаОперацию/>
+ Память>
+ Статистика>
+ <Замеры>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>1НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>2НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>3НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>4НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>5НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>6НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>7НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>8НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>9НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>10НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ Замеры>
+ Бенчмарк>
+ <Бенчмарк>
+ <Тип>ДваБенчмаркаИПолеТип>
+ <Метод>БенчмаркВторойМетод>
+ <Категория/>
+ <ЭтоЭталон>falseЭтоЭталон>
+ <ИсполняющаяСреда>
+ <Версия/>
+ <Алиас/>
+ <Наименование/>
+ ИсполняющаяСреда>
+ <Параметры>
+ <Значение>100Значение>
+ Параметры>
+ <Статистика>
+ <Значения>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
+ <Значение>1000000Значение>
Значения>
- <Количество>1Количество>
+ <Количество>10Количество>
<Мин>1000000Мин>
1000000
<Медиана>1000000Медиана>
@@ -45,6 +205,98 @@
<ВыделяемаяЗаОперацию/>
Память>
Статистика>
+ <Замеры>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>1НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>2НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>3НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>4НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>5НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>6НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>7НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>8НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>9НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ <Замер>
+ <Этап>ИзмерениеЭтап>
+ <НомерИтерации>10НомерИтерации>
+ <КоличествоОпераций>1КоличествоОпераций>
+ <Наносекунд>1000000Наносекунд>
+ <НаносекундЗаОперацию>1000000НаносекундЗаОперацию>
+ <ВыделяемаяПамять/>
+ <ВыделяемаяПамятьЗаОперацию/>
+ Замер>
+ Замеры>
Бенчмарк>
Бенчмарки>
Отчет>
\ No newline at end of file
diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os"
similarity index 78%
rename from "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os"
rename to "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os"
index 98f2f7c..21adc48 100644
--- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os"
+++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\274\320\270\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os"
@@ -1,3 +1,6 @@
+&Параметры(100, 200)
+Перем ОбщееЗначение Экспорт;
+
&СтратегияХолодныйЗапуск
&СортировкаОтБыстрыхКМедленным
&МониторингПамяти
@@ -11,6 +14,11 @@
&ЭкспортJson
&ЭкспортXml
&ЭкспортHtml
+&ИсполняющаяСреда("stable")
+&ИсполняющаяСреда("1.9.3, 1.9.4")
+&ИсполняющаяСреда(Версия = "2.0.0", Наименование = "Новая", ЭтоЭталон = Истина)
+&КолонкаМин
+&КолонкаМакс
Процедура ПриСозданииОбъекта()
КонецПроцедуры
diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os"
index b44c952..09d6904 100644
--- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os"
+++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\236\320\261\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\260\320\274\320\270\320\241\320\276\320\261\321\213\321\202\320\270\320\271.os"
@@ -19,7 +19,7 @@
ДескрипторыБенчмарков = Контекст.ДескрипторыБенчмарков;
Конфигурация = Контекст.Конфигурация;
- РезультатыЗапусков = Контекст.РезультатыЗапусков;
+ Расшифровка = Контекст.Расшифровка;
Отчет = Контекст.Отчет;
СредаОкружения = Контекст.СредаОкружения;
diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\234\320\265\321\202\320\276\320\264\320\260\320\230\320\237\320\276\320\273\321\217.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\234\320\265\321\202\320\276\320\264\320\260\320\230\320\237\320\276\320\273\321\217.os"
index 18c7734..e8fcd94 100644
--- "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\234\320\265\321\202\320\276\320\264\320\260\320\230\320\237\320\276\320\273\321\217.os"
+++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270\320\234\320\265\321\202\320\276\320\264\320\260\320\230\320\237\320\276\320\273\321\217.os"
@@ -1,8 +1,8 @@
&Параметры(1, 2)
-Перем Значение Экспорт;
+Перем ПолеОбщее Экспорт;
&Бенчмарк
-&Параметры(3)
-&Параметры(4)
-Процедура Бенчмарк(Парам) Экспорт
+&Параметры(3, 4)
+&Параметры(5, 6)
+Процедура Бенчмарк(Парам1, Парам2) Экспорт
КонецПроцедуры
\ No newline at end of file
diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274\320\230\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274\320\230\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270.os"
similarity index 100%
rename from "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274\320\230\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270.os"
rename to "tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\270\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274\320\230\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\260\320\274\320\270.os"
diff --git "a/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os" "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os"
new file mode 100644
index 0000000..2d39e9a
--- /dev/null
+++ "b/tests/fixtures/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\262\320\260\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260\320\230\320\237\320\276\320\273\320\265.os"
@@ -0,0 +1,10 @@
+&Параметры(100)
+Перем Значение Экспорт;
+
+&Бенчмарк
+Процедура БенчмаркПервый() Экспорт
+КонецПроцедуры
+
+&Бенчмарк
+Процедура БенчмаркВторой() Экспорт
+КонецПроцедуры
\ No newline at end of file
diff --git "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index 6dabeb7..edca2e2 100644
--- "a/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/tests/helpers/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -1,5 +1,9 @@
#Использовать "../../.."
#Использовать "../../fixtures"
+#Использовать fs
+#Использовать 1commands
+
+Перем _Лог; // Лог
Функция КонфигурацияПоУмолчанию() Экспорт
@@ -52,7 +56,7 @@
Контекст.СредаОкружения.ВерсияБиблиотеки = "0.1.x-mock";
Контекст.СредаОкружения.ВерсияОС = "Microsoft Windows NT 10.0.x.mock";
- Контекст.СредаОкружения.ВерсияПлатформы = "2.0.0.0-mock";
+ Контекст.СредаОкружения.ВерсияИсполняющейСреды = "2.0.0-mock";
Контекст.СредаОкружения.ИнформацияОПроцессоре.ИмяПроцессора = "MockIntel Core i7-6700HQ CPU 2.60GHz";
Контекст.СредаОкружения.ИнформацияОПроцессоре.КоличествоПроцессоров = 1;
Контекст.СредаОкружения.ИнформацияОПроцессоре.КоличествоЯдер = 4;
@@ -62,9 +66,58 @@
ПостроительОтчета = Новый ПостроительОтчетаБенчмарков(
Контекст.ДескрипторыБенчмарков,
Контекст.Конфигурация,
- Контекст.РезультатыЗапусков
+ Контекст.Расшифровка
);
Контекст.Отчет = ПостроительОтчета.Сформировать();
-КонецПроцедуры
\ No newline at end of file
+КонецПроцедуры
+
+Процедура ПодготовитьСреду(ВерсииИсполняющейСреды) Экспорт
+
+ ПроверитьУстановитьВерсииИсполняющейСреды(ВерсииИсполняющейСреды);
+
+КонецПроцедуры
+
+Процедура ПроверитьУстановитьВерсииИсполняющейСреды(Версии)
+
+ КаталогУстановки = ИсполняющаяСредаБенчмарков.КаталогУстановки();
+ Если КаталогУстановки = Неопределено Тогда
+ ВызватьИсключение "Не найден каталог с установленными версиями OneScript.
+ |Убедитесь, что OVM (OneScript Version Manager) установлен и переменная OVM_INSTALL_PATH настроена корректно.";
+ КонецЕсли;
+
+ _Лог.Отладка(СтрШаблон("Каталог с установленными версиями OneScript: %1", КаталогУстановки));
+ _Лог.Отладка(СтрШаблон("Проверка установленных версий: %1", Версии));
+
+ Для Каждого Версия Из СтрРазделить(Версии, ", ") Цикл
+
+ ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия);
+ Если Не ИмяФайла = Неопределено Тогда
+ _Лог.Отладка(СтрШаблон("Обнаружена исполняющая среда OneScript версии %1: %2", Версия, ИмяФайла));
+ Продолжить;
+ КонецЕсли;
+
+ Команда = Новый Команда();
+ Команда.УстановитьКоманду("ovm");
+ Команда.ДобавитьПараметр("install");
+ Команда.ДобавитьПараметр(Версия);
+
+ КодВозврата = Команда.Исполнить();
+ Если КодВозврата <> 0 Тогда
+ ТекстОшибки = СтрШаблон("Не удалось установить OneScript версии %1 через OVM (OneScript Version Manager)", Версия);
+ ВызватьИсключение ТекстОшибки;
+ КонецЕсли;
+
+ ИмяФайла = ИсполняющаяСредаБенчмарков.НайтиИсполняемыйФайл(Версия);
+ Если ИмяФайла = Неопределено Тогда
+ ВызватьИсключение СтрШаблон("После установки OneScript версии %1 не удалось найти исполняемый файл", Версия);
+ КонецЕсли;
+
+ _Лог.Отладка(СтрШаблон("Установлена исполняющая среда OneScript версии %1: %2", Версия, ИмяФайла));
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+_Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark.ТестированиеБенчмарков");
\ No newline at end of file
diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
index e210a6f..44b796c 100644
--- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
+++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os"
@@ -5,8 +5,21 @@
#Использовать fluent
#Использовать delegate
#Использовать fs
+#Использовать tempfiles
#Использовать "helpers"
+Перем МенеджерВременныхФайлов; // МенеджерВременныхФайлов
+
+&Инициализация
+Процедура ПередВсеми() Экспорт
+ МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов();
+КонецПроцедуры
+
+&Завершение
+Процедура ПослеВсех() Экспорт
+ МенеджерВременныхФайлов.Удалить();
+КонецПроцедуры
+
&После
Процедура ПослеЗапускаТеста() Экспорт
@@ -90,7 +103,7 @@
КонецПроцедуры
&Тест
-Процедура Тест_ЗапретЗапускаСРазнымиТипамиОбъектов() Экспорт
+Процедура Тест_ДолженПроверитьЗапретЗапускаСРазнымиТипамиОбъектов() Экспорт
Коллекция1 = Новый КоллекцияДескрипторовБенчмарков(Тип("БенчмаркСПараметрамиМетода"));
Коллекция2 = Новый КоллекцияДескрипторовБенчмарков(Тип("БенчмаркиПоКатегориям"));
@@ -105,7 +118,23 @@
Ожидаем
.Что(Бенчмаркинг)
.Метод("Запустить", ПараметрыМетода)
- .ВыбрасываетИсключение("Не поддерживается запуск с разными типами объектов бенчмарков");
+ .ВыбрасываетИсключение("Запрещается запускать бенчмарки с разными типами");
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженЗапуститьБенчмаркЧерезДескриптор() Экспорт
+
+ Тип = Тип("ПустойБенчмарк");
+
+ ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
+ Дескриптор = ДескрипторыБенчмарков.ПолучитьПервый();
+
+ Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию();
+ Результат = Бенчмаркинг.Запустить(Дескриптор, Конфигурация);
+
+ Ожидаем.Что(Результат.Отчет.Таблица).Заполнено();
+ Ожидаем.Что(Результат.Расшифровка).Заполнено();
КонецПроцедуры
@@ -126,7 +155,7 @@
КонецПроцедуры
&Тест
-Процедура Тест_ПараметрыМетодаИПоляИзАннотаций() Экспорт
+Процедура Тест_ДолженПроверитьПараметрыМетодаИПоляИзАннотаций() Экспорт
Тип = Тип("БенчмаркСПараметрамиМетодаИПоля");
@@ -136,14 +165,18 @@
Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(4);
- Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Значение")]).Равно(1);
- Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(3);
- Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Значение")]).Равно(1);
- Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(4);
- Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Значение")]).Равно(2);
- Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(3);
- Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Значение")]).Равно(2);
- Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Парам")]).Равно(4);
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("ПолеОбщее")]).Равно(1);
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(3);
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(4);
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("ПолеОбщее")]).Равно(1);
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(5);
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(6);
+ Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("ПолеОбщее")]).Равно(2);
+ Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(3);
+ Ожидаем.Что(Результат.Отчет.Таблица[2][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(4);
+ Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("ПолеОбщее")]).Равно(2);
+ Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Парам1")]).Равно(5);
+ Ожидаем.Что(Результат.Отчет.Таблица[3][КолонкиОтчетаБенчмарков.Параметр("Парам2")]).Равно(6);
КонецПроцедуры
@@ -214,174 +247,6 @@
КонецПроцедуры
-&Тест
-Процедура Тест_ОпределениеЭталонаПоАннотации() Экспорт
-
- Тип = Тип("БенчмаркиСЭталоном");
-
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
-
- Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
-
- Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2);
- Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоЛожь();
- Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Заполнено();
- Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
- Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1);
-
-КонецПроцедуры
-
-&Тест
-Процедура Тест_УстановкаЭталона() Экспорт
-
- Тип = Тип("ПустойБенчмарк");
-
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
-
- ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
- ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ИспользоватьКакЭталон();
-
- Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация);
-
- Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(1);
- Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
- Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1);
-
-КонецПроцедуры
-
-&Тест
-Процедура Тест_УстановкаЭталонаВКаждойКатегории() Экспорт
-
- Тип = Тип("БенчмаркиПоКатегориям");
-
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
-
- ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
- ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркА1").ИспользоватьКакЭталон();
- ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркБ1").ИспользоватьКакЭталон();
-
- ПараметрыМетода = Новый Массив();
- ПараметрыМетода.Добавить(Тип);
- ПараметрыМетода.Добавить(Конфигурация);
- ПараметрыМетода.Добавить(ДескрипторыБенчмарков);
-
- Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация);
-
- Таблица = Результат.Отчет.Таблица;
- СтрокаА1 = Таблица.Найти("БенчмаркА1", КолонкиОтчетаБенчмарков.Метод);
- СтрокаБ1 = Таблица.Найти("БенчмаркБ1", КолонкиОтчетаБенчмарков.Метод);
-
- Ожидаем.Что(СтрокаА1[КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
- Ожидаем.Что(СтрокаБ1[КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
-
-КонецПроцедуры
-
-&Тест
-Процедура Тест_ЗапретБолееОдногоЭталона() Экспорт
-
- Тип = Тип("БенчмаркиСЭталоном");
-
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
-
- ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
- ДескрипторыБенчмарков.Получить(0).ИспользоватьКакЭталон();
- ДескрипторыБенчмарков.Получить(1).ИспользоватьКакЭталон();
-
- ПараметрыМетода = Новый Массив();
- ПараметрыМетода.Добавить(ДескрипторыБенчмарков);
- ПараметрыМетода.Добавить(Конфигурация);
-
- Ожидаем
- .Что(Бенчмаркинг)
- .Метод("Запустить", ПараметрыМетода)
- .ВыбрасываетИсключение("Может быть только один эталонный бенчмарк в пределах категории");
-
-КонецПроцедуры
-
-&Тест
-Процедура Тест_ЗапретБолееОдногоЭталонаПоКатегории() Экспорт
-
- Тип = Тип("БенчмаркиПоКатегориям");
-
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
-
- ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
- ДескрипторыБенчмарков.Получить(0).ИспользоватьКакЭталон(); // А1
- ДескрипторыБенчмарков.Получить(1).ИспользоватьКакЭталон(); // А2
-
- ПараметрыМетода = Новый Массив();
- ПараметрыМетода.Добавить(ДескрипторыБенчмарков);
- ПараметрыМетода.Добавить(Конфигурация);
-
- Ожидаем
- .Что(Бенчмаркинг)
- .Метод("Запустить", ПараметрыМетода)
- .ВыбрасываетИсключение("Может быть только один эталонный бенчмарк в пределах категории");
-
-КонецПроцедуры
-
-&Тест
-Процедура Тест_ОтсутствиеЭталонаКогдаИменаПараметровНеСовпадают() Экспорт
-
- Тип = Тип("БенчмаркСЭталономИПараметрами");
-
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
-
- Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
-
- СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.РезультатыЗапусков)
- .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркВ""")
- .ПолучитьПервый();
-
- Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон не должен был быть найден").Не_().Заполнено();
-
-КонецПроцедуры
-
-&Тест
-Процедура Тест_ОтсутствиеЭталонаКогдаЗначенияПараметровНеСовпадают() Экспорт
-
- Тип = Тип("БенчмаркСЭталономИПараметрами");
-
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
-
- Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
-
- СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.РезультатыЗапусков)
- .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 2")
- .ПолучитьПервый();
-
- Ожидаем.Что(СтрокаБезЭталона, "Не найдена строка бенчмарка ""БенчмаркБ"" со значением параметра 2").Заполнено();
- Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон не должен был быть найден").Не_().Заполнено();
-
-КонецПроцедуры
-
-&Тест
-Процедура Тест_НаличиеЭталонаКогдаЗначенияПараметровСовпадают() Экспорт
-
- Тип = Тип("БенчмаркСЭталономИПараметрами");
-
- Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
-
- Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
-
- // БенчмаркБ
- СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.РезультатыЗапусков)
- .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 1")
- .ПолучитьПервый();
-
- Ожидаем.Что(СтрокаБезЭталона, "Не найдена строка бенчмарка ""БенчмаркБ"" со значением параметра 1").Заполнено();
- Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон должен был быть найден").Заполнено();
-
-КонецПроцедуры
-
&Тест
Процедура Тест_СортировкаПоМетоду() Экспорт
@@ -533,7 +398,7 @@
&Тест
Процедура Тест_ЭкспортВMarkdown() Экспорт
- Тип = Тип("ПустойБенчмарк");
+ Тип = Тип("ДваБенчмаркаИПоле");
ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени");
ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения");
@@ -547,7 +412,7 @@
Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех);
Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Markdown);
- ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ПустойБенчмарк-report.md");
+ ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.md");
Бенчмаркинг.Запустить(Тип, Конфигурация);
@@ -562,7 +427,7 @@
&Тест
Процедура Тест_ЭкспортВJson() Экспорт
- Тип = Тип("ПустойБенчмарк");
+ Тип = Тип("ДваБенчмаркаИПоле");
ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени");
ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения");
@@ -572,11 +437,14 @@
Конфигурация = Новый КонфигурацияБенчмарков(Тип);
ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
- Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого);
- Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех);
- Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json);
+
+ Конфигурация
+ .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого)
+ .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех)
+ .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json)
+ .УстановитьКоличествоИтераций(10);
- ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ПустойБенчмарк-report.json");
+ ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.json");
Бенчмаркинг.Запустить(Тип, Конфигурация);
@@ -591,7 +459,7 @@
&Тест
Процедура Тест_ЭкспортВXml() Экспорт
- Тип = Тип("ПустойБенчмарк");
+ Тип = Тип("ДваБенчмаркаИПоле");
ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени");
ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения");
@@ -601,11 +469,14 @@
Конфигурация = Новый КонфигурацияБенчмарков(Тип);
ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
- Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого);
- Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех);
- Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Xml);
+
+ Конфигурация
+ .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеКаждого, ОбработчикПослеКаждого)
+ .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех)
+ .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Xml)
+ .УстановитьКоличествоИтераций(10);
- ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ПустойБенчмарк-report.xml");
+ ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.xml");
Бенчмаркинг.Запустить(Тип, Конфигурация);
@@ -620,7 +491,7 @@
&Тест
Процедура Тест_ЭкспортВHtml() Экспорт
- Тип = Тип("ПустойБенчмарк");
+ Тип = Тип("ДваБенчмаркаИПоле");
ОбработчикПослеКаждого = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеКаждого_УстановкаВремени");
ОбработчикПослеВсех = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения");
@@ -634,7 +505,7 @@
Конфигурация.ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикПослеВсех);
Конфигурация.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html);
- ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ПустойБенчмарк-report.html");
+ ПутьКФайлу = ОбъединитьПути(Конфигурация.КаталогАртефактов(), "ДваБенчмаркаИПоле-report.html");
Бенчмаркинг.Запустить(Тип, Конфигурация);
@@ -658,4 +529,176 @@
Ожидаем.Что(Результат, "Результат").Заполнено();
Ожидаем.Что(Результат[0].Результат.Конфигурация.КоличествоИтераций()).Равно(2);
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьЗапускВРазныхВерсияхИсполняющейСреды() Экспорт
+
+ ТестированиеБенчмарков.ПодготовитьСреду("dev,stable");
+
+ Тип = Тип("ПустойБенчмарк");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev", "dev");
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable");
+
+ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
+
+ Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2);
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды]).Содержит("dev");
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды]).Содержит("stable");
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьЗапретЗапускаПриНаличииНесериализуемыхПараметров() Экспорт
+
+ Тип = Тип("БенчмаркСПараметрамиПоля");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Конфигурация
+ .ОчиститьПараметры()
+ .ДобавитьПараметр("Значение", Новый Структура("Тест", 1))
+ .ДобавитьВерсиюИсполняющейСреды("dev")
+ .ДобавитьВерсиюИсполняющейСреды("stable", , Истина);
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(Тип);
+ ПараметрыМетода.Добавить(Конфигурация);
+
+ Ожидаем
+ .Что(Бенчмаркинг)
+ .Метод("Запустить", ПараметрыМетода)
+ .ВыбрасываетИсключение(
+ "Значение параметра <Значение> должно быть сериализуемым для определения эталонов между разными версиями OneScript"
+ );
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьЗапретЗапускаПриНаличииДелегатовИДругихВерсиейИсполняющейСреды() Экспорт
+
+ Тип = Тип("ПустойБенчмарк");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Конфигурация
+ .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПередВсеми, Новый Делегат(ЭтотОбъект, "Тест"))
+ .ДобавитьВерсиюИсполняющейСреды("dev");
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(Тип);
+ ПараметрыМетода.Добавить(Конфигурация);
+
+ Ожидаем
+ .Что(Бенчмаркинг)
+ .Метод("Запустить", ПараметрыМетода)
+ .ВыбрасываетИсключение(
+ "Использование делегатов как обработчиков событий не поддерживается при запуске в разных версиях OneScript"
+ );
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженОбработатьОшибкуУстановкиПоляОбъектаКласса() Экспорт
+
+ Тип = Тип("БенчмаркСПараметрамиПоля");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+ Конфигурация.ДобавитьПараметр("ОшибочноеИмя", 100);
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(Тип);
+ ПараметрыМетода.Добавить(Конфигурация);
+
+ Ожидаем
+ .Что(Бенчмаркинг)
+ .Метод("Запустить", ПараметрыМетода)
+ .ВыбрасываетИсключение("Не удалось задать значение поля <ОшибочноеИмя> для объекта <БенчмаркСПараметрамиПоля>");
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьСериализациюРезультатовJson() Экспорт
+
+ Тип = Тип("БенчмаркСПараметрамиМетодаИПоля");
+
+ // Настройка дескриптора бенчмарка
+ ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
+ ДескрипторБенчмарка = ДескрипторыБенчмарков
+ .ПолучитьПервый()
+ .УстановитьКатегорию("Категория 1");
+
+ // Настройка конфигурации
+ ОбработчикУстановкаМок = Новый Делегат(ТестированиеБенчмарков, "ОбработчикПослеВсех_УстановкаМокСредыОкружения");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Конфигурация
+ .ДобавитьОбработчикСобытия(СобытияБенчмарков.ПослеВсех, ОбработчикУстановкаМок)
+ .ОчиститьПараметры()
+ .ДобавитьПараметр("ПолеОбщее", Новый ТаблицаЗначений())
+ .ДобавитьПараметр("ПолеОбщее", Новый БенчмаркСПараметрамиМетодаИПоля)
+ .ДобавитьПараметр("ПолеОбщее", '19700101')
+ .ДобавитьПараметр("ПолеОбщее", Неопределено);
+
+ // Запуск и сериализация/десериализация
+ Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация);
+
+ ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла();
+ Сериализатор = Новый СериализаторРезультатовБенчмарков();
+ Сериализатор.СериализоватьВJSON(Результат, ИмяФайла);
+ РезультатПрочитанный = Сериализатор.ДесериализоватьИзJSON(ИмяФайла, Конфигурация);
+
+ // Проверка
+ Расшифровка = РезультатПрочитанный.Расшифровка;
+ ДескрипторБенчмарка = Расшифровка[0].ДескрипторБенчмарка;
+ НаборыПараметров = ДескрипторБенчмарка.НаборыПараметров();
+
+ Ожидаем.Что(Расшифровка, "Количество строк в расшифровке").ИмеетДлину(8);
+ Ожидаем.Что(ДескрипторБенчмарка.ТипОбъекта(), "Тип").Равно(Тип);
+ Ожидаем.Что(ДескрипторБенчмарка.Метод(), "Метод").Равно("Бенчмарк");
+ Ожидаем.Что(ДескрипторБенчмарка.Категория(), "Категория").Равно("Категория 1");
+ Ожидаем.Что(НаборыПараметров, "Наборы параметров").ИмеетДлину(2);
+ Ожидаем.Что(НаборыПараметров[0], "Набор параметров 1").ИмеетДлину(2);
+ Ожидаем.Что(НаборыПараметров[0][0].Значение, "Набор параметров 1").Равно(3);
+ Ожидаем.Что(НаборыПараметров[0][1].Значение, "Набор параметров 1").Равно(4);
+ Ожидаем.Что(НаборыПараметров[1], "Набор параметров 2").ИмеетДлину(2);
+ Ожидаем.Что(НаборыПараметров[1][0].Значение, "Набор параметров 2").Равно(5);
+ Ожидаем.Что(НаборыПараметров[1][1].Значение, "Набор параметров 2").Равно(6);
+ Ожидаем.Что(Расшифровка[0].Параметры, "Количество строк в параметрах").ИмеетДлину(3);
+ Ожидаем.Что(Расшифровка[0].Параметры[0].Значение, "Параметр 1.1").Содержит("ТаблицаЗначений@");
+ Ожидаем.Что(Расшифровка[0].Параметры[1].Значение, "Параметр 1.2").Равно(3);
+ Ожидаем.Что(Расшифровка[0].Параметры[2].Значение, "Параметр 1.3").Равно(4);
+ Ожидаем.Что(Расшифровка[1].Параметры[0].Значение, "Параметр 2.1").Содержит("БенчмаркСПараметрамиМетодаИПоля@");
+ Ожидаем.Что(Расшифровка[2].Параметры[0].Значение, "Параметр 3.1").Равно('19700101');
+ Ожидаем.Что(Расшифровка[3].Параметры[0].Значение, "Параметр 4.1").Равно(Неопределено);
+ Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Это не эталон").ЭтоЛожь();
+ Ожидаем.Что(Расшифровка[0].ИсполняющаяСреда.Версия, "Версия").Не_().Заполнено();
+ Ожидаем.Что(Расшифровка[0].Замеры, "Количество строк в замерах").ИмеетДлину(1);
+ Ожидаем.Что(Расшифровка[0].Замеры[0].Этап, "Этап").Равно(ЭтапыБенчмарка.Измерение);
+ Ожидаем.Что(Расшифровка[0].Замеры[0].НомерИтерации, "Номер итерации").Равно(1);
+ Ожидаем.Что(Расшифровка[0].Замеры[0].Наносекунд, "Наносекунд").Больше(100);
+ Ожидаем.Что(Расшифровка[0].Статистика.Среднее, "Среднее").Больше(100);
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьКонтрольНаличияБенчмарков() Экспорт
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(Новый КоллекцияДескрипторовБенчмарков());
+ ПараметрыМетода.Добавить(ТестированиеБенчмарков.КонфигурацияПоУмолчанию());
+
+ Ожидаем
+ .Что(Бенчмаркинг)
+ .Метод("Запустить", ПараметрыМетода)
+ .ВыбрасываетИсключение("Не найдены бенчмарки для запуска");
+
КонецПроцедуры
\ No newline at end of file
diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os"
index d7916ca..4a15459 100644
--- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os"
+++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\227\320\260\320\274\320\265\321\200\320\276\320\262.os"
@@ -17,7 +17,7 @@
Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков);
- ВыделеноБайт = Результат.РезультатыЗапусков[0].Статистика.ВыделяемаяПамять;
+ ВыделеноБайт = Результат.Расшифровка[0].Статистика.ВыделяемаяПамять;
Коэффициент = РазмерВБайтах / ВыделеноБайт;
Ожидаем.Что(Коэффициент).Между(0.99, 1);
@@ -36,7 +36,7 @@
Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
- ВыделеноБайт = Результат.РезультатыЗапусков[0].Статистика.ВыделяемаяПамять;
+ ВыделеноБайт = Результат.Расшифровка[0].Статистика.ВыделяемаяПамять;
Ожидаем.Что(ВыделеноБайт).Между(1, 2000);
@@ -46,11 +46,11 @@
Процедура Тест_Производительность() Экспорт
Результат = Бенчмаркинг.Запустить(Тип("БенчмаркиСЗадержкой"));
- РезультатыЗапусков = Результат.РезультатыЗапусков;
+ Расшифровка = Результат.Расшифровка;
Отчет = Результат.Отчет;
- Статистика1 = РезультатыЗапусков[0].Статистика.ВМиллисекунды();
- Статистика2 = РезультатыЗапусков[1].Статистика.ВМиллисекунды();
+ Статистика1 = Расшифровка[0].Статистика.ВМиллисекунды();
+ Статистика2 = Расшифровка[1].Статистика.ВМиллисекунды();
// Среднее
Ожидаем.Что(Статистика1.Среднее).Больше(10);
diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os"
index 6f82f14..23845e7 100644
--- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os"
+++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.os"
@@ -3,36 +3,28 @@
#Использовать asserts
#Использовать fluent
+#Использовать tempfiles
#Использовать "helpers"
+Перем МенеджерВременныхФайлов; // МенеджерВременныхФайлов
+
+&Инициализация
+Процедура ПередВсеми() Экспорт
+ МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов();
+КонецПроцедуры
+
+&Завершение
+Процедура ПослеВсех() Экспорт
+ МенеджерВременныхФайлов.Удалить();
+КонецПроцедуры
+
&Тест
Процедура Тест_АннотацииКонфигурации() Экспорт
- ОбъектБенчмарков = Новый БенчмаркСАннотацямиКонфигурации;
- Конфигурация = Новый КонфигурацияБенчмарков(ОбъектБенчмарков);
-
- Экспортеры = Конфигурация.Экспортеры();
- КоллекцияЭкспортеры = ПроцессорыКоллекций.ИзКоллекции(Экспортеры);
+ Тип = Тип("БенчмаркСАннотациямиКонфигурации");
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
- ФункцияПоискаЭкспортера = "Экспортер -> ТипЗнч(Экспортер) = Тип(""ЭкспортерРезультатовБенчмарковВ%1"")";
-
- Ожидаем.Что(Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск);
- Ожидаем.Что(Конфигурация.СортировкаОтчета()).Равно(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным);
- Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина();
- Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(100);
- Ожидаем.Что(Конфигурация.КоличествоВызововЗаИтерацию()).Равно(200);
- Ожидаем.Что(Конфигурация.КоличествоПрогревочныхИтераций()).Равно(300);
- Ожидаем.Что(Конфигурация.МинимальноеВремяИтерации()).Равно(400);
- Ожидаем.Что(Конфигурация.МинимальноеКоличествоВызововЗаИтерацию()).Равно(500);
- Ожидаем.Что(Конфигурация.ДелегатыОбработчиковСобытия(СобытияБенчмарков.ПередВсеми, ОбъектБенчмарков)).Заполнено();
- Ожидаем.Что(Конфигурация.ДелегатыОбработчиковСобытия(СобытияБенчмарков.ПослеВсех, ОбъектБенчмарков)).Заполнено();
- Ожидаем.Что(Конфигурация.ДелегатыОбработчиковСобытия(СобытияБенчмарков.ПередКаждым, ОбъектБенчмарков)).Заполнено();
- Ожидаем.Что(Конфигурация.ДелегатыОбработчиковСобытия(СобытияБенчмарков.ПослеКаждого, ОбъектБенчмарков)).Заполнено();
- Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts");
- Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина();
- Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина();
- Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Xml"))).ЭтоИстина();
- Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина();
+ ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(Конфигурация);
КонецПроцедуры
@@ -82,7 +74,7 @@
Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация);
- Ожидаем.Что(Результат.РезультатыЗапусков[0].Замеры.Количество()).Равно(КоличествоИтераций);
+ Ожидаем.Что(Результат.Расшифровка[0].Замеры.Количество()).Равно(КоличествоИтераций);
КонецПроцедуры
@@ -97,7 +89,7 @@
Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация);
- Ожидаем.Что(Результат.РезультатыЗапусков[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию);
+ Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию);
КонецПроцедуры
@@ -168,7 +160,7 @@
Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация);
Ожидаем.Что(Результат.Отчет.Таблица).Заполнено();
- Ожидаем.Что(Результат.РезультатыЗапусков[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию);
+ Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(КоличествоВызововЗаИтерацию);
КонецПроцедуры
@@ -184,7 +176,7 @@
Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация);
Ожидаем.Что(Результат.Отчет.Таблица).Заполнено();
- Ожидаем.Что(Результат.РезультатыЗапусков[0].Замеры[0].КоличествоОпераций).Равно(1);
+ Ожидаем.Что(Результат.Расшифровка[0].Замеры[0].КоличествоОпераций).Равно(1);
КонецПроцедуры
@@ -313,7 +305,7 @@
Результат = Бенчмаркинг.Запустить(Тип("ПустойБенчмарк"), Конфигурация);
- Ожидаем.Что(Результат.РезультатыЗапусков[0].Статистика.ВыделяемаяПамять).Заполнено();
+ Ожидаем.Что(Результат.Расшифровка[0].Статистика.ВыделяемаяПамять).Заполнено();
Ожидаем.Что(Результат.Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина();
КонецПроцедуры
@@ -625,12 +617,11 @@
.ДобавитьКолонку(КолонкиОтчетаБенчмарков.НижнийКвартиль)
.ДобавитьКолонку(КолонкиОтчетаБенчмарков.ВерхнийКвартиль)
.ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Json)
- .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html);
-
- НоваяКонфигурация = Новый КонфигурацияБенчмарков()
- .Объединить(ПередаваемаяКонфигурация);
+ .ДобавитьЭкспортер(ЭкспортерыРезультатовБенчмарков.Html)
+ .ДобавитьВерсиюИсполняющейСреды("dev")
+ .ДобавитьВерсиюИсполняющейСреды("1.9.3");
- ОбработчикиСобытий = НоваяКонфигурация.ОбработчикиСобытий();
+ НоваяКонфигурация = Новый КонфигурацияБенчмарков().Объединить(ПередаваемаяКонфигурация);
Ожидаем.Что(НоваяКонфигурация.Стратегия(), "Стратегия").Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск);
Ожидаем.Что(НоваяКонфигурация.КоличествоИтераций(), "Количество итераций").Равно(111);
@@ -641,13 +632,15 @@
Ожидаем.Что(НоваяКонфигурация.СортировкаОтчета(), "Сортировка отчета").Равно(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным);
Ожидаем.Что(НоваяКонфигурация.Параметры()[0].Имя, "Параметры").Равно("col1");
Ожидаем.Что(НоваяКонфигурация.Параметры()[1].Имя, "Параметры").Равно("col2");
- Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПередВсеми], "Обработчики событий").Содержит("Обработчик1");
- Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПослеКаждого], "Обработчики событий").Содержит("Обработчик2");
- Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПослеКаждого], "Обработчики событий").Содержит("Обработчик3");
+ Ожидаем.Что(НоваяКонфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередВсеми), "Обработчики событий").Содержит("Обработчик1");
+ Ожидаем.Что(НоваяКонфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого), "Обработчики событий").Содержит("Обработчик2");
+ Ожидаем.Что(НоваяКонфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого), "Обработчики событий").Содержит("Обработчик3");
Ожидаем.Что(НоваяКонфигурация.Колонки(), "Колонки").Содержит(КолонкиОтчетаБенчмарков.НижнийКвартиль);
Ожидаем.Что(НоваяКонфигурация.Колонки(), "Колонки").Содержит(КолонкиОтчетаБенчмарков.ВерхнийКвартиль);
Ожидаем.Что(НоваяКонфигурация.Экспортеры(), "Экспортеры").Содержит(ЭкспортерыРезультатовБенчмарков.Json);
Ожидаем.Что(НоваяКонфигурация.Экспортеры(), "Экспортеры").Содержит(ЭкспортерыРезультатовБенчмарков.Html);
+ Ожидаем.Что(НоваяКонфигурация.ВерсииИсполняющейСреды()[0].Версия, "Исполняющая среда (dev)").Равно("dev");
+ Ожидаем.Что(НоваяКонфигурация.ВерсииИсполняющейСреды()[1].Версия, "Исполняющая среда (1.9.3)").Равно("1.9.3");
КонецПроцедуры
@@ -668,6 +661,8 @@
КонфигурацияПриемник.Объединить(КонфигурацияИсточник);
ОбработчикиСобытий = КонфигурацияПриемник.ОбработчикиСобытий();
+ ОбработчикСобытияПередВсеми = ОбработчикиСобытий.Найти(СобытияБенчмарков.ПередВсеми, "Событие");
+ ОбработчикСобытияПослеВсех = ОбработчикиСобытий.Найти(СобытияБенчмарков.ПослеВсех, "Событие");
Ожидаем.Что(КонфигурацияПриемник.КоличествоИтераций(), "Количество итераций").Равно(222);
Ожидаем.Что(КонфигурацияПриемник.КоличествоВызововЗаИтерацию(), "Количество вызовов за итерацию").Равно(111);
@@ -675,8 +670,8 @@
Ожидаем.Что(КонфигурацияПриемник.Колонки(), "Колонки").ИмеетДлину(1);
Ожидаем.Что(КонфигурацияПриемник.Колонки(), "Колонки").Содержит(КолонкиОтчетаБенчмарков.ВерхнийКвартиль);
Ожидаем.Что(КонфигурацияПриемник.Экспортеры(), "Экспортеры").Содержит(ЭкспортерыРезультатовБенчмарков.Html);
- Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПередВсеми], "Обработчики событий").ЭтоНеопределено();
- Ожидаем.Что(ОбработчикиСобытий[СобытияБенчмарков.ПослеВсех], "Обработчики событий").Содержит("Обработчик2");
+ Ожидаем.Что(ОбработчикСобытияПередВсеми, "Обработчики событий").ЭтоНеопределено();
+ Ожидаем.Что(ОбработчикСобытияПослеВсех.Обработчик, "Обработчики событий").Равно("Обработчик2");
КонецПроцедуры
@@ -700,4 +695,83 @@
Ожидаем.Что(КонфигурацияПриемник.КоличествоВызововЗаИтерацию(), "Количество вызовов за итерацию").Равно(111);
Ожидаем.Что(КонфигурацияПриемник.Стратегия(), "Стратегия").Равно(СтратегииЗапускаБенчмарка.ПропускнаяСпособность);
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДобавлениеВерсииИсполняющейСреды() Экспорт
+
+ Конфигурация = Новый КонфигурацияБенчмарков();
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev");
+
+ Ожидаем.Что(Конфигурация.ВерсииИсполняющейСреды()).Заполнено();
+ Ожидаем.Что(Конфигурация.ВерсииИсполняющейСреды()[0].Версия).Равно("dev");
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_УдалениеВсехВерсийИсполняющейСреды() Экспорт
+
+ Конфигурация = Новый КонфигурацияБенчмарков();
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev");
+ Конфигурация.ОчиститьВерсииИсполняющейСреды();
+
+ Ожидаем.Что(Конфигурация.ВерсииИсполняющейСреды()).ИмеетДлину(0);
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьСериализациюКонфигурацииJson() Экспорт
+
+ Тип = Тип("БенчмаркСАннотациямиКонфигурации");
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+
+ ИмяФайла = МенеджерВременныхФайлов.НовоеИмяФайла();
+
+ Сериализатор = Новый СериализаторКонфигурацииБенчмарков();
+ Сериализатор.СериализоватьВJSON(Конфигурация, ИмяФайла);
+ КонфигурацияПрочитанная = Сериализатор.ДесериализоватьИзJSON(ИмяФайла);
+
+ ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(КонфигурацияПрочитанная);
+
+КонецПроцедуры
+
+Процедура ПроверитьКонфигурациюБенчмаркСАннотациямиКонфигурации(Конфигурация)
+
+ Экспортеры = Конфигурация.Экспортеры();
+ КоллекцияЭкспортеры = ПроцессорыКоллекций.ИзКоллекции(Экспортеры);
+ ВерсииИсполняющейСреды = Конфигурация.ВерсииИсполняющейСреды();
+ Колонки = Конфигурация.Колонки();
+ Параметры = Конфигурация.Параметры();
+
+ ФункцияПоискаЭкспортера = "Экспортер -> ТипЗнч(Экспортер) = Тип(""ЭкспортерРезультатовБенчмарковВ%1"")";
+
+ Ожидаем.Что(Конфигурация.Стратегия()).Равно(СтратегииЗапускаБенчмарка.ХолодныйЗапуск);
+ Ожидаем.Что(Конфигурация.СортировкаОтчета()).Равно(СортировкиОтчетаБенчмарков.ОтБыстрыхКМедленным);
+ Ожидаем.Что(Конфигурация.ТребуетсяМониторингПамяти()).ЭтоИстина();
+ Ожидаем.Что(Конфигурация.КоличествоИтераций()).Равно(100);
+ Ожидаем.Что(Конфигурация.КоличествоВызововЗаИтерацию()).Равно(200);
+ Ожидаем.Что(Конфигурация.КоличествоПрогревочныхИтераций()).Равно(300);
+ Ожидаем.Что(Конфигурация.МинимальноеВремяИтерации()).Равно(400);
+ Ожидаем.Что(Конфигурация.МинимальноеКоличествоВызововЗаИтерацию()).Равно(500);
+ Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередВсеми), "Обработчики").Содержит("ПередВсеми");
+ Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеВсех), "Обработчики").Содержит("ПослеВсех");
+ Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПередКаждым), "Обработчики").Содержит("ПередКаждым");
+ Ожидаем.Что(Конфигурация.ОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого), "Обработчики").Содержит("ПослеКаждого");
+ Ожидаем.Что(Конфигурация.КаталогАртефактов()).Равно("path/to/artifacts");
+ Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Markdown"))).ЭтоИстина();
+ Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Json"))).ЭтоИстина();
+ Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Xml"))).ЭтоИстина();
+ Ожидаем.Что(КоллекцияЭкспортеры.ЛюбойСоответствует(СтрШаблон(ФункцияПоискаЭкспортера, "Html"))).ЭтоИстина();
+ Ожидаем.Что(ВерсииИсполняющейСреды, "Должно быть 4 версии исполняющей среды").ИмеетДлину(4);
+ Ожидаем.Что(ВерсииИсполняющейСреды[0].Версия, "Версия исполняющей среды stable").Равно("stable");
+ Ожидаем.Что(ВерсииИсполняющейСреды[1].Версия, "Версия исполняющей среды 1.9.3").Равно("1.9.3");
+ Ожидаем.Что(ВерсииИсполняющейСреды[2].Версия, "Версия исполняющей среды 1.9.4").Равно("1.9.4");
+ Ожидаем.Что(ВерсииИсполняющейСреды[3].Версия, "Версия исполняющей среды 2.0.0").Равно("2.0.0");
+ Ожидаем.Что(ВерсииИсполняющейСреды[3].Наименование, "Наименование исполняющей среды 2.0.0").Равно("Новая");
+ Ожидаем.Что(ВерсииИсполняющейСреды[3].ЭтоЭталон, "Исполняющая среда версии 2.0.0 - эталонная").ЭтоИстина();
+ Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Мин);
+ Ожидаем.Что(Колонки, "Колонки").Содержит(КолонкиОтчетаБенчмарков.Макс);
+ Ожидаем.Что(Параметры[0].Значение, "Параметры").Равно(100);
+ Ожидаем.Что(Параметры[1].Значение, "Параметры").Равно(200);
+
КонецПроцедуры
\ No newline at end of file
diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os"
new file mode 100644
index 0000000..31bc8ae
--- /dev/null
+++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\262.os"
@@ -0,0 +1,274 @@
+// BSLLS:DuplicateStringLiteral-off
+// BSLLS:MagicNumber-off
+
+#Использовать asserts
+#Использовать fluent
+#Использовать "helpers"
+
+&Тест
+Процедура Тест_ДолженНайтиЭталонныйБенчмаркОпределенныйВАннотации() Экспорт
+
+ Тип = Тип("БенчмаркиСЭталоном");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
+
+ Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2);
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоЛожь();
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Заполнено();
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1);
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженНайтиЭталонныйБенчмаркОпределенныйВКонфигурации() Экспорт
+
+ Тип = Тип("ПустойБенчмарк");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
+ ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ИспользоватьКакЭталон();
+
+ Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация);
+
+ Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(1);
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1);
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженНайтиЭталонныйБенчмаркВКаждойКатегории() Экспорт
+
+ Тип = Тип("БенчмаркиПоКатегориям");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
+ ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркА1").ИспользоватьКакЭталон();
+ ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркБ1").ИспользоватьКакЭталон();
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(Тип);
+ ПараметрыМетода.Добавить(Конфигурация);
+ ПараметрыМетода.Добавить(ДескрипторыБенчмарков);
+
+ Результат = Бенчмаркинг.Запустить(ДескрипторыБенчмарков, Конфигурация);
+
+ Таблица = Результат.Отчет.Таблица;
+ СтрокаА1 = Таблица.Найти("БенчмаркА1", КолонкиОтчетаБенчмарков.Метод);
+ СтрокаБ1 = Таблица.Найти("БенчмаркБ1", КолонкиОтчетаБенчмарков.Метод);
+
+ Ожидаем.Что(СтрокаА1[КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
+ Ожидаем.Что(СтрокаБ1[КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженНайтиЭталонСредиЭталоннойВерсииИсполняющейСреды() Экспорт
+
+ ТестированиеБенчмарков.ПодготовитьСреду("dev,stable");
+
+ Тип = Тип("ПустойБенчмарк");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev", "dev");
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable", Истина);
+
+ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
+
+ Ожидаем.Что(Результат.Отчет.Таблица).ИмеетДлину(2);
+
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды]).Содержит("dev");
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.Эталон]).ЭтоЛожь();
+ Ожидаем.Что(Результат.Отчет.Таблица[0][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Больше(0);
+
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.ВерсияИсполняющейСреды]).Содержит("stable");
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.Эталон]).ЭтоИстина();
+ Ожидаем.Что(Результат.Отчет.Таблица[1][КолонкиОтчетаБенчмарков.КоэффициентПроизводительности]).Равно(1);
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроигнорироватьЭталонныйБенчмаркПриНаличииЭталоннойВерсииИсполняющейСреды() Экспорт
+
+ Тип = Тип("БенчмаркиСЭталоном");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev");
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable", Истина);
+
+ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
+ Расшифровка = Результат.Расшифровка;
+
+ Ожидаем.Что(Расшифровка).ИмеетДлину(4);
+ Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь();
+ Ожидаем.Что(Расшифровка[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("Бенчмарк");
+ Ожидаем.Что(Расшифровка[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон Бенчмарк (stable)").Равно("stable");
+ Ожидаем.Что(Расшифровка[1].ЭтоЭталон, "БенчмаркЭталон (dev) не должен быть эталоном").ЭтоЛожь();
+ Ожидаем.Что(Расшифровка[1].Эталон.ДескрипторБенчмарка.Метод(), "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон");
+ Ожидаем.Что(Расшифровка[1].Эталон.ИсполняющаяСреда.Алиас, "У БенчмаркЭталон (dev) должен быть эталон БенчмаркЭталон (stable)").Равно("stable");
+ Ожидаем.Что(Расшифровка[2].ЭтоЭталон, "Бенчмарк (stable) должен быть эталоном").ЭтоИстина();
+ Ожидаем.Что(Расшифровка[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина();
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженНайтиЭталонныйБенчмаркВКорректнойВерсииИсполняющейСреды() Экспорт
+
+ Тип = Тип("БенчмаркиСЭталоном");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev");
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable");
+
+ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
+ Расшифровка = Результат.Расшифровка;
+
+ Ожидаем.Что(Расшифровка).ИмеетДлину(4);
+ Ожидаем.Что(Расшифровка[0].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь();
+ Ожидаем.Что(Расшифровка[0].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("БенчмаркЭталон");
+ Ожидаем.Что(Расшифровка[0].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (dev) должен быть эталон БенчмаркЭталон (dev)").Равно("dev");
+ Ожидаем.Что(Расшифровка[1].ЭтоЭталон, "БенчмаркЭталон (dev) должен быть эталоном").ЭтоИстина();
+ Ожидаем.Что(Расшифровка[2].ЭтоЭталон, "Бенчмарк (dev) не должен быть эталоном").ЭтоЛожь();
+ Ожидаем.Что(Расшифровка[2].Эталон.ДескрипторБенчмарка.Метод(), "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("БенчмаркЭталон");
+ Ожидаем.Что(Расшифровка[2].Эталон.ИсполняющаяСреда.Алиас, "У Бенчмарк (stable) должен быть эталон БенчмаркЭталон (stable)").Равно("stable");
+ Ожидаем.Что(Расшифровка[3].ЭтоЭталон, "БенчмаркЭталон (stable) должен быть эталоном").ЭтоИстина();
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьЗапретНаБолееОдногоЭталонногоБенчмарка() Экспорт
+
+ Тип = Тип("БенчмаркиСЭталоном");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
+ ДескрипторыБенчмарков.Получить(0).ИспользоватьКакЭталон();
+ ДескрипторыБенчмарков.Получить(1).ИспользоватьКакЭталон();
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(ДескрипторыБенчмарков);
+ ПараметрыМетода.Добавить(Конфигурация);
+
+ Ожидаем
+ .Что(Бенчмаркинг)
+ .Метод("Запустить", ПараметрыМетода)
+ .ВыбрасываетИсключение("Может быть только один эталонный бенчмарк");
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьЗапретНаБолееОдногоЭталонногоБенчмаркаВКатегории() Экспорт
+
+ Тип = Тип("БенчмаркиПоКатегориям");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
+ ДескрипторыБенчмарков.Получить(0).ИспользоватьКакЭталон(); // А1
+ ДескрипторыБенчмарков.Получить(1).ИспользоватьКакЭталон(); // А2
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(ДескрипторыБенчмарков);
+ ПараметрыМетода.Добавить(Конфигурация);
+
+ Ожидаем
+ .Что(Бенчмаркинг)
+ .Метод("Запустить", ПараметрыМетода)
+ .ВыбрасываетИсключение("В пределах одной категории может быть только один эталонный бенчмарк");
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженПроверитьЗапретНаБолееОдногоЭталоннойВерсииИсполняющейСреды() Экспорт
+
+ Тип = Тип("ПустойБенчмарк");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("dev", "dev", Истина);
+ Конфигурация.ДобавитьВерсиюИсполняющейСреды("stable", "stable", Истина);
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(Тип);
+ ПараметрыМетода.Добавить(Конфигурация);
+
+ Ожидаем
+ .Что(Бенчмаркинг)
+ .Метод("Запустить", ПараметрыМетода)
+ .ВыбрасываетИсключение("Допускается только одна эталонная версия исполняющей среды");
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженУбедитьсяВОтсутствииЭталонаКогдаИменаПараметровНеСовпадают() Экспорт
+
+ Тип = Тип("БенчмаркиСЭталономИПараметрами");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
+
+ СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка)
+ .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркВ""")
+ .ПолучитьПервый();
+
+ Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон не должен был быть найден").Не_().Заполнено();
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженУбедитьсяВОтсутствииЭталонаКогдаЗначенияПараметровНеСовпадают() Экспорт
+
+ Тип = Тип("БенчмаркиСЭталономИПараметрами");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
+
+ СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка)
+ .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 2")
+ .ПолучитьПервый();
+
+ Ожидаем.Что(СтрокаБезЭталона, "Не найдена строка бенчмарка ""БенчмаркБ"" со значением параметра 2").Заполнено();
+ Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон не должен был быть найден").Не_().Заполнено();
+
+КонецПроцедуры
+
+&Тест
+Процедура Тест_ДолженНайтиЭталонКогдаИменаИЗначенияПараметровСовпадают() Экспорт
+
+ Тип = Тип("БенчмаркиСЭталономИПараметрами");
+
+ Конфигурация = Новый КонфигурацияБенчмарков(Тип);
+ ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);
+
+ Результат = Бенчмаркинг.Запустить(Тип, Конфигурация);
+
+ // БенчмаркБ
+ СтрокаБезЭталона = ПроцессорыКоллекций.ИзКоллекции(Результат.Расшифровка)
+ .Фильтровать("Элемент -> Элемент.ДескрипторБенчмарка.Метод() = ""БенчмаркБ"" И Элемент.Параметры[1].Имя = ""Перем1"" И Элемент.Параметры[1].Значение = 1")
+ .ПолучитьПервый();
+
+ Ожидаем.Что(СтрокаБезЭталона, "Не найдена строка бенчмарка ""БенчмаркБ"" со значением параметра 1").Заполнено();
+ Ожидаем.Что(СтрокаБезЭталона.Эталон, "Эталон должен был быть найден").Заполнено();
+ Ожидаем.Что(СтрокаБезЭталона.Эталон.ДескрипторБенчмарка.Метод()).Равно("БенчмаркА");
+
+КонецПроцедуры
\ No newline at end of file
|