Repository: wix/Detox
Pull request #3523 (2022-08-01 12:32:17)

feat: Add context metadata to trace events
## Description
Add context metadata to trace events. 

As addressed in #3520 



Patch:
diff --git a/detox/src/artifacts/timeline/TimelineArtifactPlugin.js b/detox/src/artifacts/timeline/TimelineArtifactPlugin.js
index f5a5d1286..6923701d8 100644
--- a/detox/src/artifacts/timeline/TimelineArtifactPlugin.js
+++ b/detox/src/artifacts/timeline/TimelineArtifactPlugin.js
@@ -12,6 +12,11 @@ const traceNoop = {
   endSection: _noop,
 };
 
+const CONTEXT_TYPES = {
+  TEST: 'test',
+  DESCRIBE: 'describe'
+};
+
 class TimelineArtifactPlugin extends ArtifactPlugin {
   constructor(config) {
     super(config);
@@ -32,23 +37,23 @@ class TimelineArtifactPlugin extends ArtifactPlugin {
 
   async onRunDescribeStart(suite) {
     const sectionName = (suite.name === 'ROOT_DESCRIBE_BLOCK' ? this._deviceName : suite.name);
-    this._trace.startSection(sectionName);
+    this._trace.startSection(sectionName, { context: CONTEXT_TYPES.DESCRIBE });
     await super.onRunDescribeStart(suite);
   }
 
   async onRunDescribeFinish(suite) {
     const sectionName = (suite.name === 'ROOT_DESCRIBE_BLOCK' ? this._deviceName : suite.name);
-    this._trace.endSection(sectionName);
+    this._trace.endSection(sectionName, { context: CONTEXT_TYPES.DESCRIBE });
     await super.onRunDescribeFinish(suite);
   }
 
   async onTestStart(testSummary) {
-    this._trace.startSection(testSummary.title);
+    this._trace.startSection(testSummary.title, { context: CONTEXT_TYPES.TEST });
     await super.onTestStart(testSummary);
   }
 
   async onTestDone(testSummary) {
-    this._trace.endSection(testSummary.title, { status: testSummary.status });
+    this._trace.endSection(testSummary.title, { status: testSummary.status, context: CONTEXT_TYPES.TEST });
     await super.onTestDone(testSummary);
   }
 
diff --git a/detox/src/utils/ChromeTracingExporter.js b/detox/src/utils/ChromeTracingExporter.js
index 5c4843403..d29f4143b 100644
--- a/detox/src/utils/ChromeTracingExporter.js
+++ b/detox/src/utils/ChromeTracingExporter.js
@@ -26,15 +26,16 @@ class ChromeTracingExporter {
 
   _parseEvent(event) {
     const { name, ts, args, type } = event;
+    const tsInMicroseconds = ts * 1000;
     switch (type) {
-      case 'start': return this._event(name, 'B', ts * 1000, args);
-      case 'end': return this._event(name, 'E', ts * 1000, args);
+      case 'start': return this._event(name, 'B', tsInMicroseconds, args);
+      case 'end': return this._event(name, 'E', tsInMicroseconds, args);
       case 'init': return [
-          this._event('process_name', 'M', ts, { name: this._process.name }),
-          this._event('thread_name', 'M', ts, { name: this._thread.name }),
+          this._event('process_name', 'M', tsInMicroseconds, { name: this._process.name }),
+          this._event('thread_name', 'M', tsInMicroseconds, { name: this._thread.name }),
         ];
       default:
-        throw new DetoxRuntimeError(`Invalid type '${type}' in event: ${event}`);
+        throw new DetoxRuntimeError({ message: `Invalid type '${type}' in event: ${event}` });
     }
   }
 


Test patch:
diff --git a/detox/src/artifacts/timeline/TimelineArtifactPlugin.test.js b/detox/src/artifacts/timeline/TimelineArtifactPlugin.test.js
index 6fd630b40..812ddda0f 100644
--- a/detox/src/artifacts/timeline/TimelineArtifactPlugin.test.js
+++ b/detox/src/artifacts/timeline/TimelineArtifactPlugin.test.js
@@ -63,7 +63,7 @@ describe('TimelineArtifactPlugin', () => {
 
     it('should trace a section-start with the suite name on describe-start', async () => {
       await uutEnabled().onRunDescribeStart(suite);
-      expect(trace.startSection).toHaveBeenCalledWith(suite.name);
+      expect(trace.startSection).toHaveBeenCalledWith(suite.name, { context: 'describe' });
     });
 
     it('should save the suite in the plugin-context on describe-start', async () => {
@@ -76,7 +76,7 @@ describe('TimelineArtifactPlugin', () => {
       const uut = uutEnabled();
       await uut.onRunDescribeStart(suite);
       await uut.onRunDescribeFinish(suite);
-      expect(trace.endSection).toHaveBeenCalledWith(suite.name);
+      expect(trace.endSection).toHaveBeenCalledWith(suite.name, { context: 'describe' });
     });
 
     it('should not trace anything if disabled', async () => {
@@ -104,7 +104,7 @@ describe('TimelineArtifactPlugin', () => {
         const uut = uutEnabled();
         await uut.onBootDevice({ deviceId });
         await uut.onRunDescribeStart(rootSuite);
-        expect(trace.startSection).toHaveBeenCalledWith(deviceId);
+        expect(trace.startSection).toHaveBeenCalledWith(deviceId, { context: 'describe' });
         expect(trace.startSection).toHaveBeenCalledTimes(1);
       });
 
@@ -113,7 +113,7 @@ describe('TimelineArtifactPlugin', () => {
         await uut.onBootDevice({ deviceId });
         await uut.onRunDescribeStart(rootSuite);
         await uut.onRunDescribeFinish(rootSuite);
-        expect(trace.endSection).toHaveBeenCalledWith(deviceId);
+        expect(trace.endSection).toHaveBeenCalledWith(deviceId, { context: 'describe' });
         expect(trace.endSection).toHaveBeenCalledTimes(1);
       });
     });
@@ -127,7 +127,7 @@ describe('TimelineArtifactPlugin', () => {
     it('should trace a section-start with the test name on test-start', async () => {
       const uut = uutEnabled();
       await uut.onTestStart(testSummary);
-      expect(trace.startSection).toHaveBeenCalledWith(testSummary.title);
+      expect(trace.startSection).toHaveBeenCalledWith(testSummary.title, { context: 'test' });
     });
 
     it('should save the test summary in the plugin\'s context on test-start', async () => {
@@ -139,7 +139,7 @@ describe('TimelineArtifactPlugin', () => {
     it('should trace a section-end with the test name on test-end', async () => {
       const _testSummary = { ...testSummary, status: 'alright!' };
       await uutEnabled().onTestDone(_testSummary);
-      expect(trace.endSection).toHaveBeenCalledWith(testSummary.title, { status: 'alright!' });
+      expect(trace.endSection).toHaveBeenCalledWith(testSummary.title, { status: 'alright!', context: 'test' });
     });
 
     it('should not trace anything if disabled', async () => {
diff --git a/detox/src/utils/ChromeTracingExporter.test.js b/detox/src/utils/ChromeTracingExporter.test.js
index c698679a6..254fa1ddd 100644
--- a/detox/src/utils/ChromeTracingExporter.test.js
+++ b/detox/src/utils/ChromeTracingExporter.test.js
@@ -63,7 +63,7 @@ describe('Chrome-Tracing exporter', () => {
       type: 'init',
       ts: 1234,
     };
-    const expectedTs = initEvent.ts;
+    const expectedTs = initEvent.ts * 1000;
     const expectedObjects = [{
       name: 'process_name',
       pid: processId,
diff --git a/detox/test/integration/__snapshots__/timeline-artifact.test.js.snap b/detox/test/integration/__snapshots__/timeline-artifact.test.js.snap
index b16b12a7d..8c9f71089 100644
--- a/detox/test/integration/__snapshots__/timeline-artifact.test.js.snap
+++ b/detox/test/integration/__snapshots__/timeline-artifact.test.js.snap
@@ -1,3 +1,3 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`Timeline integration test should deterministically produce a timeline artifact 1`] = `"[{\\"name\\":\\"process_name\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"detox\\"}},{\\"name\\":\\"thread_name\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"Worker #2\\"}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1100000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1300000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1400000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1500000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1700000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1800000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"StubDevice#2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1900000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"Stub1\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2000000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2100000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2300000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"Navigate to sanity\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2400000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"Navigate to sanity\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2500000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"Asserting various texts\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"Asserting various texts\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2700000,\\"ph\\":\\"E\\",\\"args\\":{}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2800000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"failed\\"}},{\\"name\\":\\"Stub1\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2900000,\\"ph\\":\\"E\\",\\"args\\":{}},{\\"name\\":\\"StubDevice#2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3000000,\\"ph\\":\\"E\\",\\"args\\":{}},{\\"name\\":\\"process_name\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"detox\\"}},{\\"name\\":\\"thread_name\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"Worker #1\\"}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1100000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1300000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1400000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1500000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1700000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1800000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"StubDevice#1\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1900000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"Stub3\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2000000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2100000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2300000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2400000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\"}},{\\"name\\":\\"should show hello screen after tap\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2500000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2700000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should show hello screen after tap\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2800000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\"}},{\\"name\\":\\"should show world screen after tap\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2900000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3000000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3100000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should show world screen after tap\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3200000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\"}},{\\"name\\":\\"Stub3\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3300000,\\"ph\\":\\"E\\",\\"args\\":{}},{\\"name\\":\\"StubDevice#1\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3400000,\\"ph\\":\\"E\\",\\"args\\":{}},{\\"name\\":\\"process_name\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3100,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"detox\\"}},{\\"name\\":\\"thread_name\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3100,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"Worker #2\\"}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3300000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3400000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3500000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3600000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3700000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3800000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3900000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"StubDevice#2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4000000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"Stub2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4100000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4300000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4400000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4500000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\"}},{\\"name\\":\\"should show hello screen after tap\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4700000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4800000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should show hello screen after tap\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4900000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\"}},{\\"name\\":\\"Stub2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":5000000,\\"ph\\":\\"E\\",\\"args\\":{}},{\\"name\\":\\"StubDevice#2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":5100000,\\"ph\\":\\"E\\",\\"args\\":{}}"`;
+exports[`Timeline integration test should deterministically produce a timeline artifact 1`] = `"[{\\"name\\":\\"process_name\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1000000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"detox\\"}},{\\"name\\":\\"thread_name\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1000000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"Worker #2\\"}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1100000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1300000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1400000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1500000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1700000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1800000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"StubDevice#2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":1900000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"Stub1\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2000000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2100000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"test\\"}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2300000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"Navigate to sanity\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2400000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"Navigate to sanity\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2500000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"Asserting various texts\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"Asserting various texts\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2700000,\\"ph\\":\\"E\\",\\"args\\":{}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2800000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"failed\\",\\"context\\":\\"test\\"}},{\\"name\\":\\"Stub1\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":2900000,\\"ph\\":\\"E\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"StubDevice#2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3000000,\\"ph\\":\\"E\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"process_name\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1000000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"detox\\"}},{\\"name\\":\\"thread_name\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1000000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"Worker #1\\"}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1100000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1300000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1400000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1500000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1700000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1800000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"StubDevice#1\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":1900000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"Stub3\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2000000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2100000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"test\\"}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2300000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2400000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\",\\"context\\":\\"test\\"}},{\\"name\\":\\"should show hello screen after tap\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2500000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"test\\"}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2600000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2700000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should show hello screen after tap\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2800000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\",\\"context\\":\\"test\\"}},{\\"name\\":\\"should show world screen after tap\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":2900000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"test\\"}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3000000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3100000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should show world screen after tap\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3200000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\",\\"context\\":\\"test\\"}},{\\"name\\":\\"Stub3\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3300000,\\"ph\\":\\"E\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"StubDevice#1\\",\\"pid\\":0,\\"tid\\":\\"1\\",\\"ts\\":3400000,\\"ph\\":\\"E\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"process_name\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3100000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"detox\\"}},{\\"name\\":\\"thread_name\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3100000,\\"ph\\":\\"M\\",\\"args\\":{\\"name\\":\\"Worker #2\\"}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3200000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3300000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"allocateDevice\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3400000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3500000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appUninstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3600000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3700000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"appInstall\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3800000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"detoxInit\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":3900000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"StubDevice#2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4000000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"Stub2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4100000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4200000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"test\\"}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4300000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4400000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should have welcome screen\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4500000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\",\\"context\\":\\"test\\"}},{\\"name\\":\\"should show hello screen after tap\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4600000,\\"ph\\":\\"B\\",\\"args\\":{\\"context\\":\\"test\\"}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4700000,\\"ph\\":\\"B\\",\\"args\\":{}},{\\"name\\":\\"reloadRN\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4800000,\\"ph\\":\\"E\\",\\"args\\":{\\"success\\":true}},{\\"name\\":\\"should show hello screen after tap\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":4900000,\\"ph\\":\\"E\\",\\"args\\":{\\"status\\":\\"passed\\",\\"context\\":\\"test\\"}},{\\"name\\":\\"Stub2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":5000000,\\"ph\\":\\"E\\",\\"args\\":{\\"context\\":\\"describe\\"}},{\\"name\\":\\"StubDevice#2\\",\\"pid\\":0,\\"tid\\":\\"2\\",\\"ts\\":5100000,\\"ph\\":\\"E\\",\\"args\\":{\\"context\\":\\"describe\\"}}"`;