示例#1
0
 def testDisable(self):
   with self._test_trace(disable=False):
     with open(self._log_path, 'r') as f:
       self.assertTrue(trace_event.trace_is_enabled())
       trace_event.trace_disable()
       self.assertEquals(len(json.loads(f.read() + ']')), 1)
       self.assertFalse(trace_event.trace_is_enabled())
 def testDisable(self):
     with self._test_trace(disable=False):
         with open(self._log_path, 'r') as f:
             self.assertTrue(trace_event.trace_is_enabled())
             trace_event.trace_disable()
             self.assertEquals(len(json.loads(f.read() + ']')), 1)
             self.assertFalse(trace_event.trace_is_enabled())
 def StopAgentTracing(self):
     if not self._is_tracing_controllable:
         return
     assert trace_event.trace_is_enabled(), 'Tracing not running'
     trace_event.trace_disable()
     assert not trace_event.trace_is_enabled(
     ), 'Tracing didnt disable properly.'
    def RunTests(self):
        # Affinitize the tests.
        if self._test_instance.trace_output:
            assert not trace_event.trace_is_enabled(
            ), 'Tracing already running.'
            trace_event.trace_enable(self._test_instance.trace_output +
                                     '.json')
        self._SplitTestsByAffinity()
        if not self._test_buckets and not self._no_device_tests:
            raise local_device_test_run.NoTestsError()

        def run_no_devices_tests():
            if not self._no_device_tests:
                return []
            s = HostTestShard(self._env,
                              self._test_instance,
                              self._no_device_tests,
                              retries=3,
                              timeout=self._timeout)
            return [s.RunTestsOnShard()]

        def device_shard_helper(shard_id):
            if device_status.IsBlacklisted(str(self._devices[shard_id]),
                                           self._env.blacklist):
                logging.warning(
                    'Device %s is not active. Will not create shard %s.',
                    str(self._devices[shard_id]), shard_id)
                return None
            s = DeviceTestShard(self._env,
                                self._test_instance,
                                self._devices[shard_id],
                                shard_id,
                                self._test_buckets[shard_id],
                                retries=self._env.max_tries,
                                timeout=self._timeout)
            return s.RunTestsOnShard()

        def run_devices_tests():
            if not self._test_buckets:
                return []
            if self._devices is None:
                self._devices = self._GetAllDevices(
                    self._env.devices, self._test_instance.known_devices_file)

            device_indices = range(
                min(len(self._devices), len(self._test_buckets)))
            shards = parallelizer.Parallelizer(device_indices).pMap(
                device_shard_helper)
            return [x for x in shards.pGet(self._timeout) if x is not None]

        host_test_results, device_test_results = reraiser_thread.RunAsync(
            [run_no_devices_tests, run_devices_tests])
        if self._test_instance.trace_output:
            assert trace_event.trace_is_enabled(), 'Tracing not running.'
            trace_event.trace_disable()
            local_device_test_run.LocalDeviceTestRun._JsonToTrace(
                self._test_instance.trace_output + '.json',
                self._test_instance.trace_output)
        return host_test_results + device_test_results
示例#5
0
 def testDisable(self):
     _old_multiprocessing_process = multiprocessing.Process
     with self._test_trace(disable=False):
         with open(self._log_path, 'r') as f:
             self.assertTrue(trace_event.trace_is_enabled())
             self.assertEqual(multiprocessing.Process,
                              multiprocessing_shim.ProcessShim)
             trace_event.trace_disable()
             self.assertEqual(multiprocessing.Process,
                              _old_multiprocessing_process)
             self.assertEquals(len(json.loads(f.read() + ']')), 1)
             self.assertFalse(trace_event.trace_is_enabled())
示例#6
0
  def StartAgentTracing(self, config, timeout):
    self._is_tracing_controllable = self._IsTracingControllable()
    if not self._is_tracing_controllable:
      return False

    tf = tempfile.NamedTemporaryFile(delete=False)
    self._trace_log = tf.name
    tf.close()
    del config # unused
    del timeout # unused
    assert not trace_event.trace_is_enabled(), 'Tracing already running.'
    trace_event.trace_enable(self._trace_log)
    assert trace_event.trace_is_enabled(), 'Tracing didn\'t enable properly.'
    return True
  def RunTests(self):
    # Affinitize the tests.
    if self._test_instance.trace_output:
      assert not trace_event.trace_is_enabled(), 'Tracing already running.'
      trace_event.trace_enable(self._test_instance.trace_output + '.json')
    self._SplitTestsByAffinity()
    if not self._test_buckets and not self._no_device_tests:
      raise local_device_test_run.NoTestsError()

    def run_no_devices_tests():
      if not self._no_device_tests:
        return []
      s = HostTestShard(self._env, self._test_instance, self._no_device_tests,
                        retries=3, timeout=self._timeout)
      return [s.RunTestsOnShard()]

    def device_shard_helper(shard_id):
      if device_status.IsBlacklisted(
           str(self._devices[shard_id]), self._env.blacklist):
        logging.warning('Device %s is not active. Will not create shard %s.',
                        str(self._devices[shard_id]), shard_id)
        return None
      s = DeviceTestShard(self._env, self._test_instance,
                          self._devices[shard_id], shard_id,
                          self._test_buckets[shard_id],
                          retries=self._env.max_tries, timeout=self._timeout)
      return s.RunTestsOnShard()

    def run_devices_tests():
      if not self._test_buckets:
        return []
      if self._devices is None:
        self._devices = self._GetAllDevices(
            self._env.devices, self._test_instance.known_devices_file)

      device_indices = range(min(len(self._devices), len(self._test_buckets)))
      shards = parallelizer.Parallelizer(device_indices).pMap(
          device_shard_helper)
      return [x for x in shards.pGet(self._timeout) if x is not None]

    host_test_results, device_test_results = reraiser_thread.RunAsync(
        [run_no_devices_tests, run_devices_tests])
    if self._test_instance.trace_output:
      assert trace_event.trace_is_enabled(), 'Tracing not running.'
      trace_event.trace_disable()
      local_device_test_run.LocalDeviceTestRun._JsonToTrace(
          self._test_instance.trace_output + '.json',
          self._test_instance.trace_output)
    return host_test_results + device_test_results
 def DisableTracing(self):
   if not trace_event.trace_is_enabled():
     logging.warning('Tracing is not running.')
   else:
     trace_event.trace_disable()
   self._JsonToTrace(self._trace_output + '.json',
                     self._trace_output)
 def DisableTracing(self):
   if not trace_event.trace_is_enabled():
     logging.warning('Tracing is not running.')
   else:
     trace_event.trace_disable()
   self._JsonToTrace(self._trace_output + '.json',
                     self._trace_output)
示例#10
0
 def CollectAgentTraceData(self, trace_data_builder):
   if not self._is_tracing_controllable:
     return
   assert not trace_event.trace_is_enabled(), 'Stop tracing before collection.'
   with open(self._trace_log, 'r') as fp:
     data = ast.literal_eval(fp.read() + ']')
   trace_data_builder.SetTraceFor(trace_data_module.TELEMETRY_PART, {
       "traceEvents": data,
       "metadata": {
           # TODO(charliea): For right now, we use "TELEMETRY" as the clock
           # domain to guarantee that Telemetry is given its own clock
           # domain. Telemetry isn't really a clock domain, though: it's a
           # system that USES a clock domain like LINUX_CLOCK_MONOTONIC or
           # WIN_QPC. However, there's a chance that a Telemetry controller
           # running on Linux (using LINUX_CLOCK_MONOTONIC) is interacting with
           # an Android phone (also using LINUX_CLOCK_MONOTONIC, but on a
           # different machine). The current logic collapses clock domains
           # based solely on the clock domain string, but we really should to
           # collapse based on some (device ID, clock domain ID) tuple. Giving
           # Telemetry its own clock domain is a work-around for this.
           "clock-domain": "TELEMETRY",
           "iteration-info": (self._iteration_info.AsDict()
               if self._iteration_info else {}),
       }
   })
   try:
     os.remove(self._trace_log)
     self._trace_log = None
   except OSError:
     logging.exception('Error when deleting %s, will try again at exit.',
                       self._trace_log)
     def DeleteAtExit(path):
       os.remove(path)
     atexit_with_log.Register(DeleteAtExit, self._trace_log)
   self._trace_log = None
示例#11
0
 def StopAgentTracing(self, trace_data_builder):
   if not self._is_tracing_controllable:
     return
   assert trace_event.trace_is_enabled(), 'Tracing not running'
   trace_event.trace_disable()
   assert not trace_event.trace_is_enabled(), 'Tracing didnt disable properly.'
   with open(self._trace_log, 'r') as fp:
     data = ast.literal_eval(fp.read() + ']')
   trace_data_builder.AddEventsTo(trace_data_module.TELEMETRY_PART, data)
   try:
     os.remove(self._trace_log)
     self._trace_log = None
   except OSError:
     logging.exception('Error when deleting %s, will try again at exit.',
                       self._trace_log)
     def DeleteAtExit(path):
       os.remove(path)
     atexit.register(DeleteAtExit, self._trace_log)
   self._trace_log = None
示例#12
0
 def testEnable(self):
     with self._test_trace():
         with open(self._log_path, 'r') as f:
             log_output = json.loads(f.read() + ']')
             self.assertEquals(len(log_output), 1)
             self.assertTrue(trace_event.trace_is_enabled())
             log_output = log_output.pop()
             self.assertEquals(log_output['category'], 'process_argv')
             self.assertEquals(log_output['name'], 'process_argv')
             self.assertTrue(log_output['args']['argv'])
             self.assertEquals(log_output['ph'], 'M')
示例#13
0
 def testEnable(self):
   with self._test_trace():
     with open(self._log_path, 'r') as f:
       log_output = json.loads(f.read() + ']')
       self.assertEquals(len(log_output), 1)
       self.assertTrue(trace_event.trace_is_enabled())
       log_output = log_output.pop()
       self.assertEquals(log_output['category'], 'process_argv')
       self.assertEquals(log_output['name'], 'process_argv')
       self.assertTrue(log_output['args']['argv'])
       self.assertEquals(log_output['ph'], 'M')
 def CollectAgentTraceData(self, trace_data_builder):
   if not self._is_tracing_controllable:
     return
   assert not trace_event.trace_is_enabled(), 'Stop tracing before collection.'
   with open(self._trace_log, 'r') as fp:
     data = ast.literal_eval(fp.read() + ']')
   trace_data_builder.AddEventsTo(trace_data_module.TELEMETRY_PART, data)
   try:
     os.remove(self._trace_log)
     self._trace_log = None
   except OSError:
     logging.exception('Error when deleting %s, will try again at exit.',
                       self._trace_log)
     def DeleteAtExit(path):
       os.remove(path)
     atexit_with_log.Register(DeleteAtExit, self._trace_log)
   self._trace_log = None
    def CollectAgentTraceData(self, trace_data_builder):
        if not self._is_tracing_controllable:
            return
        assert not trace_event.trace_is_enabled(
        ), 'Stop tracing before collection.'
        with open(self._trace_log, 'r') as fp:
            data = ast.literal_eval(fp.read() + ']')
        trace_data_builder.AddEventsTo(trace_data_module.TELEMETRY_PART, data)
        try:
            os.remove(self._trace_log)
            self._trace_log = None
        except OSError:
            logging.exception(
                'Error when deleting %s, will try again at exit.',
                self._trace_log)

            def DeleteAtExit(path):
                os.remove(path)

            atexit_with_log.Register(DeleteAtExit, self._trace_log)
        self._trace_log = None
 def StopAgentTracing(self):
   if not self._is_tracing_controllable:
     return
   assert trace_event.trace_is_enabled(), 'Tracing not running'
   trace_event.trace_disable()
   assert not trace_event.trace_is_enabled(), 'Tracing didnt disable properly.'
def IsAgentEnabled():
  """Returns True if the agent is currently enabled and tracing."""
  return trace_event.trace_is_enabled()
示例#18
0
def IsAgentEnabled():
    """Returns True if the agent is currently enabled and tracing."""
    return trace_event.trace_is_enabled()
示例#19
0
 def testIsEnabledTrue(self):
     with self._test_trace():
         self.assertTrue(trace_event.trace_is_enabled())
示例#20
0
 def testIsEnabledFalse(self):
     self.assertFalse(trace_event.trace_is_enabled())
 def EnableTracing(self):
     if trace_event.trace_is_enabled():
         logging.warning('Tracing is already running.')
     else:
         trace_event.trace_enable(self._trace_output)
 def DisableTracing():
     if not trace_event.trace_is_enabled():
         logging.warning('Tracing is not running.')
     else:
         trace_event.trace_disable()
示例#23
0
 def testIsEnabledFalse(self):
   self.assertFalse(trace_event.trace_is_enabled())
示例#24
0
 def DisableTracing():
   if not trace_event.trace_is_enabled():
     logging.warning('Tracing is not running.')
   else:
     trace_event.trace_disable()
示例#25
0
 def testIsEnabledTrue(self):
   with self._test_trace():
     self.assertTrue(trace_event.trace_is_enabled())
示例#26
0
 def EnableTracing(self):
   if trace_event.trace_is_enabled():
     logging.warning('Tracing is already running.')
   else:
     trace_event.trace_enable(self._trace_output)
 def is_tracing(self):
   return trace_event.trace_is_enabled()