From 4b5e04833637d5081e7147f9d97a0d2b0a98f493 Mon Sep 17 00:00:00 2001 From: Ran Tao <1252026067@qq.com> Date: Thu, 23 Feb 2023 15:46:41 +0800 Subject: [PATCH] [Perf] Add strategy for performance test (#279) * [Perf] Add strategy for performance test * Update test_task_spec_design * Rename IPerformanceListener.java -> PerformanceTestListener * Resolve comments * Update agent/doc/UML/performance_design.puml Co-authored-by: Nathan Bu <370788475@qq.com> * Apply suggestions for performance test design UML Co-authored-by: Nathan Bu <370788475@qq.com> * Refine performance_test_design.puml * Apply suggestions for PerformanceTestManagementService Co-authored-by: Nathan Bu <370788475@qq.com> * Apply suggestions from code review Co-authored-by: Nathan Bu <370788475@qq.com> * Update perf design uml Resolve comments Fix schedule bug * Add UT for PerformanceTestManagementService and AndroidBatteryInfoResultParser * Add PerformanceTestManagementServiceTest --------- Co-authored-by: Nathan Bu <370788475@qq.com> --- agent/doc/UML/performance_test_design.puml | 110 +++++++ agent/doc/UML/test_runner_design.puml | 29 +- .../agent/config/TestRunnerConfig.java | 46 ++- .../hydralab/agent/runner/TestRunner.java | 19 +- .../runner/appium/AppiumCrossRunner.java | 6 +- .../agent/runner/appium/AppiumListener.java | 11 +- .../agent/runner/appium/AppiumRunner.java | 10 +- .../agent/runner/appium/Junit5Listener.java | 14 +- .../agent/runner/espresso/EspressoRunner.java | 7 +- .../agent/runner/monkey/AdbMonkeyRunner.java | 15 +- .../runner/monkey/AppiumMonkeyRunner.java | 6 +- .../agent/runner/smart/SmartRunner.java | 6 +- .../hydralab/agent/runner/t2c/T2CRunner.java | 6 +- .../common/entity/center/TestTaskSpec.java | 2 + .../common/entity/common/TestTask.java | 6 + .../hydralab/common/util/ThreadPoolUtil.java | 1 + .../performance/PerformanceTestListener.java | 37 +++ .../PerformanceTestManagementService.java | 187 +++++++++-- .../AndroidBatteryInfoResultParserTest.java | 65 ++++ .../PerformanceTestManagementServiceTest.java | 21 ++ .../sample_battery_info_android_10.txt | 278 ++++++++++++++++ .../sample_battery_info_android_13.txt | 308 ++++++++++++++++++ .../UML/espresso_performance_test_design.png | Bin 0 -> 12329 bytes .../UML/gradle_plugin_yaml_config_design.png | Bin 118002 -> 117990 bytes docs/images/UML/perf_test_class_design.png | Bin 0 -> 41203 bytes ...erformance_test_inspection_entrypoints.png | Bin 0 -> 23505 bytes ...ses_json_with_performance_test_actions.png | Bin 0 -> 39671 bytes docs/images/UML/test_task_spec_design.png | Bin 76949 -> 117935 bytes .../hydralab/agent/runner/ITestRun.java | 4 + .../IPerformanceInspectionService.java | 2 +- .../performance/InspectionStrategy.java | 24 +- .../performance/PerformanceInspection.java | 3 +- .../PerformanceInspectionResult.java | 10 + .../PerformanceInspectionService.java | 7 +- .../performance/PerformanceInspector.java | 20 +- .../performance/PerformanceTestResult.java | 14 +- .../PerformanceInspectionServiceTest.java | 5 +- 37 files changed, 1191 insertions(+), 88 deletions(-) create mode 100644 agent/doc/UML/performance_test_design.puml create mode 100644 common/src/main/java/com/microsoft/hydralab/performance/PerformanceTestListener.java create mode 100644 common/src/test/java/com/microsoft/hydralab/common/performance/AndroidBatteryInfoResultParserTest.java create mode 100644 common/src/test/java/com/microsoft/hydralab/common/performance/PerformanceTestManagementServiceTest.java create mode 100644 common/src/test/resources/sample_battery_info_android_10.txt create mode 100644 common/src/test/resources/sample_battery_info_android_13.txt create mode 100644 docs/images/UML/espresso_performance_test_design.png create mode 100644 docs/images/UML/perf_test_class_design.png create mode 100644 docs/images/UML/performance_test_inspection_entrypoints.png create mode 100644 docs/images/UML/taps_to_cases_json_with_performance_test_actions.png rename sdk/src/test/java/com/microsoft/hydralab/{performanc => performance}/PerformanceInspectionServiceTest.java (66%) diff --git a/agent/doc/UML/performance_test_design.puml b/agent/doc/UML/performance_test_design.puml new file mode 100644 index 000000000..6b2107db5 --- /dev/null +++ b/agent/doc/UML/performance_test_design.puml @@ -0,0 +1,110 @@ + +@startmindmap performance_test_inspection_entrypoints +* Performance Test +** Define the strategy in TestTask +*** LifeCycle +****: +TEST_STARTED +TEST_FINISHED +TEST_FAILED +TEST_RUN_STARTED +TEST_RUN_FINISHED +; +*** Schedule +** Call inspect() method in a test case +*** Hydra SDK +*** T2C +*** Espresso +@endmindmap +@startjson taps_to_cases_json_with_performance_test_actions +{ + "drivers": [ + { + "id": "13211FDD400183", + "platform": "android", +' Deprecated Name : init + "setUp": { + "launcherApp": "" + } +' Can also add tearDown here to match the device action design + } + ], +' deprecated name: cases + "actions": [ + { + "index": 0, + "driverId": "13211FDD400183", + "action": { + "actionType": "inspection", + "arguments": { + "inspectorType": "INSPECTOR_ANDROID_MEMORY_INFO", + "targetApp": "com.microsoft.appmanager", + "description": "Start LTW", + "isReset": false + } + }, + "isOptional": false + }, + { + "index": 1, + "driverId": "13211FDD400183", + "action": { + "actionType": "inspection", + "arguments": { + "inspectorType": "INSPECTOR_ANDROID_BATTERY_INFO", + "targetApp ": "com.microsoft.appmanager", + "description ": "Start LTW", + "isReset": true + } + }, + "isOptional": false + } + ] +} +@endjson + +@startuml perf_test_class_design +class InspectionStrategy { + + + StrategyType strategyType; + + // if the strategyType == TEST_LIFECYCLE + + List when; + + // if the strategyType == TEST_SCHEDULE + + long interval; + + TimeUnit intervalUnit; +} + +interface PerformanceTestListener { + void testStarted(); + void testFinished(); + void testFailure(); + void testRunStarted(); + void testRunFinished(); +} + +class PerformanceTestManagementService { + Map>> inspectPerformanceTimerMap + Map> testLifeCycleStrategyMap +} + +PerformanceTestManagementService -> InspectionStrategy +PerformanceTestManagementService -u-|> PerformanceTestListener + +PerformanceTestManagementService -d-o TestRunner +AppiumListener -d-> PerformanceTestListener +Junit5Listener -d-> PerformanceTestListener +EspressoTestInfoProcessorListener -d-> PerformanceTestListener +@enduml + +@startuml espresso_performance_test_design +class EspressoPerformanceParser { + void processNewLines() +} +EspressoPerformanceParser --|> InstrumentationResultParser +TestRunner <|-- EspressoRunner +EspressoRunner -> EspressoPerformanceParser +EspressoPerformanceParser -> PerformanceInspectionService +@enduml + diff --git a/agent/doc/UML/test_runner_design.puml b/agent/doc/UML/test_runner_design.puml index 617c964fd..ff5414dac 100644 --- a/agent/doc/UML/test_runner_design.puml +++ b/agent/doc/UML/test_runner_design.puml @@ -110,7 +110,34 @@ deactivate TaskCompletion "isReset": false }, "frameworkType": "JUnit4", - "testRunnerName": "androidx.test.runner.AndroidJUnitRunner" + "testRunnerName": "androidx.test.runner.AndroidJUnitRunner", + "inspectionStrategies": [ + { + "strategyType": "TEST_SCHEDULE", + "interval": 300, + "intervalUnit": "MILLISECONDS", + "inspection": { + "inspectorType": "INSPECTOR_ANDROID_BATTERY_INFO", + "appId": "com.microsoft.appmanager", + "description": "test schedule" + } + }, + { + "strategyType": "TEST_LIFECYCLE", + "when": [ + "TEST_STARTED", + "TEST_SUCCESS", + "TEST_FAILURE", + "TEST_RUN_STARTED", + "TEST_RUN_FINISHED" + ], + "inspection": { + "inspectorType": "INSPECTOR_ANDROID_BATTERY_INFO", + "appId": "com.microsoft.appmanager", + "description": "test schedule" + } + } + ] } @endjson diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/config/TestRunnerConfig.java b/agent/src/main/java/com/microsoft/hydralab/agent/config/TestRunnerConfig.java index a515fc524..228a0398d 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/config/TestRunnerConfig.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/config/TestRunnerConfig.java @@ -15,6 +15,7 @@ import com.microsoft.hydralab.common.entity.common.TestTask; import com.microsoft.hydralab.common.management.DeviceManager; import com.microsoft.hydralab.common.util.ADBOperateUtil; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -39,38 +40,55 @@ public class TestRunnerConfig { ); @Bean - public EspressoRunner espressoRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, ADBOperateUtil adbOperateUtil) { - return new EspressoRunner(deviceManager, testTaskEngineService, adbOperateUtil); + public PerformanceTestManagementService performanceTestManagementService() { + PerformanceTestManagementService performanceTestManagementService = new PerformanceTestManagementService(); + performanceTestManagementService.initialize(); + return performanceTestManagementService; } @Bean - public AdbMonkeyRunner adbMonkeyRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, ADBOperateUtil adbOperateUtil) { - return new AdbMonkeyRunner(deviceManager, testTaskEngineService, adbOperateUtil); + public EspressoRunner espressoRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, + PerformanceTestManagementService performanceTestManagementService, + ADBOperateUtil adbOperateUtil) { + return new EspressoRunner(deviceManager, testTaskEngineService, performanceTestManagementService, adbOperateUtil); } @Bean - public AppiumMonkeyRunner appiumMonkeyRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService) { - return new AppiumMonkeyRunner(deviceManager, testTaskEngineService); + public AdbMonkeyRunner adbMonkeyRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, + PerformanceTestManagementService performanceTestManagementService, + ADBOperateUtil adbOperateUtil) { + return new AdbMonkeyRunner(deviceManager, testTaskEngineService, performanceTestManagementService, adbOperateUtil); } @Bean - public AppiumRunner appiumRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService) { - return new AppiumRunner(deviceManager, testTaskEngineService); + public AppiumMonkeyRunner appiumMonkeyRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, + PerformanceTestManagementService performanceTestManagementService) { + return new AppiumMonkeyRunner(deviceManager, testTaskEngineService, performanceTestManagementService); } @Bean - public AppiumCrossRunner appiumCrossRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService) { - return new AppiumCrossRunner(deviceManager, testTaskEngineService, agentName); + public AppiumRunner appiumRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, + PerformanceTestManagementService performanceTestManagementService) { + return new AppiumRunner(deviceManager, testTaskEngineService, performanceTestManagementService); } @Bean - public SmartRunner smartRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, SmartTestUtil smartTestUtil) { - return new SmartRunner(deviceManager, testTaskEngineService, smartTestUtil); + public AppiumCrossRunner appiumCrossRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, + PerformanceTestManagementService performanceTestManagementService) { + return new AppiumCrossRunner(deviceManager, testTaskEngineService, performanceTestManagementService, agentName); } @Bean - public T2CRunner t2cRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService) { - return new T2CRunner(deviceManager, testTaskEngineService, agentName); + public SmartRunner smartRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, + PerformanceTestManagementService performanceTestManagementService, + SmartTestUtil smartTestUtil) { + return new SmartRunner(deviceManager, testTaskEngineService, performanceTestManagementService, smartTestUtil); + } + + @Bean + public T2CRunner t2cRunner(DeviceManager deviceManager, TestTaskEngineService testTaskEngineService, + PerformanceTestManagementService performanceTestManagementService) { + return new T2CRunner(deviceManager, testTaskEngineService, performanceTestManagementService, agentName); } @ConfigurationProperties(prefix = "app.device-script.commands") diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/TestRunner.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/TestRunner.java index ca9e3602b..c965fabfb 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/TestRunner.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/TestRunner.java @@ -13,6 +13,8 @@ import com.microsoft.hydralab.common.util.LogUtils; import com.microsoft.hydralab.common.util.ThreadPoolUtil; import com.microsoft.hydralab.common.util.ThreadUtils; +import com.microsoft.hydralab.performance.InspectionStrategy; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,12 +31,15 @@ public abstract class TestRunner { protected final Logger log = LoggerFactory.getLogger(DeviceManager.class); protected final DeviceManager deviceManager; protected final TestTaskRunCallback testTaskRunCallback; + protected final PerformanceTestManagementService performanceTestManagementService; protected final XmlBuilder xmlBuilder = new XmlBuilder(); protected final ActionExecutor actionExecutor = new ActionExecutor(); - public TestRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback) { + public TestRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, + PerformanceTestManagementService performanceTestManagementService) { this.deviceManager = deviceManager; this.testTaskRunCallback = testTaskRunCallback; + this.performanceTestManagementService = performanceTestManagementService; } public void runTestOnDevice(TestTask testTask, DeviceInfo deviceInfo, Logger logger) { @@ -52,7 +57,6 @@ public void runTestOnDevice(TestTask testTask, DeviceInfo deviceInfo, Logger log testRun.getLogger().error(deviceInfo.getSerialNum() + ": " + e.getMessage(), e); saveErrorSummary(testRun, e); } finally { - //TODO: tearDown for performance testing. Android battery: adb shell dumpsys battery reset tearDown(deviceInfo, testTask, testRun); } } @@ -140,11 +144,22 @@ protected void setUp(DeviceInfo deviceInfo, TestTask testTask, TestRun testRun) checkTestTaskCancel(testTask); deviceManager.getScreenShot(deviceInfo, testRun.getLogger()); + + if (performanceTestManagementService != null && testTask.getInspectionStrategies() != null) { + for (InspectionStrategy strategy : testTask.getInspectionStrategies()) { + performanceTestManagementService.inspectWithStrategy(strategy); + } + } } protected abstract void run(DeviceInfo deviceInfo, TestTask testTask, TestRun testRun) throws Exception; protected void tearDown(DeviceInfo deviceInfo, TestTask testTask, TestRun testRun) { + // stop performance test + if (performanceTestManagementService != null) { + performanceTestManagementService.testTearDown(deviceInfo, log); + } + //execute actions if (testTask.getDeviceActions() != null) { testRun.getLogger().info("Start executing tearDown actions."); diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumCrossRunner.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumCrossRunner.java index 19fc785d2..b35e6f9b3 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumCrossRunner.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumCrossRunner.java @@ -7,13 +7,15 @@ import com.microsoft.hydralab.common.entity.common.TestRun; import com.microsoft.hydralab.common.entity.common.TestTask; import com.microsoft.hydralab.common.management.DeviceManager; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.slf4j.Logger; public class AppiumCrossRunner extends AppiumRunner { String agentName; - public AppiumCrossRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, String agentName) { - super(deviceManager, testTaskRunCallback); + public AppiumCrossRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, + PerformanceTestManagementService performanceTestManagementService, String agentName) { + super(deviceManager, testTaskRunCallback, performanceTestManagementService); this.agentName = agentName; } diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumListener.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumListener.java index 9246f2b0e..b3f735c73 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumListener.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumListener.java @@ -10,6 +10,7 @@ import com.microsoft.hydralab.common.logger.LogCollector; import com.microsoft.hydralab.common.management.DeviceManager; import com.microsoft.hydralab.common.screen.ScreenRecorder; +import com.microsoft.hydralab.performance.PerformanceTestListener; import org.junit.runner.Description; import org.junit.runner.Result; import org.junit.runner.notification.Failure; @@ -31,6 +32,7 @@ public class AppiumListener extends RunListener { private final AnimatedGifEncoder e = new AnimatedGifEncoder(); private final String pkgName; DeviceManager deviceManager; + private final PerformanceTestListener performanceTestListener; private long recordingStartTimeMillis; private int index; private File gifFile; @@ -43,12 +45,14 @@ public class AppiumListener extends RunListener { private int currentTestIndex = 0; - public AppiumListener(DeviceManager deviceManager, DeviceInfo deviceInfo, TestRun testRun, String pkgName, Logger logger) { + public AppiumListener(DeviceManager deviceManager, DeviceInfo deviceInfo, TestRun testRun, String pkgName, + PerformanceTestListener performanceTestListener, Logger logger) { this.deviceManager = deviceManager; this.deviceInfo = deviceInfo; this.testRun = testRun; this.logger = logger; this.pkgName = pkgName; + this.performanceTestListener = performanceTestListener; logcatCollector = deviceManager.getLogCollector(deviceInfo, pkgName, testRun, logger); deviceScreenRecorder = deviceManager.getScreenRecorder(deviceInfo, testRun.getResultFolder(), logger); } @@ -107,6 +111,7 @@ public void testRunStarted(Description description) { testRun.addNewTimeTag("testRunStarted", System.currentTimeMillis() - recordingStartTimeMillis); deviceInfo.setRunningTestName(runName.substring(runName.lastIndexOf('.') + 1) + ".testRunStarted"); logEnter(runName, description.testCount()); + performanceTestListener.testRunStarted(); } @Override @@ -159,6 +164,7 @@ public void testStarted(Description description) { ioException.printStackTrace(); } }), logger); + performanceTestListener.testStarted(ongoingTestUnit.getTitle()); } @Override @@ -167,6 +173,7 @@ public void testFailure(Failure failure) { logEnter("testFailed", testDisplayName, failure.getTrace()); ongoingTestUnit.setStack(failure.getTrace()); ongoingTestUnit.setStatusCode(AndroidTestUnit.StatusCodes.FAILURE); + performanceTestListener.testFailure(ongoingTestUnit.getTitle()); testRun.addNewTimeTag(ongoingTestUnit.getTitle() + ".fail", System.currentTimeMillis() - recordingStartTimeMillis); testRun.oneMoreFailure(); } @@ -197,6 +204,7 @@ public void testFinished(Description description) { ) { ongoingTestUnit.setStatusCode(AndroidTestUnit.StatusCodes.OK); ongoingTestUnit.setSuccess(true); + performanceTestListener.testSuccess(ongoingTestUnit.getTitle()); } ongoingTestUnit.setEndTimeMillis(System.currentTimeMillis()); ongoingTestUnit.setRelEndTimeInVideo(ongoingTestUnit.getEndTimeMillis() - recordingStartTimeMillis); @@ -230,6 +238,7 @@ public void testRunFinished(Result result) { } } + performanceTestListener.testRunFinished(); logEnter("testRunEnded", elapsedTime, Thread.currentThread().getName()); synchronized (this) { diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumRunner.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumRunner.java index 3d9d05607..3d5c1eda2 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumRunner.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/AppiumRunner.java @@ -12,6 +12,7 @@ import com.microsoft.hydralab.common.management.DeviceManager; import com.microsoft.hydralab.common.util.IOSUtils; import com.microsoft.hydralab.common.util.LogUtils; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.junit.internal.TextListener; import org.junit.platform.launcher.Launcher; import org.junit.platform.launcher.LauncherDiscoveryRequest; @@ -32,8 +33,9 @@ public class AppiumRunner extends TestRunner { - public AppiumRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback) { - super(deviceManager, testTaskRunCallback); + public AppiumRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, + PerformanceTestManagementService performanceTestManagementService) { + super(deviceManager, testTaskRunCallback, performanceTestManagementService); } @Override @@ -74,7 +76,7 @@ protected File runAndGetGif(File appiumJarFile, String appiumCommand, DeviceInfo File gifFile = null; if (TestTask.TestFrameworkType.JUNIT5.equals(testTask.getFrameworkType())) { reportLogger.info("Start init listener"); - Junit5Listener junit5Listener = new Junit5Listener(deviceManager, deviceInfo, testRun, testTask.getPkgName(), reportLogger); + Junit5Listener junit5Listener = new Junit5Listener(deviceManager, deviceInfo, testRun, testTask.getPkgName(), performanceTestManagementService, reportLogger); /** run the test */ reportLogger.info("Start appium test with junit5"); @@ -86,7 +88,7 @@ protected File runAndGetGif(File appiumJarFile, String appiumCommand, DeviceInfo } else { /** xml report: parse listener */ reportLogger.info("Start init listener"); - AppiumListener listener = new AppiumListener(deviceManager, deviceInfo, testRun, testTask.getPkgName(), reportLogger); + AppiumListener listener = new AppiumListener(deviceManager, deviceInfo, testRun, testTask.getPkgName(), performanceTestManagementService, reportLogger); /** run the test */ reportLogger.info("Start appium test with junit4"); diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/Junit5Listener.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/Junit5Listener.java index 98601248b..9f638cd41 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/Junit5Listener.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/appium/Junit5Listener.java @@ -11,6 +11,7 @@ import com.microsoft.hydralab.common.logger.LogCollector; import com.microsoft.hydralab.common.management.DeviceManager; import com.microsoft.hydralab.common.screen.ScreenRecorder; +import com.microsoft.hydralab.performance.PerformanceTestListener; import org.junit.platform.engine.TestExecutionResult; import org.junit.platform.engine.support.descriptor.MethodSource; import org.junit.platform.launcher.TestIdentifier; @@ -28,6 +29,7 @@ public class Junit5Listener extends SummaryGeneratingListener { private final DeviceManager deviceManager; + private final PerformanceTestListener performanceTestListener; private final DeviceInfo deviceInfo; private final TestRun testRun; private final LogCollector logcatCollector; @@ -45,12 +47,14 @@ public class Junit5Listener extends SummaryGeneratingListener { private String currentTestName = ""; private int currentTestIndex = 0; - public Junit5Listener(DeviceManager deviceManager, DeviceInfo deviceInfo, TestRun testRun, String pkgName, Logger logger) { + public Junit5Listener(DeviceManager deviceManager, DeviceInfo deviceInfo, TestRun testRun, String pkgName, + PerformanceTestListener performanceTestListener, Logger logger) { this.deviceManager = deviceManager; this.deviceInfo = deviceInfo; this.testRun = testRun; this.logger = logger; this.pkgName = pkgName; + this.performanceTestListener = performanceTestListener; logcatCollector = deviceManager.getLogCollector(deviceInfo, pkgName, testRun, logger); deviceScreenRecorder = deviceManager.getScreenRecorder(deviceInfo, testRun.getResultFolder(), logger); } @@ -102,6 +106,7 @@ public void testPlanExecutionStarted(TestPlan testPlan) { testRun.setTestStartTimeMillis(System.currentTimeMillis()); testRun.addNewTimeTag("testRunStarted", System.currentTimeMillis() - recordingStartTimeMillis); deviceInfo.setRunningTestName(runName.substring(runName.lastIndexOf('.') + 1) + ".testRunStarted"); + performanceTestListener.testRunStarted(); logEnter(runName, testCount); } @@ -135,6 +140,8 @@ public void testPlanExecutionFinished(TestPlan testPlan) { } + performanceTestListener.testRunFinished(); + logEnter("testRunEnded", elapsedTime, Thread.currentThread().getName()); synchronized (this) { if (alreadyEnd) { @@ -216,6 +223,9 @@ public void executionStarted(TestIdentifier testIdentifier) { ioException.printStackTrace(); } }), logger); + + performanceTestListener.testStarted(ongoingTestUnit.getTitle()); + } @Override @@ -228,6 +238,7 @@ public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult logEnter("testEnded", testIdentifier.getDisplayName()); ongoingTestUnit.setStatusCode(AndroidTestUnit.StatusCodes.OK); ongoingTestUnit.setSuccess(true); + performanceTestListener.testSuccess(ongoingTestUnit.getTitle()); } else { Throwable throwable; @@ -242,6 +253,7 @@ public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult ongoingTestUnit.setStatusCode(AndroidTestUnit.StatusCodes.FAILURE); testRun.addNewTimeTag(ongoingTestUnit.getTitle() + ".fail", System.currentTimeMillis() - recordingStartTimeMillis); testRun.oneMoreFailure(); + performanceTestListener.testFailure(ongoingTestUnit.getTestName()); } ongoingTestUnit.setEndTimeMillis(System.currentTimeMillis()); ongoingTestUnit.setRelEndTimeInVideo(ongoingTestUnit.getEndTimeMillis() - recordingStartTimeMillis); diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/espresso/EspressoRunner.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/espresso/EspressoRunner.java index 6b0da0e50..e82af5375 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/espresso/EspressoRunner.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/espresso/EspressoRunner.java @@ -13,6 +13,7 @@ import com.microsoft.hydralab.common.util.ADBOperateUtil; import com.microsoft.hydralab.common.util.Const; import com.microsoft.hydralab.common.util.LogUtils; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -23,8 +24,10 @@ public class EspressoRunner extends TestRunner { final ADBOperateUtil adbOperateUtil; - public EspressoRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, ADBOperateUtil adbOperateUtil) { - super(deviceManager, testTaskRunCallback); + public EspressoRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, + PerformanceTestManagementService performanceTestManagementService, + ADBOperateUtil adbOperateUtil) { + super(deviceManager, testTaskRunCallback, performanceTestManagementService); this.adbOperateUtil = adbOperateUtil; } diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/monkey/AdbMonkeyRunner.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/monkey/AdbMonkeyRunner.java index 090753a5f..772947a32 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/monkey/AdbMonkeyRunner.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/monkey/AdbMonkeyRunner.java @@ -16,6 +16,7 @@ import com.microsoft.hydralab.common.screen.ScreenRecorder; import com.microsoft.hydralab.common.util.ADBOperateUtil; import com.microsoft.hydralab.common.util.LogUtils; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,6 +28,7 @@ import java.util.concurrent.TimeUnit; public class AdbMonkeyRunner extends TestRunner { + private static final String TEST_RUN_NAME = "ADB monkey test"; static final Logger classLogger = LoggerFactory.getLogger(AdbMonkeyRunner.class); private final AnimatedGifEncoder e = new AnimatedGifEncoder(); final ADBOperateUtil adbOperateUtil; @@ -38,8 +40,9 @@ public class AdbMonkeyRunner extends TestRunner { private File gifFile; private AndroidTestUnit ongoingMonkeyTest; - public AdbMonkeyRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, ADBOperateUtil adbOperateUtil) { - super(deviceManager, testTaskRunCallback); + public AdbMonkeyRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, + PerformanceTestManagementService performanceTestManagementService, ADBOperateUtil adbOperateUtil) { + super(deviceManager, testTaskRunCallback, performanceTestManagementService); this.adbOperateUtil = adbOperateUtil; } @@ -56,9 +59,11 @@ protected void run(DeviceInfo deviceInfo, TestTask testTask, TestRun testRun) th startRecording(deviceInfo, testRun, testTask.getTimeOutSecond(), reportLogger); /** run the test */ - reportLogger.info("Start monkey test"); + reportLogger.info("Start " + TEST_RUN_NAME); testRun.setTestStartTimeMillis(System.currentTimeMillis()); + performanceTestManagementService.testRunStarted(); checkTestTaskCancel(testTask); + performanceTestManagementService.testStarted(TEST_RUN_NAME); long checkTime = runMonkeyTestOnce(deviceInfo, testRun, reportLogger, testTask.getInstrumentationArgs(), testTask.getMaxStepCount()); if (checkTime > 0) { String crashStack = testRun.getCrashStack(); @@ -66,10 +71,14 @@ protected void run(DeviceInfo deviceInfo, TestTask testTask, TestRun testRun) th ongoingMonkeyTest.setStatusCode(AndroidTestUnit.StatusCodes.FAILURE); ongoingMonkeyTest.setSuccess(false); ongoingMonkeyTest.setStack(crashStack); + performanceTestManagementService.testFailure(ongoingMonkeyTest.getTitle()); testRun.addNewTimeTagBeforeLast(ongoingMonkeyTest.getTitle() + ".fail", checkTime); testRun.oneMoreFailure(); + } else { + performanceTestManagementService.testSuccess(ongoingMonkeyTest.getTitle()); } } + performanceTestManagementService.testRunFinished(); testRunEnded(deviceInfo, testRun); /** set paths */ diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/monkey/AppiumMonkeyRunner.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/monkey/AppiumMonkeyRunner.java index df56e470f..f9747e8f6 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/monkey/AppiumMonkeyRunner.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/monkey/AppiumMonkeyRunner.java @@ -13,6 +13,7 @@ import com.microsoft.hydralab.common.logger.LogCollector; import com.microsoft.hydralab.common.management.DeviceManager; import com.microsoft.hydralab.common.screen.ScreenRecorder; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.slf4j.Logger; import javax.imageio.ImageIO; @@ -23,8 +24,9 @@ public class AppiumMonkeyRunner extends AppiumRunner { private final AnimatedGifEncoder e = new AnimatedGifEncoder(); - public AppiumMonkeyRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback) { - super(deviceManager, testTaskRunCallback); + public AppiumMonkeyRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, + PerformanceTestManagementService performanceTestManagementService) { + super(deviceManager, testTaskRunCallback, performanceTestManagementService); } @Override diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/smart/SmartRunner.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/smart/SmartRunner.java index dce7707a1..c92b4c1a3 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/smart/SmartRunner.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/smart/SmartRunner.java @@ -18,6 +18,7 @@ import com.microsoft.hydralab.common.management.DeviceManager; import com.microsoft.hydralab.common.screen.ScreenRecorder; import com.microsoft.hydralab.common.util.Const; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.slf4j.Logger; import javax.imageio.ImageIO; @@ -36,8 +37,9 @@ public class SmartRunner extends TestRunner { private File gifFile; private SmartTestParam smartTestParam; - public SmartRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, SmartTestUtil smartTestUtil) { - super(deviceManager, testTaskRunCallback); + public SmartRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, + PerformanceTestManagementService performanceTestManagementService, SmartTestUtil smartTestUtil) { + super(deviceManager, testTaskRunCallback, performanceTestManagementService); this.smartTestUtil = smartTestUtil; } diff --git a/agent/src/main/java/com/microsoft/hydralab/agent/runner/t2c/T2CRunner.java b/agent/src/main/java/com/microsoft/hydralab/agent/runner/t2c/T2CRunner.java index 80ff869ba..65581bdb5 100644 --- a/agent/src/main/java/com/microsoft/hydralab/agent/runner/t2c/T2CRunner.java +++ b/agent/src/main/java/com/microsoft/hydralab/agent/runner/t2c/T2CRunner.java @@ -13,6 +13,7 @@ import com.microsoft.hydralab.common.logger.LogCollector; import com.microsoft.hydralab.common.management.DeviceManager; import com.microsoft.hydralab.common.screen.ScreenRecorder; +import com.microsoft.hydralab.performance.PerformanceTestManagementService; import org.slf4j.Logger; import javax.imageio.ImageIO; @@ -29,8 +30,9 @@ public class T2CRunner extends AppiumRunner { String agentName; private int currentIndex = 0; - public T2CRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, String agentName) { - super(deviceManager, testTaskRunCallback); + public T2CRunner(DeviceManager deviceManager, TestTaskRunCallback testTaskRunCallback, + PerformanceTestManagementService performanceTestManagementService, String agentName) { + super(deviceManager, testTaskRunCallback, performanceTestManagementService); this.agentName = agentName; } diff --git a/common/src/main/java/com/microsoft/hydralab/common/entity/center/TestTaskSpec.java b/common/src/main/java/com/microsoft/hydralab/common/entity/center/TestTaskSpec.java index acb056df3..0dd7fdaac 100644 --- a/common/src/main/java/com/microsoft/hydralab/common/entity/center/TestTaskSpec.java +++ b/common/src/main/java/com/microsoft/hydralab/common/entity/center/TestTaskSpec.java @@ -4,6 +4,7 @@ import com.microsoft.hydralab.common.entity.common.DeviceAction; import com.microsoft.hydralab.common.entity.common.TestFileSet; +import com.microsoft.hydralab.performance.InspectionStrategy; import lombok.ToString; import java.util.HashSet; @@ -46,4 +47,5 @@ public class TestTaskSpec { public String testScope; public String testSuiteClass; public Map> deviceActions; + public List inspectionStrategies; } diff --git a/common/src/main/java/com/microsoft/hydralab/common/entity/common/TestTask.java b/common/src/main/java/com/microsoft/hydralab/common/entity/common/TestTask.java index 9f3a918c8..899682e3e 100644 --- a/common/src/main/java/com/microsoft/hydralab/common/entity/common/TestTask.java +++ b/common/src/main/java/com/microsoft/hydralab/common/entity/common/TestTask.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.annotation.JSONField; import com.microsoft.hydralab.common.entity.center.TestTaskSpec; import com.microsoft.hydralab.common.util.DateUtil; +import com.microsoft.hydralab.performance.InspectionStrategy; import lombok.Data; import org.apache.commons.lang3.StringUtils; @@ -93,6 +94,9 @@ public class TestTask implements Serializable { private String testScope; // todo: change this to a more general name for all scopes of ESPRESSO tests. private String testSuite; + //todo: Add performance test result to test task + @Transient + private List inspectionStrategies; public TestTask() { } @@ -141,6 +145,7 @@ public static TestTask convertToTestTask(TestTaskSpec testTaskSpec) { testTask.setTestRunnerName(testTaskSpec.testRunnerName); } testTask.setTestScope(testTaskSpec.testScope); + testTask.setInspectionStrategies(testTaskSpec.inspectionStrategies); return testTask; } @@ -173,6 +178,7 @@ public static TestTaskSpec convertToTestTaskSpec(TestTask testTask) { testTaskSpec.teamName = testTask.getTeamName(); testTaskSpec.testRunnerName = testTask.getTestRunnerName(); testTaskSpec.testScope = testTask.getTestScope(); + testTaskSpec.inspectionStrategies = testTask.getInspectionStrategies(); return testTaskSpec; } diff --git a/common/src/main/java/com/microsoft/hydralab/common/util/ThreadPoolUtil.java b/common/src/main/java/com/microsoft/hydralab/common/util/ThreadPoolUtil.java index 3b62fd87a..a52208d15 100644 --- a/common/src/main/java/com/microsoft/hydralab/common/util/ThreadPoolUtil.java +++ b/common/src/main/java/com/microsoft/hydralab/common/util/ThreadPoolUtil.java @@ -7,6 +7,7 @@ public class ThreadPoolUtil { public static final ScheduledExecutorService TIMER_EXECUTOR = Executors.newScheduledThreadPool(20); + public static final ScheduledExecutorService PERFORMANCE_TEST_TIMER_EXECUTOR = Executors.newScheduledThreadPool(5 /* corePoolSize */); private static final AtomicInteger SCREENSHOT_THREAD_NUMBER = new AtomicInteger(1); public static final Executor SCREENSHOT_EXECUTOR = newThreadPoolExecutor(SCREENSHOT_THREAD_NUMBER, 20, 60L, "ScreenshotExecutor"); private static final AtomicInteger TEST_THREAD_NUMBER = new AtomicInteger(1); diff --git a/common/src/main/java/com/microsoft/hydralab/performance/PerformanceTestListener.java b/common/src/main/java/com/microsoft/hydralab/performance/PerformanceTestListener.java new file mode 100644 index 000000000..942d13721 --- /dev/null +++ b/common/src/main/java/com/microsoft/hydralab/performance/PerformanceTestListener.java @@ -0,0 +1,37 @@ +package com.microsoft.hydralab.performance; + +/** + * The listener that is called during a performance test run + */ +public interface PerformanceTestListener { + /** + * Called before any tests have been run. + * + * @param description the description of the test that is about to be run + */ + void testStarted(String description); + + /** + * Called when an atomic test succeeds. + * + * @param description the description of the test that just ran + */ + void testSuccess(String description); + + /** + * Called when an atomic test fails. + * + * @param description describes the test that failed + */ + void testFailure(String description); + + /** + * Called before any tests have been run. + */ + void testRunStarted(); + + /** + * Called when all tests have finished. + */ + void testRunFinished(); +} diff --git a/common/src/main/java/com/microsoft/hydralab/performance/PerformanceTestManagementService.java b/common/src/main/java/com/microsoft/hydralab/performance/PerformanceTestManagementService.java index f6c8eeb9c..8b54d7835 100644 --- a/common/src/main/java/com/microsoft/hydralab/performance/PerformanceTestManagementService.java +++ b/common/src/main/java/com/microsoft/hydralab/performance/PerformanceTestManagementService.java @@ -2,8 +2,13 @@ // Licensed under the MIT License. package com.microsoft.hydralab.performance; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.microsoft.hydralab.agent.runner.ITestRun; import com.microsoft.hydralab.agent.runner.TestRunThreadContext; +import com.microsoft.hydralab.common.entity.common.DeviceInfo; +import com.microsoft.hydralab.common.util.FileUtil; +import com.microsoft.hydralab.common.util.ThreadPoolUtil; import com.microsoft.hydralab.performance.inspectors.AndroidBatteryInfoInspector; import com.microsoft.hydralab.performance.inspectors.WindowsBatteryInspector; import com.microsoft.hydralab.performance.inspectors.WindowsMemoryInspector; @@ -11,17 +16,23 @@ import com.microsoft.hydralab.performance.parsers.WindowsBatteryResultParser; import com.microsoft.hydralab.performance.parsers.WindowsMemoryResultParser; import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; import org.springframework.util.Assert; import java.io.File; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledFuture; import static com.microsoft.hydralab.performance.PerformanceInspector.PerformanceInspectorType.*; import static com.microsoft.hydralab.performance.PerformanceResultParser.PerformanceResultParserType.*; -public class PerformanceTestManagementService implements IPerformanceInspectionService { +public class PerformanceTestManagementService implements IPerformanceInspectionService, PerformanceTestListener { + private static final Map inspectorParserTypeMap = Map.of( + INSPECTOR_ANDROID_BATTERY_INFO, PARSER_ANDROID_BATTERY_INFO, + INSPECTOR_WIN_MEMORY, PARSER_WIN_MEMORY, + INSPECTOR_WIN_BATTERY, PARSER_WIN_BATTERY + ); private final Map performanceInspectorMap = Map.of( INSPECTOR_ANDROID_BATTERY_INFO, new AndroidBatteryInfoInspector(), INSPECTOR_WIN_MEMORY, new WindowsMemoryInspector(), @@ -32,12 +43,14 @@ PARSER_ANDROID_BATTERY_INFO, new AndroidBatteryInfoResultParser(), PARSER_WIN_MEMORY, new WindowsMemoryResultParser(), PARSER_WIN_BATTERY, new WindowsBatteryResultParser() ); - private static final Map inspectorParserTypeMap = Map.of( - INSPECTOR_ANDROID_BATTERY_INFO, PARSER_ANDROID_BATTERY_INFO, - INSPECTOR_WIN_MEMORY, PARSER_WIN_MEMORY, - INSPECTOR_WIN_BATTERY, PARSER_WIN_BATTERY - ); - private final Map> testRunPerfResultMap = new ConcurrentHashMap<>(); + + private final Map>> inspectPerformanceTimerMap = new ConcurrentHashMap<>(); + private final Map> testLifeCycleStrategyMap = new ConcurrentHashMap<>(); + private final Map> testRunPerfResultMap = new ConcurrentHashMap<>(); + + public void initialize() { + PerformanceInspectionService.getInstance().swapImplementation(this); + } @NotNull private static PerformanceTestResult createPerformanceTestResult(PerformanceInspection performanceInspection) { @@ -47,8 +60,8 @@ private static PerformanceTestResult createPerformanceTestResult(PerformanceInsp return performanceTestResult; } - public void initialize() { - PerformanceInspectionService.getInstance().swapImplementation(this); + private static PerformanceResultParser.PerformanceResultParserType getParserTypeByInspection(PerformanceInspection performanceInspection) { + return inspectorParserTypeMap.get(performanceInspection.inspectorType); } private PerformanceInspector getInspectorByType(PerformanceInspector.PerformanceInspectorType inspectorType) { @@ -59,26 +72,29 @@ private PerformanceResultParser getParserByType(PerformanceResultParser.Performa return performanceResultParserMap.get(parserType); } - private static PerformanceResultParser.PerformanceResultParserType getParserTypeByInspection(PerformanceInspection performanceInspection) { - return inspectorParserTypeMap.get(performanceInspection.inspectorType); - } - @Override public PerformanceInspectionResult inspect(PerformanceInspection performanceInspection) { + ITestRun testRun = getTestRun(); + return inspect(performanceInspection, testRun); + } + + private PerformanceInspectionResult inspect(PerformanceInspection performanceInspection, ITestRun testRun) { + if (performanceInspection == null || testRun == null) return null; + + performanceInspection = getDevicePerformanceInspection(performanceInspection); PerformanceInspector.PerformanceInspectorType inspectorType = performanceInspection.inspectorType; PerformanceInspector performanceInspector = getInspectorByType(inspectorType); Assert.notNull(performanceInspector, "Found no matched inspector: " + performanceInspection.inspectorType); - ITestRun testRun = getTestRun(); - File performanceFolder = new File(testRun.getResultFolder(), "performance"); + File performanceFolder = new File(testRun.getResultFolder(), PerformanceInspection.class.getSimpleName()); Assert.isTrue(performanceFolder.exists() || performanceFolder.mkdirs(), "performanceInspection.resultFolder.mkdirs() failed in " + performanceFolder.getAbsolutePath()); - File inspectorFolder = new File(performanceFolder, inspectorType.getName()); + File inspectorFolder = new File(performanceFolder, inspectorType.name()); Assert.isTrue(inspectorFolder.exists() || inspectorFolder.mkdirs(), "performanceInspection.resultFolder.mkdirs() failed in " + inspectorFolder.getAbsolutePath()); performanceInspection.resultFolder = inspectorFolder; PerformanceInspectionResult result = performanceInspector.inspect(performanceInspection); - testRunPerfResultMap.putIfAbsent(getTestRun(), new HashMap<>()); - Map performanceTestResultMap = testRunPerfResultMap.get(getTestRun()); + testRunPerfResultMap.putIfAbsent(testRun.getId(), new HashMap<>()); + Map performanceTestResultMap = testRunPerfResultMap.get(testRun.getId()); Assert.notNull(performanceTestResultMap, "performanceTestResultMap should not be null "); performanceTestResultMap.putIfAbsent(performanceInspection.inspectionKey, createPerformanceTestResult(performanceInspection)); PerformanceTestResult performanceTestResult = performanceTestResultMap.get(performanceInspection.inspectionKey); @@ -95,14 +111,40 @@ private ITestRun getTestRun() { return TestRunThreadContext.getTestRun(); } - @Override - public void inspectWithStrategy(PerformanceInspection performanceInspection, InspectionStrategy inspectionStrategy) { - //todo + public void inspectWithStrategy(InspectionStrategy inspectionStrategy) { + if (inspectionStrategy == null || inspectionStrategy.inspection == null) return; + + ITestRun testRun = getTestRun(); + if (inspectionStrategy.strategyType == InspectionStrategy.StrategyType.TEST_SCHEDULE) { + PerformanceInspection inspection = inspectionStrategy.inspection; + /* initialize inspector */ + PerformanceInspection initialInspection = new PerformanceInspection(InspectionStrategy.WhenType.TEST_RUN_STARTED.name(), + inspection.inspectorType, inspection.appId, inspection.deviceIdentifier, true); + inspect(initialInspection); + + ScheduledFuture scheduledFuture = ThreadPoolUtil.PERFORMANCE_TEST_TIMER_EXECUTOR.scheduleAtFixedRate(() -> { + inspect(inspection, testRun); + }, 0, inspectionStrategy.interval, inspectionStrategy.intervalUnit); + inspectPerformanceTimerMap.putIfAbsent(testRun.getId(), new ArrayList<>()); + inspectPerformanceTimerMap.get(testRun.getId()).add(scheduledFuture); + } + if (inspectionStrategy.strategyType == InspectionStrategy.StrategyType.TEST_LIFECYCLE) { + if (inspectionStrategy.when == null || inspectionStrategy.when.isEmpty()) { + //Inspect whole lifecycle by default if when is not specified + inspectionStrategy.when = Arrays.asList(InspectionStrategy.WhenType.values()); + } + + testLifeCycleStrategyMap.putIfAbsent(testRun.getId(), new ArrayList<>()); + testLifeCycleStrategyMap.get(testRun.getId()).add(inspectionStrategy); + } } @Override public PerformanceTestResult parse(PerformanceInspection performanceInspection) { - Map testResultMap = testRunPerfResultMap.get(getTestRun()); + if (performanceInspection == null) return null; + + performanceInspection = getDevicePerformanceInspection(performanceInspection); + Map testResultMap = testRunPerfResultMap.get(getTestRun().getId()); Assert.notNull(testResultMap, "Found no matched test result for test run"); PerformanceTestResult performanceTestResult = testResultMap.get(performanceInspection.inspectionKey); Assert.notNull(performanceTestResult, "Found no matched performanceTestResult for performanceInspectionKey: " + performanceInspection.inspectionKey); @@ -110,4 +152,101 @@ public PerformanceTestResult parse(PerformanceInspection performanceInspection) Assert.notNull(parser, "Found no matched result parser: " + performanceTestResult.parserType); return parser.parse(performanceTestResult); } + + @Override + public void testRunStarted() { + inspectWithLifeCycle(InspectionStrategy.WhenType.TEST_RUN_STARTED, "start_run"); + } + + @Override + public void testRunFinished() { + inspectWithLifeCycle(InspectionStrategy.WhenType.TEST_RUN_FINISHED, "stop_run"); + } + + @Override + public void testStarted(String description) { + inspectWithLifeCycle(InspectionStrategy.WhenType.TEST_STARTED, description); + } + + @Override + public void testSuccess(String description) { + inspectWithLifeCycle(InspectionStrategy.WhenType.TEST_SUCCESS, description); + } + + @Override + public void testFailure(String description) { + inspectWithLifeCycle(InspectionStrategy.WhenType.TEST_FAILURE, description); + } + + public void testTearDown(DeviceInfo deviceInfo, Logger log) { + ITestRun testRun = getTestRun(); + + List> timerList = inspectPerformanceTimerMap.get(testRun.getId()); + if (timerList != null) { + for (ScheduledFuture timer : timerList) { + timer.cancel(true); + } + } + List resultList = parseForTestRun(testRun); + savePerformanceTestResults(resultList, log); + + inspectPerformanceTimerMap.remove(testRun.getId()); + testLifeCycleStrategyMap.remove(testRun.getId()); + testRunPerfResultMap.remove(testRun.getId()); + + //TODO Android battery: adb shell dumpsys battery reset using Device info + } + + private void inspectWithLifeCycle(InspectionStrategy.WhenType whenType, String description) { + List strategyList = testLifeCycleStrategyMap.get(getTestRun().getId()); + if (strategyList == null) return; + + for (InspectionStrategy inspectionStrategy : strategyList) { + if (inspectionStrategy == null) continue; + PerformanceInspection inspection = inspectionStrategy.inspection; + if (inspectionStrategy.when == null) continue; + + if (inspectionStrategy.when.contains(whenType) || whenType == InspectionStrategy.WhenType.TEST_RUN_STARTED) { + PerformanceInspection lifeCycleInspection = new PerformanceInspection( + whenType.name() + "-" + description, inspection.inspectorType, inspection.appId, + inspection.deviceIdentifier, whenType == InspectionStrategy.WhenType.TEST_RUN_STARTED); + inspect(lifeCycleInspection); + } + } + } + + /** + * For giving inspection return the inspection with device id that related to test run + */ + private PerformanceInspection getDevicePerformanceInspection(PerformanceInspection inspection) { + return new PerformanceInspection(inspection.description, inspection.inspectorType, inspection.appId, + // For windows inspector, the deviceIdentifier is useless + getTestRun().getDeviceSerialNumber(), inspection.isReset); + } + + private List parseForTestRun(ITestRun testRun) { + Map testResultMap = testRunPerfResultMap.get(testRun.getId()); + if (testResultMap == null) return null; + + List resultList = new ArrayList<>(); + for (PerformanceTestResult performanceTestResult : testResultMap.values()) { + PerformanceResultParser parser = getParserByType(performanceTestResult.parserType); + Assert.notNull(parser, "Found no matched result parser: " + performanceTestResult.parserType); + resultList.add(parser.parse(performanceTestResult)); + } + return resultList; + } + + private void savePerformanceTestResults(List resultList, Logger log) { + //TODO save results to DB + if (resultList != null && !resultList.isEmpty()) { + try { + FileUtil.writeToFile(new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(resultList), + new File(getTestRun().getResultFolder(), PerformanceInspection.class.getSimpleName()) + + File.separator + "PerformanceReport.json"); + } catch (JsonProcessingException e) { + log.error("Failed to save performance test results to file", e); + } + } + } } diff --git a/common/src/test/java/com/microsoft/hydralab/common/performance/AndroidBatteryInfoResultParserTest.java b/common/src/test/java/com/microsoft/hydralab/common/performance/AndroidBatteryInfoResultParserTest.java new file mode 100644 index 000000000..e997b6cac --- /dev/null +++ b/common/src/test/java/com/microsoft/hydralab/common/performance/AndroidBatteryInfoResultParserTest.java @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +package com.microsoft.hydralab.common.performance; + +import com.microsoft.hydralab.performance.Entity.AndroidBatteryInfo; +import com.microsoft.hydralab.performance.PerformanceInspection; +import com.microsoft.hydralab.performance.PerformanceInspectionResult; +import com.microsoft.hydralab.performance.PerformanceTestResult; +import com.microsoft.hydralab.performance.parsers.AndroidBatteryInfoResultParser; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * @author taoran + * @date 2/22/2023 + */ + +public class AndroidBatteryInfoResultParserTest { + public static final String BATTERY_A13_FILE_PATH = "src/test/resources/sample_battery_info_android_13.txt"; + public static final String BATTERY_A10_FILE_PATH = "src/test/resources/sample_battery_info_android_10.txt"; + + + @Test + public void testParseWithNull_ReturnNull() { + AndroidBatteryInfoResultParser parser = new AndroidBatteryInfoResultParser(); + PerformanceTestResult testResult = parser.parse(null); + Assertions.assertNull(testResult); + } + + @Test + public void testParseWithA12_ReturnNull() { + File batteryFile = new File(BATTERY_A13_FILE_PATH); + PerformanceTestResult parsedResult = new AndroidBatteryInfoResultParser() + .parse(createPerformanceTestResultForTest(batteryFile)); + AndroidBatteryInfo summary = (AndroidBatteryInfo) parsedResult.getResultSummary(); + + Assertions.assertNotNull(parsedResult); + Assertions.assertEquals(0.000235f, summary.getAppUsage()); + Assertions.assertEquals(5.3397503f, summary.getTotal()); + } + + @Test + public void testParseWithA10_ReturnNull() { + File batteryFile = new File(BATTERY_A10_FILE_PATH); + PerformanceTestResult parsedResult = new AndroidBatteryInfoResultParser() + .parse(createPerformanceTestResultForTest(batteryFile)); + AndroidBatteryInfo summary = (AndroidBatteryInfo) parsedResult.getResultSummary(); + + Assertions.assertNotNull(parsedResult); + Assertions.assertEquals(0.0230f, summary.getAppUsage()); + Assertions.assertEquals(4.35f, summary.getTotal()); + } + + private PerformanceTestResult createPerformanceTestResultForTest(File batteryFile) { + PerformanceTestResult performanceTestResult = new PerformanceTestResult(); + performanceTestResult.performanceInspectionResults = new CopyOnWriteArrayList<>(); + performanceTestResult.performanceInspectionResults.add(new PerformanceInspectionResult(batteryFile, + PerformanceInspection.createAndroidBatteryInfoInspection("", "", "sample test") + )); + return performanceTestResult; + } +} diff --git a/common/src/test/java/com/microsoft/hydralab/common/performance/PerformanceTestManagementServiceTest.java b/common/src/test/java/com/microsoft/hydralab/common/performance/PerformanceTestManagementServiceTest.java new file mode 100644 index 000000000..831621be5 --- /dev/null +++ b/common/src/test/java/com/microsoft/hydralab/common/performance/PerformanceTestManagementServiceTest.java @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. +package com.microsoft.hydralab.common.performance; + +import com.microsoft.hydralab.performance.PerformanceTestManagementService; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class PerformanceTestManagementServiceTest { + private final PerformanceTestManagementService performanceTestManagementService = new PerformanceTestManagementService(); + + @Test + public void testInspect_ReturnNull() { + Assertions.assertNull(performanceTestManagementService.inspect(null)); + } + + @Test + public void testParse_ReturnNull() { + Assertions.assertNull(performanceTestManagementService.parse(null)); + } +} diff --git a/common/src/test/resources/sample_battery_info_android_10.txt b/common/src/test/resources/sample_battery_info_android_10.txt new file mode 100644 index 000000000..4af2b123b --- /dev/null +++ b/common/src/test/resources/sample_battery_info_android_10.txt @@ -0,0 +1,278 @@ +Statistics since last charge: + System starts: 0, currently on battery: true + Estimated battery capacity: 3700 mAh + Time on battery: 1m 34s 39ms (100.0%) realtime, 1m 34s 39ms (100.0%) uptime + Time on battery screen off: 6s 980ms (7.4%) realtime, 6s 980ms (7.4%) uptime + Time on battery screen doze: 0ms (0.0%) + Total run time: 1m 34s 44ms realtime, 1m 34s 44ms uptime + Discharge: 0 mAh + Screen off discharge: 0 mAh + Screen doze discharge: 0 mAh + Screen on discharge: 0 mAh + Device light doze discharge: 0 mAh + Device deep doze discharge: 0 mAh + Start clock time: 2020-11-05-17-54-50 + Screen on: 1m 27s 59ms (92.6%) 2x, Interactive: 1m 27s 3ms (92.5%) + Screen brightnesses: + dark 7s 137ms (8.2%) + dim 1m 19s 922ms (91.8%) + Total partial wakelock time: 5s 46ms + + CONNECTIVITY POWER SUMMARY START + Logging duration for connectivity statistics: 1m 34s 39ms + Cellular Statistics: + Cellular kernel active time: 0ms (0.0%) + Cellular Sleep time: 1m 33s 532ms (99.5%) + Cellular Idle time: 275ms (0.3%) + Cellular Rx time: 6s 187ms (6.6%) + Cellular Tx time: + less than 0dBm: 0ms (0.0%) + 0dBm to 8dBm: 0ms (0.0%) + 8dBm to 15dBm: 0ms (0.0%) + 15dBm to 20dBm: 0ms (0.0%) + above 20dBm: 0ms (0.0%) + Cellular data received: 0B + Cellular data sent: 0B + Cellular packets received: 0 + Cellular packets sent: 0 + Cellular Radio Access Technology: (no activity) + Cellular Rx signal strength (RSRP): + very poor (less than -128dBm): 58s 384ms (62.1%) + great (greater than -98dBm): 35s 655ms (37.9%) + Wifi Statistics: + Wifi kernel active time: 0ms (0.0%) + WiFi Scan time: 0ms (0.0%) + WiFi Sleep time: 1m 34s 39ms (100.0%) + WiFi Idle time: 0ms (0.0%) + WiFi Rx time: 0ms (0.0%) + WiFi Tx time: 0ms (0.0%) + Wifi data received: 0B + Wifi data sent: 0B + Wifi packets received: 0 + Wifi packets sent: 0 + Wifi states: (no activity) + Wifi supplicant states: (no activity) + Wifi Rx signal strength (RSSI): (no activity) + GPS Statistics: + GPS signal quality (Top 4 Average CN0): + poor (less than 20 dBHz): 0ms (0.0%) + good (greater than 20 dBHz): 0ms (0.0%) + CONNECTIVITY POWER SUMMARY END + + Bluetooth total received: 0B, sent: 0B + Bluetooth scan time: 1m 27s 176ms + Bluetooth Idle time: 24s 833ms (26.4%) + Bluetooth Rx time: 1m 0s 248ms (64.1%) + Bluetooth Tx time: 5s 470ms (5.8%) + + Device battery use since last full charge + Amount discharged (lower bound): 0 + Amount discharged (upper bound): 0 + Amount discharged while screen on: 0 + Amount discharged while screen off: 0 + Amount discharged while screen doze: 0 + + Estimated power use (mAh): + Capacity: 3700, Computed drain: 4.35, actual drain: 0 + Screen: 3.46 Excluded from smearing + Uid 1000: 0.291 ( cpu=0.242 wake=0.00689 sensor=0.0412 ) Excluded from smearing + Uid 0: 0.255 ( cpu=0.252 wake=0.00269 ) Excluded from smearing + Idle: 0.131 Excluded from smearing + Cell standby: 0.0847 ( radio=0.0847 ) Excluded from smearing + Uid u0a1905: 0.0230 ( cpu=0.0230 ) Including smearing: 0.0274 ( proportional=0.00433 ) + Uid u0a41: 0.0205 ( cpu=0.0204 wake=0.0000764 sensor=0.00000390 ) Excluded from smearing + Uid u0a1888: 0.0175 ( cpu=0.0175 ) Including smearing: 0.0207 ( proportional=0.00328 ) + Uid 1069: 0.0166 ( cpu=0.0166 ) Excluded from smearing + Uid u0a40: 0.0132 ( cpu=0.0132 wake=0.00000278 ) Including smearing: 0.0157 ( proportional=0.00249 ) + Uid 1001: 0.00833 ( cpu=0.00830 wake=0.0000333 ) Excluded from smearing + Uid u0a239: 0.00566 ( cpu=0.00566 ) Including smearing: 0.00672 ( proportional=0.00106 ) + Uid 1036: 0.00408 ( cpu=0.00408 ) Excluded from smearing + Uid u0a30: 0.00382 ( cpu=0.00382 ) Including smearing: 0.00454 ( proportional=0.000719 ) + Uid 1027: 0.00326 ( cpu=0.00326 ) Excluded from smearing + Uid 2000: 0.00240 ( cpu=0.00240 ) Excluded from smearing + Bluetooth: 0.00240 ( cpu=0.00240 ) Including smearing: 0.00285 ( proportional=0.000450 ) + Uid 1066: 0.00224 ( cpu=0.00224 ) Excluded from smearing + Uid u0a1904: 0.00159 ( cpu=0.00159 ) Including smearing: 0.00189 ( proportional=0.000299 ) + Uid u0a56: 0.00108 ( cpu=0.00108 ) Including smearing: 0.00129 ( proportional=0.000204 ) + Uid u0a23: 0.000595 ( cpu=0.000595 ) Including smearing: 0.000707 ( proportional=0.000112 ) + Uid u0a234: 0.000595 ( cpu=0.000595 ) Including smearing: 0.000707 ( proportional=0.000112 ) + Uid 1041: 0.000368 ( cpu=0.000368 ) Excluded from smearing + Uid u0a60: 0.000359 ( cpu=0.000359 ) Including smearing: 0.000426 ( proportional=0.0000675 ) + Uid u0a88: 0.000295 ( cpu=0.000295 ) Including smearing: 0.000350 ( proportional=0.0000555 ) + Uid 2906: 0.000275 ( cpu=0.000275 ) Excluded from smearing + Uid u0a44: 0.000243 ( cpu=0.000243 ) Including smearing: 0.000289 ( proportional=0.0000457 ) + Uid 9999: 0.000239 ( cpu=0.000239 ) Excluded from smearing + Uid u0a38: 0.000209 ( cpu=0.000209 ) Excluded from smearing + Uid 1021: 0.000172 ( cpu=0.000172 ) Excluded from smearing + Uid u0a50: 0.000150 ( cpu=0.000150 ) Including smearing: 0.000178 ( proportional=0.0000281 ) + Uid 1047: 0.000148 ( cpu=0.000148 ) Excluded from smearing + Uid u0a32: 0.000114 ( cpu=0.000114 ) Including smearing: 0.000135 ( proportional=0.0000214 ) + Uid u0a231: 0.0000785 ( cpu=0.0000785 ) Including smearing: 0.0000932 ( proportional=0.0000148 ) + Uid u0a268: 0.0000647 ( cpu=0.0000647 ) Including smearing: 0.0000769 ( proportional=0.0000122 ) + Uid 2903: 0.0000396 ( cpu=0.0000396 ) Excluded from smearing + Uid u0a14: 0.0000396 ( cpu=0.0000396 ) Including smearing: 0.0000470 ( proportional=0.00000744 ) + Uid u0a25: 0.0000389 ( cpu=0.0000389 ) Including smearing: 0.0000462 ( proportional=0.00000732 ) + Uid u0a100: 0.0000370 ( cpu=0.0000370 ) Including smearing: 0.0000439 ( proportional=0.00000695 ) + Uid u0a20: 0.0000258 ( cpu=0.0000258 ) Including smearing: 0.0000307 ( proportional=0.00000486 ) + Uid u0a29: 0.0000258 ( cpu=0.0000258 ) Excluded from smearing + Uid u0a102: 0.0000258 ( cpu=0.0000258 ) Including smearing: 0.0000307 ( proportional=0.00000486 ) + + CPU freqs: 300000 403200 499200 576000 672000 768000 844800 940800 1036800 1113600 1209600 1305600 1382400 1478400 1555200 1632000 1708800 1785600 710400 825600 940800 1056000 1171200 1286400 1401600 1497600 1612800 1708800 1804800 1920000 2016000 2131200 2227200 2323200 2419200 825600 940800 1056000 1171200 1286400 1401600 1497600 1612800 1708800 1804800 1920000 2016000 2131200 2227200 2323200 2419200 2534400 2649600 2745600 2841600 + + 1000: + User activity: 2 other, 10 touch + Wake lock ActivityManager-Sleep: 4s 712ms partial (1 times) max=5003 actual=5003 realtime + Wake lock *alarm* realtime + Wake lock com.heytap.mcs realtime + Wake lock PhoneWindowManager.mPowerKeyWakeLock: 10ms partial (2 times) max=5 realtime + Wake lock freezeAction: 6ms partial (2 times) max=9 actual=11 realtime + Wake lock PhoneWindowManager.DreamWakeLock: 203ms partial (0 times) max=451 actual=451 realtime + Wake lock NetworkStats realtime + Wake lock *telephony-radio*: 10ms partial (2 times) max=10 actual=15 realtime + Wake lock GnssLocationProvider: 3ms partial (1 times) max=3 realtime + Wake lock startDream: 20ms partial (1 times) max=67 actual=67 realtime + TOTAL wake: 4s 964ms blamed partial, 5s 40ms actual partial realtime + Sensor 11: 1m 26s 813ms realtime (2 times) + Sensor 21: 12ms realtime (1 times) + Sensor 1001: 1m 27s 12ms realtime (2 times) + Foreground for: 1m 34s 38ms + Total running: 1m 34s 38ms + Total cpu time: u=3s 327ms s=3s 446ms + Total cpu time per freq: 0 0 0 200 0 0 20 0 40 20 60 50 70 270 150 10 20 410 70 0 0 0 0 0 0 0 10 10 2550 40 0 40 50 30 830 250 0 20 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 + Total screen-off cpu time per freq: 0 0 0 200 0 0 20 0 40 20 60 50 70 30 100 10 20 310 70 0 0 0 0 0 0 0 10 10 0 0 0 0 0 0 70 20 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + Apk com.heytap.mcs: + Wakeup alarm *walarm*:com.heytap.mcs.action: 0 times + u0a1905: + Wake lock *launch* realtime + Foreground activities: 1m 20s 751ms realtime (3 times) (running) + Foreground services: 11s 521ms realtime (1 times) + Top for: 1m 22s 514ms + Fg Service for: 11s 521ms + Total running: 1m 34s 35ms + Total cpu time: u=526ms s=81ms + Total cpu time per freq: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 60 0 0 0 10 0 310 10 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 110 + Total screen-off cpu time per freq: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + Proc com.microsoft.hydralab.android.client: + CPU: 0ms usr + 0ms krn ; 260ms fg + +**** RPM_STATS **** + +RPM Mode:aosd + count:0 +time in last mode(msec):0 +time since last mode(sec):7388 +actual last sleep(msec):0 + +RPM Mode:cxsd + count:0 +time in last mode(msec):0 +time since last mode(sec):7388 +actual last sleep(msec):0 + + +**** RPM_STATS **** + +**** RPM_MASTER_STATS **** + +APSS + Version:0x1 + Sleep Count:0x29d00 + Sleep Last Entered At:0x2107947dca + Sleep Last Exited At:0x2107b8a0e1 + Sleep Accumulated Duration:0x19a36a08ca + +MPSS + Version:0x1 + Sleep Count:0x5577 + Sleep Last Entered At:0x2107c1361c + Sleep Last Exited At:0x2107c0816b + Sleep Accumulated Duration:0x1e3b6452f8 + +ADSP + Version:0x1 + Sleep Count:0x84 + Sleep Last Entered At:0x1ef3ce637b + Sleep Last Exited At:0x1ef3ce47a3 + Sleep Accumulated Duration:0x20ebfd2ad5 + +CDSP + Version:0x1 + Sleep Count:0x13 + Sleep Last Entered At:0x1efbe458de + Sleep Last Exited At:0x1efbe4216d + Sleep Accumulated Duration:0x20f7f7f847 + +SLPI + Version:0x1 + Sleep Count:0x7801 + Sleep Last Entered At:0x2107bee006 + Sleep Last Exited At:0x2107bec414 + Sleep Accumulated Duration:0x20d6b8bad7 + + +**** RPM_MASTER_STATS **** + +**** CLK_ENABLED_LIST **** + +Enabled clocks: + video_cc_xo_clk:1:1 [0] + npu_cc_xo_clk:1:1 [0] + disp_cc_xo_clk:1:1 [0] + cam_cc_gdsc_clk:1:1 [0] + gpu_cc_ahb_clk:1:1 [0] + gpll0_out_even:1:1 [300000000] -> gpll0:2:2 [600000000, 1] -> bi_tcxo:6:6 [19200000] + gpll0:2:2 [600000000, 1] -> bi_tcxo:6:6 [19200000] + gcc_video_xo_clk:1:1 [0] + gcc_video_ahb_clk:1:1 [0] + gcc_usb3_sec_clkref_clk:1:1 [0] + gcc_usb3_prim_phy_pipe_clk:1:1 [0] + gcc_usb3_prim_phy_com_aux_clk:1:1 [19200000] -> gcc_usb3_prim_phy_aux_clk_src:2:2 [19200000, 1] -> bi_tcxo:6:6 [19200000] + gcc_usb3_prim_phy_aux_clk_src:2:2 [19200000, 1] -> bi_tcxo:6:6 [19200000] + gcc_usb3_prim_phy_aux_clk:1:1 [19200000] -> gcc_usb3_prim_phy_aux_clk_src:2:2 [19200000, 1] -> bi_tcxo:6:6 [19200000] + gcc_usb3_prim_clkref_clk:1:1 [0] + gcc_usb30_prim_sleep_clk:1:1 [0] + gcc_usb30_prim_mock_utmi_clk_src:1:1 [19200000, 1] -> bi_tcxo:6:6 [19200000] + gcc_usb30_prim_mock_utmi_clk:1:1 [19200000] -> gcc_usb30_prim_mock_utmi_clk_src:1:1 [19200000, 1] -> bi_tcxo:6:6 [19200000] + gcc_usb30_prim_master_clk_src:3:3 [200 +000000, 5] -> gpll0:2:2 [600000000, 1] -> bi_tcxo:6:6 [19200000] + gcc_usb30_prim_master_clk:1:1 [200000000] -> gcc_usb30_prim_master_clk_src:3:3 [200000000, 5] -> gpll0:2:2 [600000000, 1] -> bi_tcxo:6:6 [19200000] + gcc_sys_noc_cpuss_ahb_clk:1:1 [19200000] -> gcc_cpuss_ahb_clk_src:2:2 [19200000, 1] -> bi_tcxo_ao:2:2 [19200000] + gcc_qupv3_wrap_2_s_ahb_clk:1:1 [0] + gcc_qupv3_wrap_2_m_ahb_clk:1:1 [0] + gcc_qupv3_wrap_1_s_ahb_clk:1:1 [0] + gcc_qupv3_wrap_1_m_ahb_clk:1:1 [0] + gcc_qupv3_wrap2_s3_clk_src:1:1 [102400000, 5] -> gpll0_out_even:1:1 [300000000] -> gpll0:2:2 [600000000, 1] -> bi_tcxo:6:6 [19200000] + gcc_qupv3_wrap2_s3_clk:1:1 [102400000] -> gcc_qupv3_wrap2_s3_clk_src:1:1 [102400000, 5] -> gpll0_out_even:1:1 [300000000] -> gpll0:2:2 [600000000, 1] -> bi_tcxo:6:6 [19200000] + gcc_qupv3_wrap1_s0_clk_src:1:1 [19200000, 1] -> bi_tcxo:6:6 [19200000] + gcc_qupv3_wrap1_s0_clk:1:1 [19200000] -> gcc_qupv3_wrap1_s0_clk_src:1:1 [19200000, 1] -> bi_tcxo:6:6 [19200000] + gcc_npu_cfg_ahb_clk:1:1 [0] + gcc_gpu_cfg_ahb_clk:1:1 [ +0] + gcc_disp_xo_clk:1:1 [0] + gcc_disp_ahb_clk:1:1 [0] + gcc_cpuss_gnoc_clk:1:1 [0] + gcc_cpuss_dvm_bus_clk:1:1 [0] + gcc_cpuss_ahb_clk_src:2:2 [19200000, 1] -> bi_tcxo_ao:2:2 [19200000] + gcc_cpuss_ahb_clk:1:1 [19200000] -> gcc_cpuss_ahb_clk_src:2:2 [19200000, 1] -> bi_tcxo_ao:2:2 [19200000] + gcc_cfg_noc_usb3_prim_axi_clk:1:1 [200000000] -> gcc_usb30_prim_master_clk_src:3:3 [200000000, 5] -> gpll0:2:2 [600000000, 1] -> bi_tcxo:6:6 [19200000] + gcc_camera_xo_clk:1:1 [0] + gcc_camera_ahb_clk:1:1 [0] + gcc_aggre_usb3_prim_axi_clk:1:1 [200000000] -> gcc_usb30_prim_master_clk_src:3:3 [200000000, 5] -> gpll0:2:2 [600000000, 1] -> bi_tcxo:6:6 [19200000] + bi_tcxo_ao:2:2 [19200000] + bi_tcxo:6:6 [19200000] + l3_clk:5:5 [806400000] -> bi_tcxo_ao:2:2 [19200000] + l3_gpu_vote_clk:1:1 [0] -> l3_clk:5:5 [806400000] -> bi_tcxo_ao:2:2 [19200000] + l3_misc_vote_clk:1:1 [300000000] -> l3_clk:5:5 [806400000] -> bi_tcxo_ao:2:2 [19200000] + l3_cluster2_vote_clk:1:1 [300000000] -> l3_clk:5:5 [806400000] -> bi_tcxo_ao:2:2 [19200000] + l3_cluste +r1_vote_clk:1:1 [806400000] -> l3_clk:5:5 [806400000] -> bi_tcxo_ao:2:2 [19200000] + l3_cluster0_vote_clk:1:1 [403200000] -> l3_clk:5:5 [806400000] -> bi_tcxo_ao:2:2 [19200000] +Enabled clock count: 49 + +**** CLK_ENABLED_LIST **** + +Total cpu time reads: 0 +Batched cpu time reads: 0 +Batching Duration (min): 122 +All UID cpu time reads since the later of device start or stats reset: 36 +UIDs removed since the later of device start or stats reset: 0 diff --git a/common/src/test/resources/sample_battery_info_android_13.txt b/common/src/test/resources/sample_battery_info_android_13.txt new file mode 100644 index 000000000..462e870c2 --- /dev/null +++ b/common/src/test/resources/sample_battery_info_android_13.txt @@ -0,0 +1,308 @@ +Statistics since last charge: + System starts: 0, currently on battery: true + Estimated battery capacity: 4855 mAh + Time on battery: 34s 867ms (100.0%) realtime, 34s 866ms (100.0%) uptime + Time on battery screen off: 0ms (0.0%) realtime, 0ms (0.0%) uptime + Time on battery screen doze: 0ms (0.0%) + Total run time: 34s 867ms realtime, 34s 866ms uptime + Discharge: 0 mAh + Screen off discharge: 0 mAh + Screen doze discharge: 0 mAh + Screen on discharge: 0 mAh + Device light doze discharge: 0 mAh + Device deep doze discharge: 0 mAh + Start clock time: 2023-02-22-15-22-10 + Screen on: 34s 867ms (100.0%) 0x, Interactive: 34s 867ms (100.0%) + Screen brightnesses: + dim 34s 867ms (100.0%) + Screen refresh rate: + SEAMLESS 34s 840ms + Connectivity changes: 1 + + Mobile active info + Mobile active time: 0ms + Mobile active 5G time: 34s 840ms + + CONNECTIVITY POWER SUMMARY START + Logging duration for connectivity statistics: 34s 867ms + Cellular Statistics: + Cellular kernel active time: 0ms (0.0%) + Cellular Sleep time: 13s 463ms (38.6%) + Cellular Idle time: 45ms (0.1%) + Cellular Rx time: 55ms (0.2%) + Cellular Tx time: + less than 0dBm: 0ms (0.0%) + 0dBm to 8dBm: 0ms (0.0%) + 8dBm to 15dBm: 0ms (0.0%) + 15dBm to 20dBm: 0ms (0.0%) + above 20dBm: 0ms (0.0%) + Active Cellular Radio Access Technology Breakdown: + (no activity) + Cellular data received: 0B + Cellular data sent: 0B + Cellular packets received: 0 + Cellular packets sent: 0 + Cellular Radio Access Technology: + oos 34s 867ms (100.0%) + Cellular Rx signal strength (RSRP): + great (greater than -98dBm): 14s 357ms (41.2%) + Wifi Statistics: + Wifi kernel active time: 14s 796ms (42.4%) + WiFi Scan time: 908ms (2.6%) + WiFi Sleep time: 30s 79ms (86.3%) + WiFi Idle time: 4s 742ms (13.6%) + WiFi Rx time: 24ms (0.1%) + WiFi Tx time: 25ms (0.1%) + WiFi Battery drain: 0.00478mAh + Wifi data received: 49.64KB + Wifi data sent: 21.80KB + Wifi packets received: 121 + Wifi packets sent: 123 + Wifi states: + disconn 20s 105ms (57.7%) + sta 14s 762ms (42.3%) + Wifi supplicant states: + completed 34s 867ms (100.0%) + Wifi Rx signal strength (RSSI): + good (-66.25dBm to -55dBm): 34s 867ms (100.0%) + GPS Statistics: + GPS signal quality (Top 4 Average CN0): + poor (less than 20 dBHz): 0ms (0.0%) + good (greater than 20 dBHz): 0ms (0.0%) + CONNECTIVITY POWER SUMMARY END + + Bluetooth total received: 0B, sent: 0B + Bluetooth scan time: 14s 161ms + Bluetooth Idle time: 5s 81ms (14.6%) + Bluetooth Rx time: 608ms (1.7%) + Bluetooth Tx time: 133ms (0.4%) + + Speaker Statistics: (no activity) + + Device battery use since last full charge + Amount discharged (lower bound): 0 + Amount discharged (upper bound): 0 + Amount discharged while screen on: 0 + Amount discharged permil while screen on: 0 + Amount discharged while screen off: 0 + Amount discharged permil while screen off: 0 + Amount discharged while screen doze: 0 + + Estimated power use (mAh): + Capacity: 4855, Rated: 4855, Typical: 5000, Computed drain: 0, actual drain: 0 + Global + screen: 1.65 apps: 1.65 duration: 34s 873ms + cpu: 4.01 apps: 4.01 + bluetooth: 0.00663 apps: 0 duration: 5s 822ms + video: 0.0552 apps: 0.0552 duration: 7s 96ms + system_services: 0.836 apps: 0.836 + mobile_radio: 0.0388 apps: 0 + sensors: 0.00734 apps: 0.00734 + wifi: 0.00478 apps: 0.000417 duration: 4s 785ms + idle: 0.381 apps: 0 duration: 34s 873ms + UID 1000: 1.00 fg: 0.000278 ( cpu=1.83 (26s 940ms) sensors=0.00733 (4m 21s 757ms) wifi=0.000278 (4ms) wifi:fg=0.000278 reattributed=-0.83617639 ) + UID u0a34: 0.353 fg: 0.188 ( cpu=0.198 (2s 647ms) cpu:fg=0.188 (503ms) system_services=0.156 sensors=0.00000484 (17s 436ms) ) + UID 2000: 0.306 ( cpu=0.306 (4s 773ms) ) + UID u0a231: 0.247 fg: 0.0194 ( cpu=0.0342 (322ms) cpu:fg=0.0194 (39ms) system_services=0.213 ) + UID 0: 0.237 ( cpu=0.237 (9s 593ms) ) + UID u0a205: 0.229 fg: 0.0318 fgs: 0.0370 ( cpu=0.0936 (1s 453ms) cpu:fg=0.0318 (111ms) cpu:fgs=0.0370 (105ms) system_services=0.135 ) + UID u0a130: 0.228 fg: 0.102 ( cpu=0.182 (1s 452ms) cpu:fg=0.102 (146ms) system_services=0.0459 ) + UID u0a397: 0.203 fg: 0.0902 fgs: 0.0340 cached: 0.00611 ( cpu=0.130 (1s 398ms) cpu:fg=0.0901 (124ms) cpu:fgs=0.0340 (133ms) cpu:cached=0.00611 video=0.0552 (7s 96ms) system_services=0.0171 wifi=0.000139 (2ms) wifi:fg=0.000139 ) + UID u0a396: 0.201 fg: 0.162 cached: 0.00480 ( cpu=0.166 (2s 445ms) cpu:fg=0.162 (366ms) cpu:cached=0.00480 system_services=0.0349 ) + UID u0a40396: 0.189 ( cpu=0.189 (2s 222ms) ) + UID u0a60: 0.0871 fg: 0.0354 ( cpu=0.0589 (774ms) cpu:fg=0.0354 (90ms) system_services=0.0282 ) + UID u0a96: 0.0850 bg: 0.00374 cached: 0.00785 ( cpu=0.0713 (1s 876ms) cpu:bg=0.00374 (1ms) cpu:cached=0.00785 (89ms) system_services=0.0138 ) + UID 1001: 0.0622 fg: 0.0576 ( cpu=0.0622 (836ms) cpu:fg=0.0576 (201ms) ) + UID u0a97: 0.0574 fg: 0.0207 ( cpu=0.0273 (416ms) cpu:fg=0.0207 (130ms) system_services=0.0301 ) + UID u0a100: 0.0460 cached: 0.0167 ( cpu=0.0228 (610ms) cpu:cached=0.0167 (83ms) system_services=0.0232 ) + UID 1036: 0.0387 ( cpu=0.0387 (1s 510ms) ) + UID 1046: 0.0370 ( cpu=0.0370 (961ms) ) + UID u0a42: 0.0339 fg: 0.0117 ( cpu=0.0177 (220ms) cpu:fg=0.0117 (34ms) system_services=0.0162 ) + UID 5012: 0.0336 fg: 0.0101 bg: 0.00299 ( cpu=0.0336 (443ms) cpu:fg=0.0101 (21ms) cpu:bg=0.00299 (22ms) ) + UID u0a167: 0.0329 bg: 0.0203 ( cpu=0.0244 (708ms) cpu:bg=0.0203 (130ms) system_services=0.00848 ) + UID u0a108: 0.0272 bg: 0.000392 cached: 0.00376 ( cpu=0.00415 (113ms) cpu:bg=0.000392 cpu:cached=0.00376 (27ms) system_services=0.0230 ) + UID u0a65: 0.0230 bg: 0.00737 cached: 0.00498 ( cpu=0.0159 (386ms) cpu:bg=0.00737 (4ms) cpu:cached=0.00498 (43ms) system_services=0.00715 ) + UID u0a40: 0.0228 fg: 0.0120 ( cpu=0.0128 (202ms) cpu:fg=0.0120 (33ms) system_services=0.00997 ) + UID u0a107: 0.0195 cached: 0.00894 ( cpu=0.00901 (270ms) cpu:cached=0.00894 (152ms) system_services=0.0104 ) + UID 1002: 0.0186 fg: 0.0156 bg: 0.00260 ( cpu=0.0186 (293ms) cpu:fg=0.0156 (44ms) cpu:bg=0.00260 (1ms) ) + UID u0a101: 0.0172 fg: 0.0123 ( cpu=0.0133 (177ms) cpu:fg=0.0123 (59ms) system_services=0.00393 ) + UID u0a55: 0.0172 bg: 0.0000783 cached: 0.00207 ( cpu=0.0110 (270ms) cpu:bg=0.0000783 cpu:cached=0.00207 (7ms) system_services=0.00620 ) + UID 1066: 0.0171 ( cpu=0.0171 (581ms) ) + UID 5025: 0.0153 fg: 0.0116 cached: 0.00363 ( cpu=0.0153 (272ms) cpu:fg=0.0116 (64ms) cpu:cached=0.00363 (44ms) ) + UID u0a190: 0.0148 bg: 0.00517 cached: 0.00556 ( cpu=0.0107 (216ms) cpu:bg=0.00517 (2ms) cpu:cached=0.00556 (44ms) system_services=0.00408 ) + UID u0a225: 0.0133 fg: 0.00687 ( cpu=0.00783 (188ms) cpu:fg=0.00687 (47ms) system_services=0.00542 ) + UID u0a37: 0.0106 bg: 0.00242 cached: 0.0000897 ( cpu=0.00356 (57ms) cpu:bg=0.00242 cpu:cached=0.0000897 (5ms) system_services=0.00707 ) + UID u0a51: 0.0103 bg: 0.00505 ( cpu=0.00547 (98ms) cpu:bg=0.00505 (20ms) system_services=0.00487 ) + UID u0a198: 0.00938 fg: 0.00467 cached: 0.00164 ( cpu=0.00631 (70ms) cpu:fg=0.00467 (11ms) cpu:cached=0.00164 system_services=0.00306 ) + UID 1041: 0.00824 ( cpu=0.00824 (176ms) ) + UID 1047: 0.00820 ( cpu=0.00820 (181ms) ) + UID u0a232: 0.00815 bg: 0.00313 cached: 0.00297 ( cpu=0.00611 (171ms) cpu:bg=0.00313 (1ms) cpu:cached=0.00297 (37ms) system_services=0.00204 ) + UID u0a70: 0.00796 fg: 0.000457 cached: 0.0000325 ( cpu=0.00757 (123ms) cpu:fg=0.000457 cpu:cached=0.0000325 system_services=0.000393 ) + UID u0a226: 0.00687 fg: 0.00301 ( cpu=0.00388 (46ms) cpu:fg=0.00301 (8ms) system_services=0.00298 ) + UID 5026: 0.00673 fg: 0.00506 bg: 0.000968 cached: 0.000663 ( cpu=0.00673 (133ms) cpu:fg=0.00506 (26ms) cpu:bg=0.000968 cpu:cached=0.000663 (20ms) ) + UID 1010: 0.00654 ( cpu=0.00654 (258ms) ) + UID u0a94: 0.00651 cached: 0.00171 ( cpu=0.00227 (72ms) cpu:cached=0.00171 (9ms) system_services=0.00424 ) + UID 1069: 0.00642 ( cpu=0.00642 (218ms) ) + UID u0a90: 0.00554 bg: 0.00170 ( cpu=0.00185 (70ms) cpu:bg=0.00170 (23ms) system_services=0.00369 ) + UID u0a81: 0.00449 bg: 0.00194 ( cpu=0.00198 (80ms) cpu:bg=0.00194 (32ms) system_services=0.00251 ) + UID u0a99: 0.00415 fg: 0.000786 bg: 0.000509 cached: 0.00160 ( cpu=0.00290 (64ms) cpu:fg=0.000786 (2ms) cpu:bg=0.000509 cpu:cached=0.00160 (16ms) system_services=0.00126 ) + UID 1027: 0.00401 fg: 0.00237 ( cpu=0.00401 (44ms) cpu:fg=0.00237 (4ms) ) + UID u0a46: 0.00316 fg: 0.00112 ( cpu=0.00150 (35ms) cpu:fg=0.00112 (6ms) system_services=0.00166 ) + UID u0a53: 0.00313 bg: 0.00191 ( cpu=0.00218 (106ms) cpu:bg=0.00191 (47ms) system_services=0.000942 ) + UID 1073: 0.00298 fg: 0.00288 ( cpu=0.00298 (58ms) cpu:fg=0.00288 (10ms) ) + UID 9999: 0.00269 ( cpu=0.00269 (52ms) ) + UID 1083: 0.00256 fg: 0.00241 ( cpu=0.00256 (30ms) cpu:fg=0.00241 (5ms) ) + UID 5009: 0.00247 bg: 0.0000392 cached: 0.00240 ( cpu=0.00247 (72ms) cpu:bg=0.0000392 cpu:cached=0.00240 (19ms) ) + UID 5013: 0.00244 fg: 0.00156 ( cpu=0.00244 (47ms) cpu:fg=0.00156 (10ms) ) + UID u0a214: 0.00243 fg: 0.000913 cached: 0.000343 ( cpu=0.00126 (10ms) cpu:fg=0.000913 cpu:cached=0.000343 (1ms) system_services=0.00118 ) + UID u0a103: 0.00237 cached: 0.000723 ( cpu=0.000723 (23ms) cpu:cached=0.000723 (7ms) system_services=0.00165 ) + UID u0a49: 0.00192 fg: 0.000537 cached: 0.000361 ( cpu=0.000980 (25ms) cpu:fg=0.000537 (2ms) cpu:cached=0.000361 (8ms) system_services=0.000942 ) + UID u0a187: 0.00169 bg: 0.000588 cached: 0.0000392 ( cpu=0.000826 (22ms) cpu:bg=0.000588 cpu:cached=0.0000392 (2ms) system_services=0.000864 ) + UID u0a87: 0.00163 fg: 0.000849 cached: 0.0000733 ( cpu=0.00124 (52ms) cpu:fg=0.000849 (9ms) cpu:cached=0.0000733 (7ms) system_services=0.000393 ) + UID u0a373: 0.00160 fgs: 0.000498 ( cpu=0.000733 (25ms) cpu:fgs=0.000498 (3ms) system_services=0.000864 ) + UID 5004: 0.00101 bg: 0.0000489 cached: 0.000825 ( cpu=0.00101 (43ms) cpu:bg=0.0000489 cpu:cached=0.000825 (26ms) ) + UID 1013: 0.000983 ( cpu=0.000983 (15ms) ) + UID u0a217: 0.000940 fg: 0.000592 ( cpu=0.000783 (17ms) cpu:fg=0.000592 (2ms) system_services=0.000157 ) + UID 1053: 0.000913 ( cpu=0.000913 (5ms) ) + UID u0a98: 0.000865 fg: 0.000272 cached: 0.000241 ( cpu=0.000629 (27ms) cpu:fg=0.000272 (1ms) cpu:cached=0.000241 (8ms) system_services=0.000235 ) + UID u0i59: 0.000864 ( system_services=0.000864 ) + UID u0a163: 0.000825 bg: 0.000124 cached: 0.0000506 ( cpu=0.000275 (5ms) cpu:bg=0.000124 cpu:cached=0.0000506 system_services=0.000550 ) + UID 5006: 0.000809 bg: 0.000809 ( cpu=0.000809 (9ms) cpu:bg=0.000809 (2ms) ) + UID u0a252: 0.000659 cached: 0.000345 ( cpu=0.000423 (12ms) cpu:cached=0.000345 (2ms) system_services=0.000235 ) + UID 1021: 0.000633 ( cpu=0.000633 (18ms) ) + UID u0a39: 0.000592 bg: 0.000160 cached: 0.0000392 ( cpu=0.000199 (6ms) cpu:bg=0.000160 (2ms) cpu:cached=0.0000392 system_services=0.000393 ) + UID 5555: 0.000355 ( cpu=0.000355 (13ms) ) + UID u0a182: 0.000320 cached: 0.000141 ( cpu=0.000163 (5ms) cpu:cached=0.000141 (1ms) system_services=0.000157 ) + UID u0a248: 0.000267 cached: 0.0000531 ( cpu=0.000110 (4ms) cpu:cached=0.0000531 system_services=0.000157 ) + UID 1017: 0.000254 ( cpu=0.000254 (5ms) ) + UID u0a77: 0.000246 cached: 0.0000897 ( cpu=0.0000897 (1ms) cpu:cached=0.0000897 system_services=0.000157 ) + UID u0a125: 0.000235 bg: 0.0000392 ( cpu=0.0000783 (2ms) cpu:bg=0.0000392 system_services=0.000157 ) + UID u0a89: 0.000232 cached: 0.0000531 ( cpu=0.0000753 (2ms) cpu:cached=0.0000531 (1ms) system_services=0.000157 ) + UID u0a52: 0.000196 bg: 0.0000392 ( cpu=0.0000392 (1ms) cpu:bg=0.0000392 (1ms) system_services=0.000157 ) + UID u0a179: 0.000196 cached: 0.0000392 ( cpu=0.0000392 (2ms) cpu:cached=0.0000392 system_services=0.000157 ) + UID u0a201: 0.000196 ( cpu=0.0000392 (1ms) cpu:fg=0 (1ms) system_services=0.000157 ) + UID 2903: 0.000166 ( cpu=0.000166 (12ms) ) + UID u0a106: 0.000157 ( cpu=0 (1ms) cpu:fg=0 (1ms) system_services=0.000157 ) + UID u0a218: 0.000157 ( cpu=0 (1ms) system_services=0.000157 ) + UID u0ai9000: 0.000157 ( system_services=0.000157 ) + UID 1068: 0.000153 fg: 0.000114 ( cpu=0.000153 (1ms) cpu:fg=0.000114 ) + UID 1072: 0.0000392 ( cpu=0.0000392 ) + + All screen wake reasons: + 1000:android.server:DOCK: 2 times + 1000:android.server.power:PLUGGED:true: 0 times + 1000:android.policy:POWER: 55 times + 1000:android.policy:KEY: 41 times + + CPU freqs: 307200 403200 518400 614400 729600 844800 960000 1075200 1171200 1267200 1363200 1478400 1574400 1689600 1785600 633600 768000 883200 998400 1113600 1209600 1324800 1440000 1555200 1651200 1766400 1881600 1996800 2112000 2227200 2342400 2419200 2496000 806400 940800 1056000 1171200 1286400 1401600 1497600 1612800 1728000 1843200 1958400 2054400 2169600 2284800 2400000 2515200 2630400 2726400 2822400 2841600 2995200 + + 1000: + Wi-Fi network: 37.27KB received, 14.79KB sent (packets 93 received, 91 sent) + WiFi Scan time: 0ms (0.0%) + WiFi Sleep time: 34s 907ms (100.0%) + WiFi Idle time: 0ms (0.0%) + WiFi Rx time: 2ms (0.0%) + WiFi Tx time: 2ms (0.0%) + Bluetooth Duty Scan (total actual realtime with duty): 706ms + Bluetooth Scan (total blamed realtime): 4s 710ms (0 times) + Bluetooth Scan (total actual realtime): 14s 122ms (0 times) + Bluetooth Scan (background realtime): 14s 122ms (0 times) + Bluetooth Scan Results: 0 (0 in background) + User activity: 17 other, 26 button, 17 touch + Wake lock *alarm* realtime + Wake lock prevent full-screen wakelock in EnqueueNotificationRunnable realtime + Wake lock NetworkStats realtime + Wake lock *job*/com.samsung.android.mdecservice/.push.RefreshPushTokenScheduler realtime + Wake lock *telephony-radio* realtime + Wake lock GnssVisibilityControl realtime + Wake lock ConnectivityService realtime + Job com.samsung.android.mdecservice/.push.RefreshPushTokenScheduler: 20ms realtime (1 times), 20ms background (1 times) + Job Completions com.samsung.android.mdecservice/.push.RefreshPushTokenScheduler: unknown:-1(1x) + Sensor 172: 34s 867ms realtime (0 times), 34s 867ms background (0 times) + Sensor 271: 17s 434ms blamed realtime, 34s 867ms realtime (0 times), 34s 867ms background (0 times) + Sensor 1501: 34s 867ms realtime (0 times), 34s 867ms background (0 times) + Sensor 1511: 210ms realtime (3 times), 210ms background (3 times) + Sensor 1692: 34s 867ms realtime (0 times), 34s 867ms background (0 times) + Sensor 1782: 34s 867ms realtime (0 times), 34s 867ms background (0 times) + Sensor 2032: 34s 867ms realtime (0 times), 34s 867ms background (0 times) + Sensor 2072: 34s 867ms realtime (0 times), 34s 867ms background (0 times) + Sensor 16777238: 34s 867ms realtime (0 times), 34s 867ms background (0 times) + Total cpu time: u=15s 911ms s=11s 28ms + Total cpu time per freq: 0 0 0 3061 189 587 193 1274 311 199 570 143 134 208 6730 380 76 45 57 40 38 51 45 301 232 224 184 530 258 160 217 121 9359 26 5 2 5 0 25 2 39 40 6 57 8 65 34 5 16 21 21 14 0 828 + Proc com.samsung.android.mdecservice: + CPU: 0ms usr + 0ms krn ; 0ms fg + 1 starts + Proc com.samsung.hongbaoassistant: + CPU: 0ms usr + 0ms krn ; 0ms fg + 1 starts + Apk com.samsung.android.sm_cn: + Service com.samsung.android.sm.battery.service.AnomalyNotificationService: + Created for: 0ms uptime + Starts: 1, launches: 1 + Service com.samsung.android.sm.security.model.trigger.SecurityBridgeServiceInBg: + Created for: 0ms uptime + Starts: 4, launches: 4 + Apk com.samsung.android.bbc.bbcagent: + Service com.samsung.android.bbc.bbcagent.bbccontroller.service.DDCService: + Created for: 0ms uptime + Starts: 1, launches: 1 + Apk com.samsung.android.dqagent: + Service com.samsung.android.dqagent.receiver.DQADataService: + Created for: 0ms uptime + Starts: 2, launches: 2 + Apk com.sec.android.diagmonagent: + Service com.sec.android.diagmonagent.sa.receiver.CFLogIntentService: + Created for: 0ms uptime + Starts: 1, launches: 1 + Apk com.android.keychain: + Service com.android.keychain.KeyChainService: + Created for: 0ms uptime + Starts: 2, launches: 3 + Apk com.samsung.android.mdecservice: + Service com.samsung.android.mdecservice.push.RefreshPushTokenScheduler: + Created for: 0ms uptime + Starts: 0, launches: 1 + Apk com.samsung.hongbaoassistant: + Service com.samsung.hongbaoassistant.RedPacketTile: + Created for: 0ms uptime + Starts: 0, launches: 1 + Apk android: + Wakeup alarm *walarm*:WriteBufferAlarm: 0 times + Wakeup alarm *walarm*:com.samsung.android.server.action_check_gms_network: 0 times + Apk com.samsung.android.provider.filterprovider: + Service com.samsung.android.provider.filterprovider.FilterPackageService: + Created for: 0ms uptime + Starts: 2, launches: 2 + u0a125: + Background for: 34s 867ms + Total running: 34s 867ms + Total cpu time: u=0ms s=2ms + Total cpu time per freq: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + Cpu times per freq at state Background: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +Per process state tracking available: true +Total cpu time reads: 28382 +Batching Duration (min): 25859 +All UID cpu time reads since the later of device start or stats reset: 56 +UIDs removed since the later of device start or stats reset: 0 +Currently mapped isolated uids: + 1037->1000 (ref count = 1) + 99000->10060 (ref count = 1) + 99059->10396 (ref count = 1) + +BatteryStats constants: + track_cpu_active_cluster_time=true + kernel_uid_readers_throttle_time=1000 + external_stats_collection_rate_limit_ms=600000 + battery_level_collection_delay_ms=300000 + procstate_change_collection_delay_ms=60000 + max_history_files=32 + max_history_buffer_kb=128 + battery_charged_delay_ms=900000 + +On battery measured charge stats (microcoulombs) + Not supported on this device. + +Companion Device Baterry Infos: + [ 000000_0, 2, 100, -1, -1, -1, 5 ] + diff --git a/docs/images/UML/espresso_performance_test_design.png b/docs/images/UML/espresso_performance_test_design.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b5274f1bab0544ca9af663832c71d530a6b2c7 GIT binary patch literal 12329 zcmd^lc|6qZ`|p$|70FVPWD5yN$iAl%LRlNkXt9rV?CWSlBwO~ah3q57Hr66E_9ezL z$TqUe7&~)r>HB=2-|w9BeVy~)dA&~mRG+y&_vgCrYkR-1>w0-tTaAw991R2lp;Nzo zLl*)$91VdS;y-p6Jn?Qa(+7VExZb?)`q zM8wJNp@XZNz1@|^j`oaKWzK^g?%3$xcm3CM$RV(eXR=>}mQI~AL*P= zu11Cn43C8e@BYx}bGMeXu}a#_5*+;?TGccu*NLdGw%Xd z;Y&>^Hy?W(IR|C3^5T2-q~WDz$9=(K6}q(KC#d|WBiD?lQoX;d-(X6Fr(s0eudGvl zd3adIJkMPsirG-m_?>f%!r|on>gHxfuZ=y1ziK&}2EEo^9={l;MPW|(oc3PI_Ue+k z*!TR_NQ{8)*ir+lrjUv|=FZ!j_VS18bDbFAW^_IYJi$j)JdciXog2ROLA13vg z;ktg?;EkGcmU6K7i>#P|CeVxtxsy9s;+?h>U0pFe zzZn_rbaDE;XKf!8>a#YVFkofbzL%`tp1`{!0)Yf`9(O+i{(8tO1%do}K1mJXN{t{u zAYV^Ku|WbnuOq1-3_2I032agh$x@CZzQvtSkItSGEU}0f# zEFbyf^OFqCxWVny5C}cv?Zp?gEQ8L^Vf1z+LnH&M_GeW&$R? zXk&e;#*{qDHktV*0yzTPeal$G z$A{VK1UM5zjdGO9qm5~)QCBjZk}&0MT|!@<>fmin8&qSU)Ni@CaJxyY>zZe4x4IDR z$?ksOHxW(foQ&%4Pux_*QZ|T5&jL@tOG-9#?Md7V76Q;d(_Yr6;P#%2)a{=tUQQ5C zaU6ovLp5UQe)bTPq#R3gA5s6_{&{re$B!4SzB0G#!$}Vf_9kB{_^i)H5XRoODvHOo za`-O<@2M8$TNdTzeK}Tg_bD4jC0^F`=i3%yPE=G>cTdk!`NZq3E$qucE;V9p(O(r8uC})=h zLdkn~e7+_j&JrqY0fjz;C*fGj`1ts4-nmxn|E@&BnBQ~u5)kf>-U;6S*-28%pJrv(~9_CZV;x{mP|FogN;dEK+eyEAWTJ)&%6hf}M@F zhDzD-%#mClT}9+%umk75%7qz$>RiZYr$@1sWO<$O*Gz>Ua=b6{FNK6|ua_7%7Zp+SeE0uxqUs6N z(Z1eZXv{~gBuOkW7pmyH;RJ`nq0odm!r-7WULrmkPKFP=C^G(bzhnF!T3T((X|F!5 zY{V=SRQLQFKwN9|HkpSZ1|q05>lINhEi)F$gbe->%d3oPx{tFzofCw57i7B64E z^xIzZn~E_?)Uqz{E?AT))BfXbXL@^kRSV7zhHS^S=+4gJtdMg$HPwf!}nAȝQiX&sYQz;#E5M|6^^~Jk-o-Got z?aVTv@cZ+35W67SHSUa)S@(_axk%QeVNPzYS~!OS^82?07t8$nlyS}xGhrKHrHsoG zx*{$et+n<^|BADBdotS)wzf31v;|mV;+JPfGcz+=bObcRzWew^?Y!Dg26Zf+$Pdup zZo})b8o3{HBma9`H;?j}YK|dw31(zu{9YNU?yxP$B&_n!=+B8`_xq3A{Jj9YUDGja z>zl>~>AdiNwH3>gNqFI-hLLKY1?lUa=h)a-gpJLA=b{^2*xK#I%BN4C-aolykZU+# zP&hW^SPQH5-zBysE%+T|wz7@A?IleOjWbQ@o1|$or!PlVdQusw&Ro8K_ujpSOIi>} z)y<38#{-EH2oRR1G8L#G0n)Bp{2u=PdkX6W9;F3VkV)V5$YX&51`Et;8yjzJ3Rw6^ zf>cYqrnAUm=KBkLA@1qUn<9n%bnBAHzuw`$h6!Vn(opf&7)S+5u98WK-fj`8JumI_ zW0bPzA@Exx!^a>2-CMU=_i^h{2-jY6 zDGp|26c-&$3PJ9Z11QK zZB6W>f~nOz4r$?$CY;h>vzp{U+ybT7o}@Vf&X&@16`NEIOROn82Z139$A zXn7K%OpqCl+IB>3n_wts?(9;D+SqhJAY8;02i$HWo8xm*L3u`4aWMjX%`4Lcsgrok zrY%vzJ^vXnZ+Bq`M0BZGWAW}K*Dps{(u34~=Wp=6(jGx<^=<7T1MqMDe;^cK!I1Ie zAiXNfbAtdG%nwZKe+y^+A731pd5T|qXVIh9JZ=O&nTJBv&V+bp{Wf+;+HuA8!acq0MwTwGXqh=bxqRld=6ZiysS( zMwfe5=mnE)>=n}6B&6UzE%}?zrHq4s=vaQKvLC@vdoQ1mO@4kL(Q)ixY`;JG13p=1 zVJjjQzw0}n2gS6KArEaala^mqTaoOf;pik2r>}XXRSFF|(a}CrgK?-|t-X%|huPlO zpQ0Z&i)D;++M<#e=?hzBh|z>!{DSq+2DTVgwMl6`ueKnA&1n9$`QcnuWKgKscB`qF z&qfK)7Co*saq4wzes*>jLeuHPbR*X=&V6CfZT7p(_}7=)YYP~*P2&SNSpMYM6kQ+ZG-0G+Zk6U$2D7}qjvu?bhafB$|KK9*rf zX2INj?q_*RTUuIllBFMZ1RG@Tz0rZ`YrApvNt+$ZS9fsu!U${s zaF&5|t=#szfu>+czI>|ZsECEHQYJ|T6GCIObbp(W)DhlRJ0gLlU~C(7P+NM{l4+BM z_>VXoPBrLcFN!^GO-E^W)oVJ%V-Y(&;B4Zu493j(0wUQD;5xVQ@tE9fM9RBMvFR}s3Sqa&^v+?4)BkWNBELQZlj zRymH=Sf%+HHY?7#=I?VWK&(zmd5yp1cc@&DG;nk)uc?7QRg0;Xv?aHhKI<^dyXk

2Eo_ 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 literal 0 HcmV?d00001 diff --git a/docs/images/UML/gradle_plugin_yaml_config_design.png b/docs/images/UML/gradle_plugin_yaml_config_design.png index 2f687e59c752d58d7575467e0dcae03a7df7f92d..c1dd965c420e6d1150411af450d1d1cfa7d172d2 100644 GIT binary patch delta 881 zcmV-%1CIRinFr>X2as8RP-#?HbZ~58Zgh2RYybfO004NL#a6+Rn>Y}?Q#JpfV{$NM zlT2#EDGV?Zytbi?JgJ;04YWZSkcbeD{r8a!7~9EIlHICZpRCv2ub;ZxEq`bv5%NH) z^2R6*nIH@Dbf_z!4yY}*%y1hVYGK1gX5IzTDS`*j?d7RN*MK+jXs-cNt)(N z(^jaj-?(`0>N(%60{r$=XiO^zTNy*jS=QKSHl0p89?p6`QUq+v2gMV#Ra4)$()`kJHmKA1OKFmMJdAJW*!9B= zm&*|^Imre*`h1RhRBdK2SZgkAQ-nDDQP0!=rswW|q({ARbW2i+Np7DGiB6H|u}mb% zFMb!!<(7Dc!^}oIQnoO=K&>9NIu!PG$pz6b%vp3r_OXQ8xPaUM;_bP89iYoeHM zj1THv?OtOeDhZRDLW6oa1Ekkp{ko6u}Q~UNW`}Q4jV~n) delta 913 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 aMfPRv7eyz-mL2l{Z%Qj&&$?##;Qs)g6(msr literal 0 HcmV?d00001 diff --git a/docs/images/UML/performance_test_inspection_entrypoints.png b/docs/images/UML/performance_test_inspection_entrypoints.png new file mode 100644 index 0000000000000000000000000000000000000000..10362a731975a379faec3a3fe3ff948c4038b514 GIT binary patch literal 23505 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 literal 0 HcmV?d00001 diff --git a/docs/images/UML/taps_to_cases_json_with_performance_test_actions.png b/docs/images/UML/taps_to_cases_json_with_performance_test_actions.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1bda302694ee1d8f1e46f76717da94cb14543f GIT binary patch literal 39671 zcmb@u1yq&o)-}9AK&1siI-~_by1S%XKtMXBq)STal8_RRkWvH$qy>})X#|n(k`@UO z{9-!Z=NkMZyEj7QyU?)$!Ctu@!2^V$*Ws`5CPWS9s90!QJlj3xqshJrw# zh+IL1cf>@+U%($MZnAoA=1$Ju_Lf#|2zg6KOBYi&OA8t^ZyFmnH)kOZ4rhB)M>lr| zdv@`h8nK4JUV2jQdK$nY?G;`X-0r6xV5 zPoI65bfexSe8(y03%l);t0t~=L6)TWT$H^ADEERT2#BMHNe8iMTN%`@MZW!(Hm{{& zVNeJEx2opQ_)0*h=Ud}pX+G>}bd7XIKfB&Dcenh|ydg5_vH^SWqHl<5Z-|E8U{9Qa zPdbPCGw)lWnGzcgq4%74Z1_5Un`-W~xB9cH*7rFE9Mjq!mY&8X-hcN&Nb6P1M6sbZ zvB;OH0>W9AE* zRl8QyP7Hc##x7rk9;O`b)t(UU%zLl2mer{V1(cp_im`ZmG)lzR9lcuez7a6*TPYcE zAUUz~?reCM1LwlJmScg#$_UKJ)FmTV)vn%By; z7#tn=nmn5T6@$gAyCn%W0OM(NLb1R-QU?`)~qY!L!FMeK(Zt-2o z;cjC;!Ct{Cy4RRqq#Jyr-fLZ2@|wShk)Qm2i4#$t z$f%ND^>CaW@&c0?LR>O4tRCN;{=E}&G%aHImk^U(pFh9yKA5U={bFl$g2oxxoXswC z`DK0Lw^rmuObFr09lp;tzbtTk!S8f$)oq!u4RIb^k5B2hp=yVB2|g330#j1`&U%2# zKki=U$a6LPOUF@hh8z}Jo|?XY=F%P&9t9_lq-9=8gNsq$zw?!83Wu@d*YcbamRq;d zxhxew_#D30EfaH|YpJvzs1W1ea2hSrc=zrdCnqPK_?feZN424%L0o(mUQ)2*y)UnI zMuvx@F>lockB(}GRW;Yu)pd7wS8>G0$4iG|pKLemd_Ih>o>=YABp2~=c5~y|I=_S` z^6dHZcAvb~_P-0*h+~E@A(!I}yeh(}^FAm@qt%9Ls?1oN!E>h3+jX@+pEN*KwSTEQ z(f4S(?=*stssE+;%OA4=7r(#0GpF|3mDG@_p`!aRrkri@*0@gqzF*uRaJm-L1 ziaU`gNfGD4=vW)|dbQ3u2}J57yd_$Ns$sa4nl3MRY+bge1e0waC>_`*FD@=}7}eAN z(9qCe6UN!#9Ddk`_KhulP515n=avVCx#i{Mx@8Y8<54BuZgAg}BTMEmtfg65lk+K* ztXvlu{QlB1eNSFSrrh4GmZS~&1c5b@*a-VpMeJwE$sG!52`fRt8m-6q)_GGf66Fkm zy`alf>f9OqB_$=WS)*QQh}QeOO_ShPV(xQ|upKGrd%>@!F;=X#y3iiQX8gg2myd7E zaEHgnV<1Zu*7||Ey7O|+b0XGz>YDxTWEAZGebd4B4|Nmdqe&#Sy5*@KYxiUFd?qh= z(L2y1FE1Z(x?X6PHB#rcKFp$3z^pj!lR+j*%}gq&#HIawrB2x6d+lavL#c5yJ8Q&i zoj1fpMDLXA76LBOeUO-#N-_4=&y&M(be5568_JVkHq2`c`LiW=`H&l1F9IbuH}|fX z|5@z_uVhjsD$YSD=`t}faV#l!fx~2VNTXO?UB#mi*!`TwU6H`~A2&TZYQFeA z>D2s|IZeoYBYgE33lno=?CrzS8_X}F!o%?gaF>^sAZ(=jEvv$?{$pR26I^oJnaNy| ze1b6)y&Er275`_TEOj_!JObYP^u7A}`uhZF@CrC?rEWT2z{-i|{01ZDa^0}h_hU-M zYeJnIv|SMBTfaYBDIZ6*;uBO9RIFQ;^^AoCe+Ms>f*q0zyjp%CGl3}s#@8y_M4tJx zizFVr>#&kbVh5kO37J%1*>2}6rDXY^u9I?GmHYqtxn~1>MDm`d7yCbjo5~e8%@^<#U?Y<5QSWx|=s|3JMDH^N$;HJY#)C9B?xx zC72;7p@d(^5c}`IC;trm`lTeTq;SBtE;QGH}UT$gN)q2>8P1NnS$5fC?jb{h(rXO zET@>m%gpS7_c9Sf)Us34NrBUB6Ys+@Y&^W3ukRMOryD|ot{FN{*So(ps44iG4aIPC zyiE7j#cnH}ZG))K5B&7@s2iP~owNSGw!-kJsf0b)9AcNYCTpUCb8B;Hn@%_0EG=2w zq9P+xd@)&WdTF!!`2F~UU+o2|SWYO&cdnf@Of$-^g9z4EzikaG5Q+!EOEKWR=|) z#hMaqQu~?4I?a4VDe3)A>VT5zZPBBtyti*RjY@|@Fve99ZFNbMMWg5W1QYyc zf)~LMKxWuOHk@vFl!VHsmOehGZ4rb9@9h{iiO3m9uU(Vu-f8;Pzn(6dNI^(QXFw(D zqfJt|GMujz5)#6urRTEsjW;6 zh7IcTQN?3_f3aTGaV6YQ>|}*2SXhKsY$RX)=Q1K@f3A>Zdu)AkA?}U3!NGXa&Gb^l zc`mRd#nPcdE`}_2fn=^Lo(@-Kd0*Rr{UJS86`9#Yg(akW$m`SZAC3biSR%9Fj!#1aN^tElKwn}wch=uf-`U}lA_U2}+}8})5ycuWk@z!HU+pI+&_H66=D zu~s2Km3L?G=p++0564ygiSPR3M*c4g@NA;q{Y^&uK1aZblBs&7mCEVzgvamGLw!M$ z7DWD)y?)`Ha7`H~(cY4@Z}W3G6VUJD#6Nph?y}r-c6O#F{#)C-Q3e=3e^G3IT9NG-OQUE{%TZ~M^Yqw_B{|)cRTP9`z zHt_O70&Tv}<_KBRyOC%*B$!lTzXwPupQK&f}A2gRG2E*u3l1TG}lv%f&o%mnpWI81yd zvG?=m?~okfQi9hZ?joY2ElxsiJW%i4+K*^gxLTeW7tDZhr6QoCF|xh)w#_Mw{g|>1 zf$|YD0j1*yfxAD=J7e9C7e(vH`5n*J)dF%Sny*|!Vy5xvuv_aBm4$cr8DIHP#%y^t z_?yU_q^}O~)TrSpzH2ZirYYNJfepi3L<7D+#6h{*zz2oxoJ6Sl0l_k(o17IK}@Ftloiu8o2r`ysCY4;yA)Ma9KKcA+Su5t}B{W@O{anNm%-Ihy!O;-}W*xy)wlqGM9kp1-hmQF6~ z!jL?5UsqSHrJwBXcI8J0a#DLM7^bI96giRzmt*QBhIIYd5>x zu-?tq&(H7e{r8Z0-48c(>aNJHyAh38D#9C2OG7dzXPuCMU1f)M`Zv7U8u@P9(k6jnvgnp*kNGSFKnpao7kg*zk^{4eFeMZmhtkbF;zdxMo?zhE zln&JKL=@i5mI*SbVN_0)AphOx!b)1hbnZj5d=sLmz7gy-9}Ebs4=HEKgg-zO4(!0O&&W}f2> z!N4YI(HGIcPgc|%Di`rP-kqA7GHneNe8m#a#B6|;)f%AJt$wsvvOZE+8H%<&09e7K z5Bj0HC-L}m>F8L*gB0n{gVVUJlSQzFey6cB*Gt@07B^QyE z;Pl~etlDAnuFbcqV#B5RFzWuE9@uW~wOO-^C7K-4Le~IZ7pi97>>GP)pm4Bhe38Bc zKrX>ny5jH3I_ot|^(<{d(n<{^X}KU#$$V?h#eTj>eUUBrd-nV%zv_(V>|>ob_Z%iF z^1YnbeyooKT>P31U^gM%QhFvQ%;mClH*E9V4DMkg=C-#WJJ#9Ow!0*Of8$1{e#UiP z?NY?#;N~#iv*?+N&;e{rXeD;VD(_&qANLs%|_8 zWzyYDI=3pUIc2Tc_%Izhc~{%bp2tS>#EGXd-sT!0lU|Tu;WsR)I!ui z#+mrw3yqb!diF0#V-C|Mx;E>VkL56U6c#L?46xMs9NIb9OS`g!ZQfq}{@q@2|MqYv zmGAenlY{FWBKuu*NsW*$CsOhH0bVgjQPaea6SUHfdSqpuI{YnYwMXY>$gswtEJot@SA+cATMK(5s7jx9h zw8WP*-Qp?*G786$QE2if3K=m!Basx9WEw&RJFqkuc&bj zlC3UE&neoS;A3hNXlg35YL8}o1>Zn`mdwj18vCs0Cxl*nT#9LhcE=@|NuWeUF>ouX z(>v?uP_03SF4~c1@-kM2Q};`;$LT-d0)#%e5tPJcfpC?$L~QS?kY0G|umxEZMGr@{ zaMwl67fx1RGW9{-xE*cTW?5vlW|V{bFvY<8J2?V@pGt$VD=tTfeiKLrQekplyEgs( zPBc^tL!SF{%ye{53ibgzA?v}fqtz6wH0VFg@^L;5+EI^vYr1Fl1m`Q1<=^xYq=@BpK{xPu|njdse>k}edmFDDJoi? z(hFa$AA9U}k0( zibu`fG;jH!ZH-I&vw$IVFwX{`DW^m6y81VYsx@?c(89|uAp&U-koGy#nFWmS<{~c# zk-W1AQx1%d$_iL(5k2lIx*xYEm)U|j8baX_u=9z7M7CWrq8nK_n7;&GO+Us*AkJ`+ zVMuTZpY>kJoX#VPQhD^HIFzfX^cXaNq85H$j+^f2!EVKA)L>#J+7KBH@!Oq#NIh3p z^pzvk5Mm%$6DKu00uKezvV)xM6;6aC22il4BQMY07TT`z4#>{6AAilLWg zS{uZ_fwrPvlheQG{1{Dl%V3!h)9PD|(@t;iN8^88GNW``@-nx;f;2SL!r>@qYQ>xq z#b~P764BJ+S!9W+sRB+jjR33yv>oRYQT;Bt6K&iXbyzFcx}oW-Q`gR+@yPqtC<)E+ zp9^pxFYv4#QDbp&<|# z!H{#k&KGC`{CNjw5{3VR-TsJ*&IbUK<=S>2m(=Aue{TV3?ksMV0~Z+6*`T8(#1(sd zq6QWG&M+W40Yamp0hV**D3s0@a$5_8pCey^vdAAeHUnl`?1*ul6BYdPwh1Y~IY|wT zp}`z!N=xrY&+JzQUd}c>_Psol_=ojDSfX$Sil3|(z8oGIxr|Ms4&@Ef1pfnyHeZ)N zm&h)GrNAR4C2bAGd81!x<>loCZI1QlRN9J?W`Xd3-Jcvj#R5cxzK-GOKGuj$GGv0o5J31{%I zgDVx4l{$2Pf2C1*owEftn@x3kYO2lNq)rfmS5N0T#unKY%~nC{!MwMj^V;wWuDn~G4Fnlr80GtLeiYZQf5s4( zL~x0oo*s0DQa^NrDxMjlkQLhoRtdKLsJVv6cJswKz)fml59PkU_h<=7ZASp#$di^O z>{%+Lg6ky`ff5d#j|NWFuZ?T(LiIKe0BPtQ5&ro+8krSm%lYqLwznF+53Jl{DR#X` zE)BA4{rNCUOd^vSFe3JAgE@9`=rn67F{u6@C*Qb3Sw#>LR+0o_nE2P-%cQ$3Le+tw zuA8}4Fs&OG&I0Ju{taR%R5Fnm6t8FZ-nXZ& z`rzfoWQqFz)VV=l^QrGsElgT`x@K?`Ye1!# z4&-ym@nd{#4!D4ZW#Wx42j?}AR_Y!thT3ZlF&FmAc?Ua=qt0}6e5prHkaKSg3C-=> zDp?BL84M4%>sG09=4nOP*-N3e&ptk)WZ>rJRw%F)Rim!4pSYO^KP-kxbXP9CwTYra{o&T9r zLRj8+Uzt{fAB%3^5qCWx) z208TAt5=XlF_rSZ4gw<%Io~VW43B;$13TV;vqfqJZnrgceFZk-Cdf7` zJX=vQF_eNXufp-Gcp+x6N$$`8K^VgeLYa;(l6-eJf`D z^b@A-im5`im*2mC2dN~%@a=uxelC5Z9*cNpuGqM^LcMr@gDM+IjFKaU+|1yA^e(^O zr|ybSQho-$A%MY^Uu#1M{hc)0fffCgFE97^_m|ibzvL?uN8B7MGal%H`NGQQcw|$5 z@9y0zD!=s^CEEmB9yseD>lj}!iNxj4d?neFqF%x5y$h_LT#~ytG#R601f!bSBpZPY zkXl!wNH5ia5xsNNk(87Kyr;Bs$+zY2+(Iuyd1tab*zsuYYW=-?35;))(%1;xLA{K` zw@EMpexj&|xw+&M%g#0FU!Oikk9_$AZBo+zdH(oe^FT~2EAkaDf=j7?XHy=ltoi&D zP``rLk0E*e9VHoIbZ)E9cNG-6dwY8a28_#1P`Z)3>@V*elSGAN*RrGF8T1?OjWNdD zOK~A%BX|#(6ZXk_r`hw2W&RMZ;?#b|(L4C(vLFqEzCrCe3coU#0T6J;zsjOY+X6^Rp9CxEl46 zj<&oO*@HNgA}^3sWrydbdX6xu98uvnoR1JKDRZyUmNS7&=CK`?*_r^P#kpkA)mo(5 zNmAB{m}1k}w2ZFy0)a=@=vnrP0u4ra@a^fmDbvySfi(~k!GS>NYVm_Y0ff>F(17Bo zjvuA*5E2sSPa82$i0g&A28v2M1Gzd8vwjCEP}_mQ0V)KVI*?3B`cdX$E%bq11rY^*)}5W6^v`Nl9+IbCUf+(3%79RgCg~ zs3>NJXZ*C;(>c|T`u-`DpZVBeHwIHpm!kV2N)^>-a<0Xk?gFp@d{Xe!Nu78u3}rCH z56hb*OZ*M)-8gtmqk6Y_Tb>c<)W-qX9)HWn;|0a-_m(a@1k%H+=-wPGdgVD z#S#F%-9C1Bo0b$lxC^nu+t08xp%7xg+^%`VWy{w*M4^VzO7aANAhmb{6)_M*jnQ&t z|IU(i*JRP(`zZrRZF>BRxdu3c5(P!Y+$9625AQ)GAxP(Q=<&&NjtX|EupY>w$D_#P75E-*Fr1tI8zbc0*`WFu0}w$>;^;M6cB2H{ z756zL=_^W}M0sqAP^J-=9=~!z@dd}0*%iCoYtKw`*#5XB=#og9m1rjdgp}l%%mPlt zZ0agWV8JhX-~bHx2rtrl@0d1WS~%z+|~9e8yttQU3$w7G`7%`-CBiHHQFUZVSe1_-o{0tiYd zlLv6Cw6uwdiT;F2Z+0#y1U(DZLE8ZJ`V;!96jlIf(^<;MJk9ka6TUJzj-HFK0t~pY zo*nRe)0pAl3F-89PPXp?+DhHFsb--X148Uu3Mj3#(xJ|4 zj=9!VePW*5Qy{?Q<>lEPQG3k=m6Wg{EhRyRFlt0wm+8J`5%ceMd4}=*>ewX>#q4hr zPaXTD6h8GlXLYaaG8TmpShALqmL?=1u>fdv+5GR!S1$F)bxJUd3u2ud*^>_ zvDP-&-}GZxN&89qjp#KGJajSn*JCeI?T6@lh3a_+Ylo4Bpoh@PU8f$77H47#E7cs* zfJP2PAHQLw)Cl@Q{+jOfp|_oP%XkTy_2Jfq9~Ha|4h&a7)1k=4!of-YFCesnbl@l) zoNkt_Hh68lA3r_X830ofgY(X7G#ZKWg*(4vCsh-$>@>FQrE08l=yTjR$M&_Z-h4RM z62v2yxRYOeadNQQO)d_UPh`xe(R=tUkYYdrGvFK< zlfW$ptUVeC!E9LP60&gu1gp=uk!M8Rd&4DYQ<&7U{Jy{Iv_ZX<#Q4mZp%-?VzO9R1 z(n=aO>9=IP*=q-HNhI@ul~5~Gwpsf=7)zqVs%59Y8RKd9GxN2>NI{HWLnLFXc3q?3 zZI{a1S-5GMdA%Niqfwk*U#)@FuJ?ZGlL{Gie75}V^fH(I4aSn9r_eF=PUfp*PcH+ zxEZrXP+VNB@`5kle;BHRgZR+fL{7Wt$+fXTkW;0@a9Q+$(GUdHpqHnN!Mc;n2zSAS zLG;ifITPcMWc|Grsspk2Bp|N}`z)owwY$2TAD>*d>;;lP;?VoQY*yhlpl8h30KqBc%FH{Mw5NseC z{WTTbC=Y`b>Ch>HP2t?P@}xd)Ihq6F7b5QsZHo3+vwZts-Ipx3e9QlUX6G018*L73 zg`2oHY-KcW)J=@3g=LRoaF2y4Rgz?%HMLr}puIKu?T%^WIMdjTdUAu-p!1Y}Y5JJG zD(3qT`7m>Vr_CIjzUzSK(Uq7Hq6b<(?lws@(x`I9;G9WaG17LKfEo?OD&>CRNEN4J zp1~z!x_bRKkQ$in0_K7)k75^cv$DPc!SJT7c3kO$hm3=L1d0cSW}sgktn_Im@n}Yh zQ`mM$Sa<%12TgTx1d_nL61|+qyDe+Z`kr<(EvGtHQAx#5Ka2X{j_40tzGKtc$o*Q8 za7`^R)k`(%p|^oy^NYu2B{#Yug=-`%;3OFPZt*6ZP`x(HcsFbx)H)gwudb&DjzIZX z(WMfYmf`-Dl@%9Fx#9!JkvzB7t-94iUOxVrmfPt6yFPblY_QtFz&p5K-A4Y}joxoJ zm$+ry%uoe)yAzobcR}%sYRAhg2$OBNtzX>t+`#OyeAOWdi)GgwD6AWUIZp-$iyj^C znjYAtY4+ZCYLpPf%9D><*;aY<9k7spHMfMLN1EzoExRYAo2~i!*y{e{T-<`e_fo|J znp(eAD6ULF&H@Qe94u$)rbv<}^VzdGW-JS*Jth3=JmFXFKmaCz&XesupBE?A6SKsY z%)$z3@8UzeYqxd0vi!`t58Klv5VRi=m(e!ZeYuq`urH2rW~g86p3c+ZplmnTw_v>t z6-oT}4=vsScUIM_vk*1{ygoCO|HHB8g`Iet<<=s9Kt|~`)u~3#VXUOS$6yjNdp-kr z1jf}<#~9XIuT^=2zf=*w>$ul?LrB?LA*J0VjktZ~CeOP9@7rp%vR_RW1aFrv8*Q9U zSL{4Lym_+n!bvlM`ZcM5Gfnqd2KI~R?OVli)JzhYGdxD!r<(_r%lHGefwuc|~ zR6jiStUvE7@IL#s)2wE2ZJ;?dyQ*)^jk$crHs@pX;ruWg22Gbya;H;zS6E5OV87<5 z&E5g#%2cCw;+YXN;BK=-=fL+Y(Fc6%Lq^jth^94M+p`{l3pJHW(Yjw1Yy&4thLK4W zrJaj+S2_>9EcI?OGKStp-`^q)dz8r-^N2i=EV`l#eWW{o*J$XasBdyXBM4O*KjaRX zedxFgC6m?DmlERgs2JqjCb;P7Wu~TXN-C>F|3I~Lt?GrQp4QlVeK;S?d*Muu=yGA3 zbiJy5ay>pe7^Jx4=u|w%?QI#z=4!m8fKamaPFOxf_^(c`TejL>2zf|h-UzKZ5LgQ z+6qEU_T28|^QE42?K|r$f(@kE!O;b+FK3#9-!Y?g-#WSXDZ$mx>AXr^*KgH&X7rvK z*^m!W4(I0ODRf`x0FARf7MqY4o3ZKU&H9(aVHH>F=5Mj+dgMyX6tlr&8$FpiYLf6g zGxM!-Y;oVE%eb#lH1Bc!=Zc)4A2p}US|#4z94)4cb^Y6K_Z`BbEWK{~!N9~+2%@VgY&P~*ko=Eir$^ZVp`*-LQ3^)$-Py~e3QEm0c8^_*}wRc+EVKMJ&QG- zR(es!gEwc0V>X1y%F>~_C1;#FMDq$*>>NN%W;q*t&s6O+J5yn)lpJH9QJ@c?jcCW} z&UHbsv)>;RIJCFu?@7=qgp6CV_!-P>xSp+$(NY@{gdY9eY)P*wHhA?sgN!5G4e9&BSV`t zaT(CGcf@CSiJ#5m8T;*p40e$?NHr8fa(`iY9-Pv(Ed8p5&+SgTc{uD-!kTml6OBt+ zWe-GYweHZ&P~QvWByuF(nn0rMAA06vj1f6tOQ! zoj91}(0^NareW^# znrJ{!jxyvYus`1NmbtiO-Ca={I{mJdx3ODIuhgJMRlB{5pO2#BpTePDk>$NYdhS03 zT*4aWOHOl)O~8z*k0r=^u%h{LkOtlKlB%kz-CgH*1!3N$(e?^kY6=QDt};)0fD&&T zMw9ais;J{M?|3#5f_0;)3-p6_C2hGdC6npmiQrXTOMH{z&K}{WqqO=zwZ6L|f#?2p zgL_;+-Y)-5P)?hho>)~r>D&=yZ8ycG=*p2L-ee?lj_pB%mQ7d9V99ULp_T%;xVV7e zM5_7@Ea-`Bk+IO?pBi5r8pB4&^J3)XX3L7naxqvSj0*}sZRwA462VV2&vVy>?0EQD%!HcT6eLyR18*xa-=#Z&qygJs{QmZ5-YbI6-rT@l@k`gC^@CU2;u~m0CxI@Y%ti#y@fhF~6 zI!_40BCYGBdO{oXN#7+H$#@oLwW4oYPTXzvj1I-6yu}*vKLy{O%JK>@0s=Bl9nH2N z`eUH3rlO`+E7hM;U1{I9SkhEg5k-}CvRGjgyMm-5?QR@$_dI`e_l3Z}i8RS;_g!2n z^z>Tq{>wRi!=8b*?3m#e^gQL;qxK&U-f&$}?>D+L@B7kr>COq)XpbUStBHnvwSK)D zi??8X0e~vTNZ}aK!jW(HXHgs3>t?sF{z zi;)5qq{sN-9p=H(_x2N-z9nm^BXuKU_zcv^3BComnEBOh3$dwA?N>C;z+j^DT0361 zohX<%$}%&VoMTWF>pnMKm4kWG2(2|sD*vBg0n2~Z!9c*dR@ao)dhYZG-x_Hr`|{Ys zgDniO(dTcM+Qo!b&2^kDpv|@@3Mtsr0o-OXu`@^0?3SIJ(z-EpuV^ zvWD|NYA3RiK;e3~Jqr#CTuj8*y>1y986YjEO@;U}{-{&?H`XmmUOMp$Kn?({2_%^; zurT>YM(hngBc2nu^Yi#>nTN~mYB#4_>;Z@%4sVub`|H23iN5rURXu;mD<pCU%HDlKraZ5xtv#xxCi*-+{!#Bk>HC3C-gO## zH6*fr9sY1qq4R$G(|cQut?#XGo~ID`k}oc9yY&`O<+o2hZgGVJ0l++nT74!tp)|&O zv86CU6Bw68{H63Pds~6?wUMCYbc~s{aGB|JGc72+JTX+@I0ZScTl`+B;e@FOA9Go- z2GDuECmz6NI3kZiNZknABo)KNfPO*xW1vFi6C&dW9TFXrnTC>{9Y6oEtZ__&)j0Bq zF0-^%w;Iz#U8Yeru=alfvlC-=$gQkN= zdH?hw&(fR1p^)RE*AgYz?ReL&HSRKG?o3o#gY|3XsZqL`*vZq2GDJ(9-Xpu}Y+>_F z5P+vh-hDm!<7@LiysE!A*oFXYc;yBIX@dCqv3Wm%V$ku^*Y-3CXK6YQR8tt6aK~45 zL(-7$`MNHMYKzC<7i{x0>c~m6y&BW{K6UZ05uTl6w{zzN2u>h(`Dke+Nos6{77hl) zoBd9>R3xG_`OArwWUcV@ES{N74x%oV|^5CL`!sFGEX z5!-L9t6#Y^y>hiAF5V+&GB42A#+MNxVe)6gh>P$wLesEe>joz+P%)!L&p*LF_-N5_ zPg}dnX;!R?Y3?*c(?{fBihK+IP`~k3Z~PQ063PZO zo6~MFt=qX=4+whREQ=48`xl^bwXNS*)G3xB315O%8>HkCI0-e((T#*RR*e)?0g=zY zb<5fqWUz)uMG+EVQl!tY^UyQLc~&B+zJw`Y`k{1b`pU2exc01{&b&Pq;5i|z!vVW@ z36o?J5%TF}onY8KIfZoB(c;8&1mN7Gh6w#pj?FjB38lPfvVy zTSHH;==FCS4{tQ{xaM6CCf&iU8Nb=|im?*?Mdy!NI$-IC{PId5?I{KhS-GhA-pjPK zZqJW(SF9h!!`TW=VsR`tFt)lT+ZU*8*c~tWR2iLuow~%H&!X!Y(7>Q}3mC?Ax!(Ji zJMP4)j@Xj5LT-{?P{9w*%2mAcnw*Doiy(wr*TI%evd}L8751hTe%A|p7eLZW)?~Z5=6S!tue)3FM;)pv8 za9QtZ9R~xa9HkR#!R?@_Tj{ZN{~m!^Jax`B`|0}Ul^_BYT1-PDkjob&Ju(?0*G-_1 z-lP@iw)O2jxSIDE*_S;wM%Q5pcq);H{Z781n{_8JfSdd#L*F8tlkq{Gz=XP<^^+MK zmg1Vdib8WQ1I`5pj@wrrJU-Mp$uu#w9~B9TYZ$rxgbIC1+E)q%fx3B)gERsA*_Zn_ zIkX*ErN~3=!=m7pfY> z{n3t>KsQ-7l$(ew8RCmT7m@+jV~*7>s^m?6fQtR?wT~9tM9<;yQDK%(B<_8Hj7V)| z{W^LHdr>F?DvESriXInh^YVzA}GJLhqqyE0*Vwm=0i9mji@I6f?ai1T|eRMi+ zRi-CXAk$@$eg25Cc=Bb*^ihz};n(n#`oyct;DF;o`I>ju1#-6zQPI~wg&*8q=1&d} z9O$z6Cv7`<+B=iV#*(oVA1`Mjulg5w^!#GoxxsEYx0>_-D6^a&XAAq~wJoJS_H9bj z-Dr7K`BRto_`dbQ>AsM#Fs;co-Lnv)Ikfw6`;UE(-`t=Sa&xY~*Qr@4+1^nfAdNIW zcVKKneDUQ@en*@xWx}MUqj@6YDwa|Wf-Y}M=&Pu;ah3hN+fWJ5PkGA}0`pL=m;CyZJ#GE~ zGzYr+KHO(`#XfkK8{fXwJ3*sb{GjR&)-+J6cYigUT@{HGVO?R`y&ha!;|o{M*}Svd zKOjH3#)nDncRU{kcKJ~w{W|A)smR}s&A)$U3VTM9rT)9{ClK=asAN3H6a9hT{cjt4 zE=ILC5MZ`ZU`jw5?Vq#F(vWdzsjEx;k{ajO+MoI0tFKVG^v@BsSg`xdc!R5OObZ9> zirIO<1ZRS@H}p&!EW%lO7l!7X`D9T)*Q$eDK;K%|+Y`Sdr?O!13(_$>4e{*O81Kqr zSxD5Czvt$bj*q=IFaXP>G<*c^61MU`ki*Wk*ymuHe_{}hE&q%%KFftOLHE8#fGu1r z&JIK~jyAR*fSvO&+S=PyvPASB@av0}|DWRO75f}^O1(7M;t_H>>)yAxdZqc1l3fyr zLepUDwS;U-3X-?Dwe^T>RxbWIxJU48&(BuHv2ZxBHkp5_ z8dTd~)0YA4;HApKO37}Xt~%rwd$tNC%jTy-#l9(K8fZ?*>C5C4KK@=Cqs2TreFFo9 zl9CiP;6d(Tm51&p`cS(SPK1LvNt8ob7{myL*?L}lTu-^UBUiNEA={Ab6T5Mf-^M6Q z;iJT3-c#r+!2HTcPhURVr6-13FaPB3pR;_|98&JTNJx+hLfh{!`4H*}*l2U;;ApxmAAQv6@+B;^ zaFiaxdUNTtKWVFIB50RZXJ@_=M+bjbT!MzM?ZdS1boUjyux?Rf4Lhg2@`>WP!Fh z?OOFmjk990jv@t^l>&w8JLb{Rki)C>gYG{l)?`TTK8JIQCTTxI_%vS6_#Ig$;ZVYn zHH+tVv#-8R4b;S}@d-F9wc*QX+R+v${ThwI5OueUxUdA3&90^n|?_+ld>=3mjUv#XZMYjZ(w z9=3TEKVjBu5hnq9t=k4v;{H?mXPLJ3Qc8XMIQ#5ZU{Nu#u!tDYHOyYo1lj9(BvD8r zkC9stTPX4p2Ro8eFzf`7@~%&N&NB2u5mU<)($O}vV5`xp>HF_fh`n!@%ZP=HjK>Rd zs`Z}`8f_~^c8)FTf6ZsR6QQ?o&y8+`pEC93 z_x!4tcyKe^w*i@hOi&T^{`hEBV3Y?-tMkFZt*dbQ}8l`6)Fb*fry`QH;Y3@kACNXXmNH0L$f+6++)&Gy#Jrm7stA@j0W z_zL-PTaCkH^0(HC=%Lt4e=!6n z8F`60vV=NTURsiVJ=1DUj*2O^y;MKlkb4aR5{aW8#c6IoA(@sljWK+dB5l$o-GhO2 zv*~~Sa5U4azrS*vf8#-ZjQ9D;s=@)ZT*6T`%$4q&_xQB9U$M>34Q{55dXcH`9~^kk znJk0YbE{d4^@j_NTt%s-E^;d-3B{z#FvX)bLyM4~pC2)99TUAQRQ%EpE_hQLAKbUV zX(o_KONN|9-o6Svhmil7KnSZ_>17-;?bli8bQ2cRpY&A8CJGA*R6!%JR*grzmsv|; z)8~3P#x^`6R`BW-90@Zh#%KPg!Vi5lq1;@ZloN3RD686Od|aET`+55<{{I;7qgwTz z;i)3kOd&YSCIa64)8+qiW_r;>ulb%RTLp6YQ8SMtI z?&g8225q!awSC$h?(Th@Z_@K_Z}A=hNj6gYFUSMUELaU9BO`%e8UwdOyMt9-sHUY+ zKHHxy{1E1)FpIGba9E?nv$}VNOtOz4NaDi7)hoaeUhMP~(8YV656K2f-2ykDeiH^5 zrmpGVNl@XVk6wNiFS(8DuJTDj;C=!TCbj22 z&F0Lu%C{-z1y9Ap66iv)BleYp3|wi#I2{%r5bWT)DmiUbQ- zzV^MnJ?&j6Ur5J;Lww`oUmkEMkFY%V80nkleJGa?w1?L+@fcP{X}brw>{NsaNJ%Ha zKk;Bm1B*O`uEa~JV{+PdC|4FLH{{)ia7GfCfQ#Qd0h>RW)!=JrDB!zVl$Dj?$3=@V zB%D$ryXIKAH8!08Ibn}GjL-K|a4ChJ?Y!11>_;MJGRc3A|VxWk?*L}dohEwTseFxYFR+m|0_xV^c z$&`ia`0s4YWCgV9B(r1;T7gln7>>PJV$wpsXPitrz4{f5A_7L6iO!n+W@*`TZS$vi zIY6&~XvgCdD#NbHUcPXf)X9_S3~x@S$7lczMunsU&*FycpG=s~U)5z@{dIA^bD@`Q zG8abe&z!c7i`-Yp_KP)hO3tmJ=Ju?!Wt#X*Qd(MZA6JUfZ?ux**UU`sD@G1K4#8x? zH|S`bN%*{*sSY-LWoYtuJ;c1Ivu|o``!FJ!+WuA=MM`o-qxDaxCryxSK(F=zG8eu` zLb{KYE}u`B`Q!i7*IS2GwXN~Oiw5cLln!YGrAu16M5IgF0z?|5q!tPS(o#}_2qGyV zARr(uDkTc2w1mWcr+UuW=X~G2`=9+hZ1!T!F-N@bug2tpaQQ9YOVEHn5A3+VM%)S# zYFc6I!Z?G$8jj3BOxS%>`d+)>06$N^+|@UK%Gcv_q+v7H!q^YhW{z{`rr)n(nmF{? z!xK9Hv+o(uM~T>X6PaB4vpGVa&wG_;m+Zq2k2hzn_DwLOEAm^z>@w)v(wa+LL{(JSY$OksSibMRzW3ki% zi#4VW#Tz^}Ac}#Hl>*mRSSU1spbA6O$hZ3~7pKFBSpPPG7sz&XP_nQ8jMdMzPZyo9 z!k)b1`i$uQV}=rzx|NYVaFYPZcYA9|SF!_>`kF=uGGyl^FRibaZT~!Lbw`D4_h$W_ zqW8u+cbB>Prp1?4pOlSw7vQ5X!ghYoxVc?SK!=`WtH0?7v(H?>q*+Cy#PR;yU{IP~ zgBsT@3g`M=iMxar1=^;jLXCyx0ox978SCd=Qw8V;h^e%$r^rBgqABi*v0zQj`4#z#f| z+6zbJdSZxyN>n)Z1A$!+513^7vt(*vV%K(Zycied&wuIaype3cb_ZG&=*KSEcCYUD z<@_v|0n9dr6P0a$r$Lp7j4Y|cZKCp#`A~t5K3|5u6o_dnMj4EouCxYiKXFQp>SEW` z2JX$=(qIVCt~Y7IPl^~O&Bp>T3W#0rOH7zagn_8yvWd(iDpcX)#~UvT)m`c_VMJf9 zFa90T>Ypm4cZzPCUr$%hetiYo@;2QEZeoc0d7Nf_aQth{bp_m2`w%T54+5{O$5*`) z49HJ6D~kF-m=qG6l3d6e8Py6vDd7Nw;PB{XaHgRA5|EdnsMz)KW!hJk@T+gm8{&UMh2>qBzX^6)e(+_;%gakhq)rQZlEhT3=ivTrMRUTrzM7AL>HiO? z?f6~%Gu5izz?qpA{%~9mFH+3I&%m5=*V?p)HJ))f$D4(P&d7k-Wwc2u;gjmc!su^S zyn5%lFCR=ThCd*^MekS;wBd`!x3|BtOZZlLSyc-4c#sW6Ei!5XM_pl5oKP!hofas_ zjB!kqW2LJ8#6X|u7~D{s^&Rx*GS`}SS&mK-Kayv_R--_@1>%zf7oVy-k@e!2aws-o z9leK3SgiwT==EsmY1jYp@0=?VYk8gz^;2UbWX;iofhn-sK z?x)}!35gyb!!upgPxGl5&Zyz3me^8FyFK{;4!h_8<+czv0%%+ z`nT7-cL^pq=pg_fGIHld&e`@%3oW+vw1n=u!Tq-C{gY{p|)4d^WNru-TaD&9I6Si{bATd$#8?I&gDQ zGy4dsp*YW9{&=_oU}UMQ+N8Juq_|+h=%Au!%LhmNSF!2#wzot^UkMf0qq#@JEHnm&gC|#xRzS)(_0;}u&q&=Z zx2DQN=g8kH_v$*BwxJ2Q%?W_C`%HrmXFP*sED0e2qD^5|>|#NY{+V6UJvl#~;#!nN z%H=|O8&t+nM45;aO%|Lje7frF4;EaKiRLFzXb)t`7|D|AhGQ&)ukNb7ZKzlOcwYf67+jMvH-9+iW^wur?9bWu#+N`L zKltc80J=XKS1Xf}l7OA5wSIbbvvJc$d^#f8I#<#h;AuqpK;aSxvH^}zT^HsA~N zZjgW6saYA})w>>I3=T^fZK_l>>=NEoq#6=GU9@A08$TO@`|h6!K=c(OXgZt!Pux!h zA>%ocwbqj$P$$D?@RniP=sO+jHk?l=Y_>)cG?>7-@2IQe_QI)(mLvW2EiKPq$eG^X zECJ)$s(`nTW5O!$@{hm;SXf#f@9Vw1rfRs})HG99J<&Y{@{x*mpddg?U#0du%=CUHe2B^0 zp6JA{_IoKQy1NSoyNoX%Tu<#8@%#+7a_T-vaoDUaq&~H(M;wAuov@_3bdzcHp=C2Xu4E^o}uRpfNd zW~Qg_t#S7nUS08g7ZQ%~=BtSX4>D*pZrThzB#zaRVSI&80(ON8N*LUg;1bG19QDs@ZyeR~R#y}67KO98U{>`%r{Z(6lUQPMfp;a#3+6${o zLlxiQ4P}ct_5r`+@-rtnSrqaCA&bO^X8$KBY_ph(-i1w!(IgLlcotvTp05_C(F(Y6 zp8xXWGz}vq)9WaC5WK^SF9|%_nUFYr0wTcC_>`|f8YVw?79(9JqoF&FkB5*>h1Tfq zEQR2p?XSbou0cz@{R@bVE8u)v^yT^=YyNoUW$mAE{zA1x@qptN94e4PKtfFXxU{w@ zA={3d2k28xwUSq`GlPUGZF`i?0|w4w+$*A25~R6c=MIeiXE!AwSoJaU^POc zWBxeo{C<4ud}-+6h+E>YpIQM6H>4S&kXS@PNp3iSzqzhb#_iJV zHcM7bOc(%v`OEtEyO%Ml$EA>1CO4+=+03k|3hd=9Ebu~2&>bMYKS6LbJlO|@{&BGmJa3S#Ko;32S zL=fLZ3Zibnz=Hrt86zUzOX6S04LYnAKuOiSrUpxTh}R_YjDwKJ1MwyKZs0yOkFrM{ zlG+fG9Fn3!ME9Vl1oJZ$d~5LXp>!a4>YFpvTd=Dc)xm$!!h*jB1KWlT&m9B~V=7wO zyQFoPC`AioNFXCn1Va?HehPN;4EZ~aWjJ79J7tHA7b=9{cY-dDf7>yYM5;G+JNk#dV3JO~qhFutxG&8_!8&|}^F;m758NelwXtz_sSUoUlK9iN~e9P+2RU=ti<;Ej3zF|5obBcxG+Jp_!1Kp3fMXEzVK55N`Rd<0s<5VVY4QJAPxSiGo9aB#wm z12D_#g+p%&q?(LiMe>0rfC8&$ zNVL?rl;X{+BCzNI%e6PvqXrGUJ@W2~ zw*6PgV4NU360*bzhkgL?Nw5!<$H&I<%LkpXLt4`gYL6C{!Q1MK<ClG}q{Y_Y87oWX6Cl2N&n1(YCX{90A4e7m(n4rTGAh=J!KGp(x1C zZVO6lc%XAW^ASBM9*~!_2kqgl)o~9{#Fm%B@evf%B7$O5gvEKNZf*S$u&^@Y(s^F% z?jPXNMnWTuIbkk@K{iBuDi~U`Qaymgc-;%Gl1xeHVID6cX728{3_@Cw+-hLBP__7D zebX|X&6Ts$duxYcDAvo7AK3hz{CHCZ!P51i0Qd>w0=7WN_IBLrQZPca|&f>WTf_h>?Rzg7QYc{GJ&|* z*lai=5%&}Gbw3$SthP1qXjW>=U$~*d0PE-?L^BZU9{8ui)?RYUfYsTtP425ORR(W` zdgZdH9mP&avjW94y^rEG)0fbGM1Lh^lL_3?bV@8yheZC2V;IYjEZguFW<@V8L<<(p z$Gg$p4kX>FgmYpf`E@Hsu9XUNL%z%(Gvyh?UJNELaxB!YriMm|OMM*xd^juiU@for zv&RYv={jI7Zo@ugB@Dql@z86DtR&eKFIyEwiK4vGvHN}kcBo*bj{~;fF)pAm9|C3% zkc~9>qdj}-lkOTkN)Uy|%A^yzMm_`Q+8)6wAv20>52_pM%UF>AAlr7&aT|u~?38`= z%nk2wy0$BU4*u=-u+O7X;jEeEZWKkGFmhcjpS9*|wHX}*tmdryr2ZJ@FIX_}4|1|0 zzZ7yib(ap5S@i(%oK!W7Cq9|)p*f*WHhE4MmY;x2FpJwQl#-rYUa-XV_Oq^zj&(%5 zfdOUO!v;?I(U^mL^?UiO;i|JSonI*GIm3IU4GOv)?ZhZ0iL~1A^Yg=YPj=;7KRvw7 z!sBRi>z(z%nYR7o_AjF{CSzk`U8U#lynHF48*k!G)FwjIAwu&?6t%#SAsW($a4hZxG4VR)K zv}o>ts{#wJh?EiVZ%^2MVFpxGRjolkz^SAO6JS!00E_ZnAbbhr+YrJ7`j8LM<&Jd_ z-tqdc`2eHuNAb_^jEn*LzupPF^lbPkd`{F;GWb9mJ$Xw5Ml;$#Lt9ok#vag&ziS21EkvC+6&riN7lkNWUV0IX7SqZPq(#YCz^#a z?cYra$C?g^w0<>o&s0`Bcwo$GW-jYy#d>wm| z_ATZ|B=X{6uw)5dqjcUp&dmmZ0a*@|b@Zg*ksHp+{J%MhX zewDm#3JmuwXFaW8d1M_E3ODInSi}T0|KR9v5Rcl>m1yQV#)@SS#`ItW9->?_bXNO^ z(x5Z5+vh?Ic46U*@36C1Kz)lxN(sO@^wTcG`3DC9ec{NB6R^Z)#P+$wVsZ&kYmXj1 zLK2f_XJ+0$Ns9AwUVPj(hHNS!~7T0#ef9auf3&?6j!$0Nw}4GBGUPxy|NjSZQnLQ zp{`j3MhM|c&xuSAVUJ!HK4;g7Kl&DuIlE%1b59^(uNcTf+gI59`4)-U)&uGqMX>R9 zP^rmJOvb|LBrhj-xu3vj36dUtI*@xhJ_f7`**B{cPvuTQg{I2`4spwu&iglT%{sQf(`OgcLBmEbL~$TMSy6(%jO4WCMKb*kiDFc`g(5L zayG3yf%!=WrwudiYfI?h0XAy$VFsl!mDHhTCC9zJ4J;wc$KBEwJIsOFa4?vVGq^Du^vRgIK?Y-k9sZJB-(}h1@4f7a6FZUed9qP3C_2NJQM#7v_5O z$8wOjm+9%X$xLVEvV4XNX^0a12{BDv#P|?uDT;rxDSV=Qzb#nO<>t4^&|b)yh8s{q zLP8*!JZZ$%oF{*RE^WBn_Rry!q65#_2omtV>PnonyJG#6+pVV#Knt15d~WCK@|b&s z8)go4LwKq8Dp38&knlcv_EX^LB_=6%Iv0K1TRK;-%OS5}h;;UqepHM&CnvV!KPLL) zugUsn`1xVYgte2BOCMco*C9PI1$+dkH!@|Fz%w+Eg~WASf)wEeEW=w5+u*=!BUDpY z*UOgOhy197?lSy-Q!6VX!qm35HaOb6$&Hz|qOHwFjW*3%52!hV_vY}D=7f7d#h>eb zMk13ek;7Hd92US@@X75l>}LKm&uu=?fD-$&Qkzm_RFqqWDrDWAu%2wN<}ZQp0lHgi zNsti<;#~r7p%nHtW;m}S}a?z^Fg`- zc^!-E$gnCu&KAxgp}ygo1Hn#igqxvcgd4?qTR8Hs^SqgB>cwHua^tuex4)_^G4(y- zp(YyH1tpv%qrZ8aa-on!-kvMd;N-b8XGml*1G?eJ~Y-r-rLRwR`U7&y+Z}2J$0$t@^ zkqdb(U)NyxK_2>*LAT)psVL}!nmM-hBSPOEg1kZX9W)1HWlV#?AE7Bs#$7}tVsd8! zE*o6zHM91|Ng?wJ0ZVp3(#CkHIg{u+ck;~nb`31$J9myCj70P&nJ&WJqbo{F+Y6(O zZ9P1M`Y&W~lb5VR^OLd(+fj;oMPBg9@k$1@^7-fnebcy*`oicgl=lZHS#WKk2?o~; z=kM1*alg#OJ!YTMV0G9iRv#Bm8MCSuz>1Kpsot_%H4#cjWtwATWtxplVB2W-A;I_# z{YP+barmUrE~FX!V@WNQOF<-wKIFu|YFtMSd>JLmKAW=2%41-UG{a5zoN@hOpGxQ^ zwFCnUp>DNKgahy)f=nB<;Q$Gb>pa4R_Y=+_p}SWe2!>0JG02{OG-%O5}7te78LUocH9A|1ZvJs+`ADGS?6!*J!80@ zMt^IG1jL0INlEL$m;0Xu&bmpx@JjgX5}@s#$m{Ij&}NA@gV_@r8tMYdk8q@x3gTPF zj%$0xFkaU%TU6cN<~%PR#Cm6Y7^p-g;Jc`M<&c-(T&^bG_jzRj|Xq-PP zUGU?b-OJ`<$(lI2?d|Ouq_*1nLCQzTlp#h%tZH2xL)uVDN4X*a0)?a4rfBGoyLgsh zwaycgl05P>$mHR_cggNpH9j%_f_?A_D_Qi&yDeNEZMxB_j6!>MhkSQ89_cIv{kC&K zaFCHzhU)~#6=v*I#$m58b2t8bOI#|afjU;}u#Um>_WY!ph1FKfIM4|nmjb0o9QFt| z!EZC{Q2$<(hy7#W)8z@*A-Xit5~a7;Ev|q&kiFDCfRn#HWfwN|6zeJ$&8oD4JbRAE zq0~%PZf^Vot9E+9!NHAPIG95E+uIS>rKLZ^!4OtZUQvO(wB;9{oHfTTCH?;pXt%cL|=FUC7z&Ibhi%~BJeJVfLG zMn2p~xs@9n?nu@H&Af})`oko=lx(pol^M|OIA0X%YC5Y5F-&&*7G zGQ3Xf5I9Nt`*pd;;+-ZYfb54En3CLXOoOlcV995p(OUpkhcCRkq?eAjv9$%UYt&b6 zneGMKsxE$d;e>xDdQbd4!rT%{%U}4FsgW&@*E8TcNO7?Lp^0q zX8ONs18CGSxsLTC-vs#Ry#Mj&w(66PeJ`S3q$fI#y=XG;Awur`$>mj{_1`r`q%+%E z*d_YRA5Lu%-B>Nvf4rcb`qrb0J-y6yaq#0Gyr`_K1U*f6fbuz}JwD4$V>2^IzcqNq z;dV==|AqL~(8`e0%5+0cyEn&}_=T7oGU%rLp@7x(a=pgUCo!T**}n^$i_XQ1cX32{ zm+v$7hgT8L+A%zsMqUOTR`kX0)9Lq8_UxIvQDhG%Bl<+0(FWM-v*Dy+AatfZ2Bh^u z|IO9`nx}jnDH5EAaJve)&Lh@U2I83@Nd>wG-qp`ObQus$b8*dyjZB7$h9;Kbt|_s; z{^1ce*s1al@QJg!0HI$VAhQqJ%KUUV;-jaYz!by%RJrt$2AM%chLC75NB4zcl|EFs z6dN1LF&xcBv|^@P7R82k;vvJ8)X>*^>Lfma<685cKpf4DG@~wqZi%v+(F6Oxgay}- zbdO9}5{&mX}j0BwH95Y^;Is z2+3m7Je_|Fe@CaQFxpKlXdte9QjH=V?;JW?sR>Gm58=b_D2=g3z+RWaPM5ojN7P6t zx-eMI1sIKxP{jZ)isbWj9m8w}37tqTXi+!0ZZT$jG(0?^aFmPz<><&#U>FHH-5HQL zFmOP#%l7WQB(6MV4i0eY+ODpA`0K%U0|F0Nttf*k=xTwjAWzv79D+p67@3U*WA?n2 z;N6#>=GbS2<<5sr{ivVfSQ*wlov}3d2mn9J5vYPj$HtOP0^5x%l0-y6l7BHEkG@D~ zC)~-6_{{?$qns;u1(aD$DB~2*BQCM31UJk<$}34+#MrK&=E}R^pecMKZd$gvSJ?y3 z9Z~sM7DK-DE8Yhp@)pW+ym=YM#I`d85lX}q86QR#Z?I>4yZNfWu=h9kP&*CfICA1U z>Jp!G%)FLDnNurx=1fr;*~ZT(-B!Ku?uK|J;*@3J;*NmanNxMUdUfs->@J_wj{u6c zDKlE|Q(hxWu@=r$5xt+9ij9Z&E=?}Jg2PVF1uj%0u{yo}9FUCsHHxpx1k2vA3?khD zQx4@obns_OwtrW}g4j91C@%rY0$p2?Zp(9fBji?&`>$T&>3Z#73@%(?=~{%qtawe; z17^iVIIWRs4+BTB1A%~wa)NpK;fb>g3wsecIiCQ5h?Fr1uZb?Z`91z zomN7|Gvlt#JoE^+DqZ~mJ+D~x*sXhjk4uU33X4X z74~}a{Ou0&Wu9P=y$KWe2CfXj9d|u_;l2QdCNBw}c~t`f_vvSRpsitJW0R7S5)jZ1 z;4tmybKPcG5QBwQ)Yy2=eD>8a+!)vHJpA3^&>=h8yf1H5MI)fuJ)v8V4MLc6gQhRO z<+r0GF|fAIPEH<%IGgAp^+XokoQa`#ly+PR-9jVl;T3E{jK%>U)Y5&NX?zd&e59Fz zrb`AmF25Ydwz7~u-_W-id5bjTBgF}ZiG|iH9n#fJ$Z>(FPJpUos#Yhn6dr~Jho2P9 z%vkaN7}|YEQfw9<7Z-j~2aVpa0$cgS+!bLk-#wr$0eB`tjbJn>B_%&7`C$s~L0K99 zp?~|QPpyrOmi8N(0qiGo1L`JYlDknjtBCF6wrotckr0B&!)%_Jo>* zCf%*`woW69zws4|iZT1coZbdf@gM!l(@X0Q)=P&;R&Q905m~l-AAI5HN;{Lp4WL7a zx}nuvb^g?V;Gl>HwzzcyQg_dYKG~O-J@O+&{%1k@kNQ?KsJw?ySOqINzSNS``I;<< zc20C=eu{q}oy9qGXD9P5P*dx5vj`1Vvp?YJDfiIPX40eh(Q+`r18C#9a|p#Tf4*hF>!x^Iy-W43@nWD5 z-o6e)@>ZS1;+CuG;1|7qKN$o~@p)ao^viEAIGr7e3c_KgkI0=1IiOU7OHa&ah?u04 zKBiokRv@5YWo4zOm+{|R1j)nsRGAP7W61DpfSv&=LP!o=A!G!Vx2C41cP?1fm#-u=0?wF=my zrY6D4#x+(5NrB`8n%%9a<7KF(q1H|1GwLJ_fSv>OAO9x?0-D-_QaT#|u=W}`F*j+i1cq`OQanp8OAk$HnBou8 zqorw)`odkFs_U@(ag1iFL{_~kN?Nh!up^?d~oa=~z8RQjRZx83*2f;)K8Irb! zMs7dA!a$+C2s%0^I0brcgPgQ9K#3Z`+HP!W3XCsV$LQ%8%UGj){wY2aVTCGO9A~02 znL4b;KvsCS$zbxuHJ%=Lb&ml2xl>Fk(Xf@;@nTiTgM^u!oc%dFY-u}e(VzBIkncTA zE~kWzIhH#i`|3gz28fVExMZIxnwu0 zdZu26cEe7}a$4)Yi`)9D0Eh#n<_Ng@qt+;Fh!pR_wPz{&T@XpP|*oVl<`a zp#?|qe#V2`y64YnJ~uWt&d%DT=24Ee5#SROnf4ZV53W`7Zcq%^!>VWK_O%aqdXmx7y;GBPrN<;vV5_m?1MK1Y=T zH0%6;FZD8SzPd+BI(EzP!BtW5=I>xR>H=arcLpv{)yNkF*MYJq7CTGWB4Q=BU<+_5 z>s{J^I@1Hxl2ucqP(`uIcT&vf+x1Zoh9Dt zusk~}+zbeqgTU)+wefBaR1R1hk8JwNVSdoU{9yQh%nt|*h%#}~*B_$1D2sG5J?oGu zS>Ot+3v6yTU*3Vc(5hL~xC9;G;AdC(fp)v5TsMb#7K-ulf%yrU$L@x}O`4cQw#w}N z`t|Ppvvd#eF9X2<8B<1{o|WcE9185s-rJLtkU&%p1VoIf>bckwgUkrb>jsbB*ACEbku{bg42u)q=N|Fs@aUwHqyzCdXw2?6pZ zP{;tXYieMn;au>Xkv>!`OIH$KUcWcj*$@>VNgrh(y6|Tyr&xTyrhV3M2POZp$uu5t z21IWjextCw&c*L`3WR(rhKo)rW}JK)?Vpb@*)fmKj6$;rc}nk#$xCN7bwR4JBXx&_ zUH2Ow1d`;cwcJYMV<~d1d#>gUUxqX*gzY^xY<08^f&0D?j1I8)WlPHgg_A9X!g>e4 z+ws5+&0f<2(3Zz>>*Pg-MOJkg3!%?D?-7-2(wesvXYK_wz{U$zu1d$O@R8r=Uwfn8 zn}PP;t#NQgRnOevnFsDp>FR$E%;BuDK!?*NyX;bluJR(W>jmeezN87T^L=sYj6Z*k z7++z!-iwujf`Xh}6e1fz$$L^P-gJj%PZ)HC+2?MQZ7cOVkxV$z@RXOmR-QSVB{9sT zH_)oM8yO(&T~>lUT9JB(=Hkr^(y(9F3lsR$er6)wf9F5ckNZ99Wj{K)H#~>a+RbA1!l*F)Kn{wuwjOx3F-; zk%R#dOkKgIXj>;H;@(o~vu?`@=!JRH9Kw)bV>9ut83Re}*Ac8m8M=1Sfk z$h7iy;e$_|I%OjUGPlmi9brkS5eFx?cqhg-OH0dBcOqNczDg2!eaC|+OYp+q{5IYn ze^eEw7L8od@J9#C}K#v$dtSNe6P#lsXe{!-*;)?Ect4cv9yu&X`Rki``g91Hk}Y| zGF9S6agfJwN#iS3t8RT!II)*@mI%tSlycPJPmSKusVu8;cuX z1X#JuQO2B>_D~yKF!&>N$-v?#AT&T`fpDJq6mULW_;UYuDRS;>DBSPWgC#a5d{eLh zShRRX7_ClPDZ?9ZXRAJAXfWQoqveLntxw(~s_!n%r_%zi&B&WB1Q&=lHZqvW!cK&x z3wK2c7Fq`^b3J8gx?!lVuWx2{_ft;S+K8bXFW?nSA&Xu?TZ~CSTo7*pYS@)k%^iMV zyX;CCU6?i~$gr&L0om~D6g}|Pf@tx(dCE&H4{n9ds0y%r_hirua3SI8 z^;!O)sAOTa5fK$N%}{{3C*agwv8oE{gsuSns4j3W$5hPS1{DgKrmB+hVKco)Zo3)_ z_lCT{neE5FgfqAkZH=P1uH)-Ta12pD3yRz+$;n~uv-6R&Fe>Fk9H2tW%VladzCQ*IZRcL(-8l6}S zu)V1VM5{|o90c$TM*r`IX^&^e2?xYPNmW&v$+?b~6~nO?UjB+gb7ypDHe%(&p6K|L z?FUZiTg)Sv57gpBP`fO?dZoN^Mv#MrB#`exiuC*;JIQA_iBygNDw6tA`@uXWwAX$z z)%GD2FWTlDh}`&rdf@Ze&9A)~TDr)r)VQ%C8M6l`dTF$^(}0skXLt8}KVg>q9ZPqi zJC?}hWg;h1r5BVgN=cKQGBgxch`%&FOX@|HkCa6&q2(MlxN%o^)689oPQqmfW+%H<=v6tGk=#4HUwd)!^84)!g@c2F zjsfnU{YpllsIAcooerd_gtH8a^6)r=9o#VT-~AXMh!re1Ib5BA#SyM$PBrvhr)LwRe{N8gY(?Tmwa!T_klkYStx+WSKUWL4AOZ%PjUwgP)@ zfpuBVaOa=?jeG!*hmOiW?fyt#)b5u)mZwfGT?HR>JC@;QfNHnoI#W`fLnj8oVi-&K zzn!ni_X#_@;Y#t;j3X1%uNgy#wz=}%yW5e#gulCxl)hy1w|=UtwbX7e4s^`?J;bI` zO_whSn_1mSsX5ONzrsnA2(6B>&ZDve+5!hw4xFlA&(fB!0*pI8u=6=qfxDgPL zI1Ho&aJ`_tgJi@TPV;)UHy`WL0MSl=^?+F@sD`1$QY>|A6{ zfN^`jQ1t1RjZ%x?;FGpC#jo$-8o&IRwVOxx3K$OK5n?)Smj=efGqhkO+r(> zCaI4(`&6~GP6fTe`3j`}((rqHQz6f*Gp(A2=dyB`$R)k4&BL*sJeBr(9$bSO>TdPG zQq#HW^3c_uOM?~~af}a$7O4M@NxK?FhaZJK(!GeHM*1IFsaa^{H`#TaI#`}f3_d&^ z)SYada@F_rWPE%)(2MiM_JuV0-&_u3WwUTxCCKBR;d|RFC4+=Ip8(q+y!LdBLoY?s zS2pwf{jHo69fb=Z3G*Xg_(S><(P&oCUDCcpUB}QrGg3{~Jon)c{viD;f-&Pumo8no zk|-8I1~mZrmc$EkkZe0M4_2kx7)s<3DSF#o`}mjz)-uS5x3f8szq@xU%uhFVynF5aFnr;n;$oFURKUT? z^9b`oHSa=?Ceop9SD%g)+omvj;nxUg?QzX?;V-`RXXquRrRk7!a~<)3wH%bWh@ED1 z#};rxr;I#!)(J^LN*6!TrjcERX}0@PQH15&&6h7*2}iqKW8hyXIc4&w4W<9!%2Qd< z47&UR0<|?YHYTI6qF`6h&5^$xpkqNQJp(KcpX;XgnOw8lG9r9@KYhH$9f2Bf{|_l_ z52@5BDaxI)?|x)~-|{E;ih0Rq9src!FAx`ehZ+*0$OowVxk~MKJh9`GslV#`8RrkAs%k-V<4weiCY&1JXi3> z3kx~5#NzAz%6B^Z%ZoHGUuM2znf&#A{Te`@pUY3BTZ}hiG-H)&nXhUy%!lH!B$<%l zVWYUXxc1JJvaA@;0ibGWBbxl+fqKr=3*nh&^b=>7iUqPtKI}Qrm!t^4crUUbv=f+6 zzh3u~%a}?ms#TpJ{2RQ6Q`bl>MN=$^i{9SVs$vfjNniMK<;tkVAoLYh|jI z$Aw1FoXxbx_p_F{Y&(DK4DSlTNbcBN;AINCnBU@(MbI3fS!w}yfhWVk!-I6cV7SJ_ z<>1$+ljBaxi;Aa}6uf8KVD4)PDoc`;ZMN8<${+BbKujON`pkgGl98c2iY}>Mr#c*F zC`g9(~aArfS?))y3jrSUi|SDv5n(-dVj0M{#KzGLr6 zoAH46Y6G{aJ<4kHO`5^{1I^-RW6&hb57^7Ku6Vb^kPLE)iTMJj0@bHFmnp)Mgq;VP z|AOXeOSuL23T1a(OgsuNb|7B(xVgK16pm?{1h!G0Z9FvO29gwpQ3^-P7aOihW13w9 zUCVl!g!jJ9LBW5I?C_1E$B&QZbv>Sg-7U8T3g9HLAD_KHUF%HhVpG;pXnv}_KP5%N z+zl4U_I>KitvCTB&)GT>`V1AyXIi7$9*P#KCLhg+W*h3G0IL9lYTGvxBO^2#{SG)n zK2mIyNbC5-gxCA$LQqxShr$Ig9k}^i-O=$g=l(-Q>ymSW{SteH4$M0iJweet^U;)}yu$S9o#)Iaa`l9UEW}qivXK zA}}xSe3e?Ni=ZP5^9!N1@yL0dU+)PhxkFg4B$%yU0D?ai<4~%TakfOM#czY7@)(@X z7&RR);#ke^1(P|YFRj0b`L~Ma`T_64Yf8iz<>W09#Ckap1LZIj!h$yMg$Az8sCBbX zK+2Yed^Ih_kI;F(GseWkWOhhtu&0NtR*8Zng4H86dk^~p(RZqykx+b-sVq9h!pcgL zBEwX^i`TDjLysQZyXXLu2qbf;2+ykrj6(XrJrhXn*vgR~M_mb}aCTk_ejL0OCV3-)q+Z8dpk(3jnVZ;)C8T zf+TfQJU;S2(!UM@6cX{BxkWM#_C?4MQhlq^k%~G1!0MqE+?$Of0Te=dr`Gz}9{?i^ zF3oHjNf;=J#$2&OE*oXK_Z}(0MBo2D{$2_ja)D?X0x}BCs5&`P@9N(lh{v#L%m9QB zl-V1hynLknlu}>bP{5KeuAlKP<_|ll_&rFZ=BrG$mh#@rpS4%X6I}eY4=<=+*o94D zzEwPi)fA`SX#J-tD=|MSP% zS}T+UquLL54l5?TGIq{y??hzSLYohFgsv%uoCao+78{@7c<0Iqb;N}AZQa1ASX;r@ z|K@%(zHT6zEAP2iz{8|ByT6iG1y&{rxn{g{6f80BgB7VFG52Th(Puq?dm)U_Ja`TCN&9_x{M7cp07;)NH zt==~$42lnq^JkQ=1M34Ny}Cued-ta@P34OhOXz`>rlh1?U0sDPJ~jdDr(+1vD+C4V>gqZ< zarbP;oD0OS15Ge17X|5Eg-Ccza-F@cZQ%C#OrvX3J1_ZopV`CY4Iy>WQv1D9fRv>< zn{h+BK7j)rkcyNsbW{5OnV$Ob`yl)DG zE>uIKfPsNgeVwMYh{ur@-+vAb>3^LB%4xLTQ?}`;K!6Va@sBs&+J#z3QMm2 zEKnSSLooa{_+$tA`trXV6Cd)A($Lc4QR`($5GY(&81i+@$8~%wed&q5KzUVFFhoPz z#3X)@L@4o}1oIf{=)J3&=wnkMj<7Er?2cq;d@JE0#0pW^?p(P}FB0X$3RJOY;X}q! zhTH?wPwmc(<0}>|fiDKa8DEOUM}F->S-(zuRKX%t*$zz!kZd#B*Q5+3+tP};ay-me zal0qM^(FfP`TC%7rx}@N=ohgL1uDB4B4EdsqV5^r@weQZimJ1-x!z7!>wnYU?6-eF zu&_%q-L?r6Fv9oHi!%__!0{_plgzKT81EcHj`|boD+u#Xg8V7~ zbRdUq4t#*V@&X}C#H{jG;|DBm#WBr=9FDk{SXe+?JUjQVk1U|aN>{RedyXFZ)U3Cs zs(me1ZNPGAz80d<2{+c=b=m+Q&t**iSE;j)n`J-XJ2zSH-z%nKa zMDoj9Yf%m^F1&6b|CC&Rn|vC+9YDQ8-Ht_`I)!JDS=^0+^aQxa`3O3uF*?O_x_g%( zI)srit~FHSeq1jOA&u&V3$MGn2D0UT0c@{)CTaumP5d6ocMe2JP-GJt*#I%_mJL-- zFnB?eBB*8Ekh14Nn2E5U^F4u40SuD#tq5kU)#$n zVz58M%LQ9Ye3~nGo%;G}WY+pf86?2!pavBw?{8c&MMGNcQC z2(BjxF%Yt95RsE(HeJkR619s+F9r)S5S(IS6sGmn{f`;eom%nB!|w^e!)T`7p|48@ znIl}C!$?P$o|Q#p`xfx|VFzwpGQnL==&@9KktF*(%#J@BuDAx)4l9I@DV*LU3 z6MX@Bgrf+2iBPZA^B3;L8s{k`gL*o&6wbSx{0)myy#nXZZ18VM6Mpp&ljOk#YcvxV z5>^cPeqy5WYaRc1h~I}y^!9lawLf@q+2FEJYisKtWciqOV4>`$W}pK8jnM5YF~+CP zB37&tmu?iyR1h|lmX}}Wt-JAc$QFcFP|Qc7*dXVs{11uh148W7J~&d29q4kvsPkt{ zf}!PZuOC$R^F;RuJyYNG_1Sy|_8nvO7vN)aXWa^A(}g4?s3gdUa-IIrny`HXiv{M< z?U`2VNL)3rwbDRWL`AhdX`g7|#HxA^qdILnNel}Fw~?NmpVSM9$WV%Ov+xen)1%jP z3R?2=Y=IlO`I7mRan^SJ{vp8+$4}J`L`#cstU6RPdtQ znNHmf1n*K`-rf1*9YXe)8Er5C!@61%8bd5v>D(A*;x=s|P&xNzf3^NQzjtfk<(M}C zcXhub#0i-zbXa=0R>X(JaEs+Xey<+!JEh-;us<;Nw7@y_mOiao=2N8;ojMK^VFRtV z*t!>ZlCMwU@%`Niv*Ba|$8Gz589z+&ONcrh-HKxSJ5Ropl$D)(1v@8hTXPS~g};V2 z81*8Lzncv_=rf_e-!jTJ{rO*eAPm5}=YMxmc*tp*KOYDSN#}jopZ5k2?|SL)w}78} iAYL%!eIg&eaf0!*Km7y41YBMV|7fb|sa7i6g#91qDPLd! literal 0 HcmV?d00001 diff --git a/docs/images/UML/test_task_spec_design.png b/docs/images/UML/test_task_spec_design.png index d58d2d3e8cddd02f405a32f5267c35d82a2e8197..6c828266da7f5c084e2cbd719058345e075a4295 100644 GIT binary patch literal 117935 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 diff --git a/sdk/src/main/java/com/microsoft/hydralab/agent/runner/ITestRun.java b/sdk/src/main/java/com/microsoft/hydralab/agent/runner/ITestRun.java index 762fc4173..225af3f54 100644 --- a/sdk/src/main/java/com/microsoft/hydralab/agent/runner/ITestRun.java +++ b/sdk/src/main/java/com/microsoft/hydralab/agent/runner/ITestRun.java @@ -4,4 +4,8 @@ public interface ITestRun { File getResultFolder(); + + String getId(); + + String getDeviceSerialNumber(); } diff --git a/sdk/src/main/java/com/microsoft/hydralab/performance/IPerformanceInspectionService.java b/sdk/src/main/java/com/microsoft/hydralab/performance/IPerformanceInspectionService.java index 25554d8a9..d366f120a 100644 --- a/sdk/src/main/java/com/microsoft/hydralab/performance/IPerformanceInspectionService.java +++ b/sdk/src/main/java/com/microsoft/hydralab/performance/IPerformanceInspectionService.java @@ -5,7 +5,7 @@ public interface IPerformanceInspectionService { PerformanceInspectionResult inspect(PerformanceInspection performanceInspection); - void inspectWithStrategy(PerformanceInspection performanceInspection, InspectionStrategy inspectionStrategy); + void inspectWithStrategy(InspectionStrategy inspectionStrategy); PerformanceTestResult parse(PerformanceInspection performanceInspection); diff --git a/sdk/src/main/java/com/microsoft/hydralab/performance/InspectionStrategy.java b/sdk/src/main/java/com/microsoft/hydralab/performance/InspectionStrategy.java index 131a8f2c3..b10de04c1 100644 --- a/sdk/src/main/java/com/microsoft/hydralab/performance/InspectionStrategy.java +++ b/sdk/src/main/java/com/microsoft/hydralab/performance/InspectionStrategy.java @@ -2,5 +2,27 @@ // Licensed under the MIT License. package com.microsoft.hydralab.performance; -public class InspectionStrategy { +import java.io.Serializable; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class InspectionStrategy implements Serializable { + public StrategyType strategyType; + public List when; + public long interval; + public TimeUnit intervalUnit; + public PerformanceInspection inspection; + + enum StrategyType { + TEST_LIFECYCLE, + TEST_SCHEDULE + } + + enum WhenType { + TEST_STARTED, + TEST_SUCCESS, + TEST_RUN_STARTED, + TEST_RUN_FINISHED, + TEST_FAILURE + } } diff --git a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspection.java b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspection.java index 559d71219..c6f75f059 100644 --- a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspection.java +++ b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspection.java @@ -3,10 +3,11 @@ package com.microsoft.hydralab.performance; import java.io.File; +import java.io.Serializable; import static com.microsoft.hydralab.performance.PerformanceInspector.PerformanceInspectorType.*; -public class PerformanceInspection { +public class PerformanceInspection implements Serializable { public final PerformanceInspector.PerformanceInspectorType inspectorType; public final String appId; diff --git a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspectionResult.java b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspectionResult.java index 35c3d1f64..2397fc406 100644 --- a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspectionResult.java +++ b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspectionResult.java @@ -20,4 +20,14 @@ public PerformanceInspectionResult(File rawResultFile, PerformanceInspection ins } //TODO: overwrite equals, toString, and hashcode methods + + @Override + public String toString() { + return "PerformanceInspectionResult{" + + "timestamp=" + timestamp + + ", inspection=" + inspection + + ", rawResultFile=" + rawResultFile.getAbsolutePath() + + ", parsedData=" + parsedData + + '}'; + } } \ No newline at end of file diff --git a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspectionService.java b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspectionService.java index 4bfe3e69b..0162ac24c 100644 --- a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspectionService.java +++ b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspectionService.java @@ -16,8 +16,7 @@ public PerformanceInspectionResult inspect(PerformanceInspection performanceInsp } @Override - public void inspectWithStrategy(PerformanceInspection performanceInspection, InspectionStrategy inspectionStrategy) { - + public void inspectWithStrategy(InspectionStrategy inspectionStrategy) { } @Override @@ -36,8 +35,8 @@ public PerformanceInspectionResult inspect(PerformanceInspection performanceInsp } @Override - public void inspectWithStrategy(PerformanceInspection performanceInspection, InspectionStrategy inspectionStrategy) { - serviceImplementation.inspectWithStrategy(performanceInspection, inspectionStrategy); + public void inspectWithStrategy(InspectionStrategy inspectionStrategy) { + serviceImplementation.inspectWithStrategy(inspectionStrategy); } @Override diff --git a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspector.java b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspector.java index 61800a9fc..5b6624195 100644 --- a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspector.java +++ b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceInspector.java @@ -5,21 +5,11 @@ public interface PerformanceInspector { enum PerformanceInspectorType { - INSPECTOR_ANDROID_MEMORY_DUMP("INSPECTOR_ANDROID_MEMORY_DUMP"), - INSPECTOR_ANDROID_MEMORY_INFO("INSPECTOR_ANDROID_MEMORY_INFO"), - INSPECTOR_ANDROID_BATTERY_INFO("INSPECTOR_ANDROID_BATTERY_INFO"), - INSPECTOR_WIN_MEMORY("INSPECTOR_WIN_MEMORY"), - INSPECTOR_WIN_BATTERY("INSPECTOR_WIN_BATTERY"); - - private final String name; - - PerformanceInspectorType(final String typeName) { - this.name = typeName; - } - - public String getName() { - return name; - } + INSPECTOR_ANDROID_MEMORY_DUMP, + INSPECTOR_ANDROID_MEMORY_INFO, + INSPECTOR_ANDROID_BATTERY_INFO, + INSPECTOR_WIN_MEMORY, + INSPECTOR_WIN_BATTERY } PerformanceInspectionResult inspect(PerformanceInspection performanceInspection); diff --git a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceTestResult.java b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceTestResult.java index 991b42b6e..74f630ad5 100644 --- a/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceTestResult.java +++ b/sdk/src/main/java/com/microsoft/hydralab/performance/PerformanceTestResult.java @@ -2,8 +2,8 @@ // Licensed under the MIT License. package com.microsoft.hydralab.performance; -import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; public class PerformanceTestResult { /** @@ -17,7 +17,7 @@ public class PerformanceTestResult { /** * TODO: Apply a max size to avoid OOM */ - public List performanceInspectionResults = new ArrayList<>(); + public List performanceInspectionResults = new CopyOnWriteArrayList<>(); public PerformanceInspector.PerformanceInspectorType inspectorType; public PerformanceResultParser.PerformanceResultParserType parserType; @@ -32,4 +32,14 @@ public void setResultSummary(Object resultSummary) { public Object getResultSummary() { return resultSummary; } + + @Override + public String toString() { + return "PerformanceTestResult{" + + "resultSummary=" + resultSummary + + ", performanceInspectionResults=" + performanceInspectionResults + + ", inspectorType=" + inspectorType + + ", parserType=" + parserType + + '}'; + } } diff --git a/sdk/src/test/java/com/microsoft/hydralab/performanc/PerformanceInspectionServiceTest.java b/sdk/src/test/java/com/microsoft/hydralab/performance/PerformanceInspectionServiceTest.java similarity index 66% rename from sdk/src/test/java/com/microsoft/hydralab/performanc/PerformanceInspectionServiceTest.java rename to sdk/src/test/java/com/microsoft/hydralab/performance/PerformanceInspectionServiceTest.java index 2e69a83eb..7d7f18502 100644 --- a/sdk/src/test/java/com/microsoft/hydralab/performanc/PerformanceInspectionServiceTest.java +++ b/sdk/src/test/java/com/microsoft/hydralab/performance/PerformanceInspectionServiceTest.java @@ -1,8 +1,5 @@ -package com.microsoft.hydralab.performanc; +package com.microsoft.hydralab.performance; -import com.microsoft.hydralab.performance.PerformanceInspection; -import com.microsoft.hydralab.performance.PerformanceInspectionResult; -import com.microsoft.hydralab.performance.PerformanceInspectionService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test;