def testPltNoLoadEvents(self):
   trace = self._MakeTrace()
   # Change the MarkLoad events.
   for e in trace.tracing_track.GetEvents():
     if e.name == 'MarkLoad':
       e.tracing_event['name'] = 'dummy'
   loading_report = report.LoadingReport(trace).GenerateReport()
   self.assertAlmostEqual(self._REQUEST_OFFSET + self._DURATION,
                          loading_report['plt_ms'])
 def testAdTrackingRules(self):
   ad_domain = 'i-ve-got-the-best-ads.com'
   self.requests[0].url = 'http://www.' + ad_domain
   trace = self._MakeTrace()
   loading_report = report.LoadingReport(
       trace, [ad_domain], []).GenerateReport()
   self.assertEqual(1, loading_report['ad_requests'])
   self.assertEqual(1, loading_report['ad_or_tracking_requests'])
   self.assertEqual(1, loading_report['ad_or_tracking_initiated_requests'])
   self.assertIsNone(loading_report['tracking_requests'])
Esempio n. 3
0
 def testAdTrackingRules(self):
   trace = self._MakeTrace()
   loading_report = report.LoadingReport(
       trace, [self.ad_domain], []).GenerateReport()
   self.assertEqual(1, loading_report['ad_requests'])
   self.assertEqual(1, loading_report['ad_or_tracking_requests'])
   self.assertEqual(1, loading_report['ad_or_tracking_initiated_requests'])
   self.assertIsNone(loading_report['tracking_requests'])
   self.assertEqual(
       self._FIRST_REQUEST_DATA_LENGTH + metrics.HTTP_OK_LENGTH,
       loading_report['ad_or_tracking_initiated_transfer_size'])
Esempio n. 4
0
 def testGenerateReport(self):
   trace = self._MakeTrace()
   loading_report = report.LoadingReport(trace).GenerateReport()
   self.assertEqual(trace.url, loading_report['url'])
   self.assertEqual(self._TEXT_PAINT - self._NAVIGATION_START_TIME,
                    loading_report['first_text_ms'])
   self.assertEqual(self._SIGNIFICANT_PAINT - self._NAVIGATION_START_TIME,
                    loading_report['significant_ms'])
   self.assertEqual(self._CONTENTFUL_PAINT - self._NAVIGATION_START_TIME,
                    loading_report['contentful_ms'])
   self.assertAlmostEqual(self._LOAD_END_TIME - self._NAVIGATION_START_TIME,
                          loading_report['plt_ms'])
   self.assertEqual(2, loading_report['total_requests'])
   self.assertAlmostEqual(0.34, loading_report['contentful_byte_frac'], 2)
   self.assertAlmostEqual(0.1844, loading_report['significant_byte_frac'], 2)
   self.assertEqual(2, loading_report['plt_requests'])
   self.assertEqual(1, loading_report['first_text_requests'])
   self.assertEqual(1, loading_report['contentful_requests'])
   self.assertEqual(1, loading_report['significant_requests'])
   self.assertEqual(1, loading_report['plt_preloaded_requests'])
   self.assertEqual(1, loading_report['first_text_preloaded_requests'])
   self.assertEqual(1, loading_report['contentful_preloaded_requests'])
   self.assertEqual(1, loading_report['significant_preloaded_requests'])
   self.assertEqual(401, loading_report['plt_requests_cost'])
   self.assertEqual(1, loading_report['first_text_requests_cost'])
   self.assertEqual(1, loading_report['contentful_requests_cost'])
   self.assertEqual(1, loading_report['significant_requests_cost'])
   self.assertEqual(1, loading_report['plt_preloaded_requests_cost'])
   self.assertEqual(1, loading_report['first_text_preloaded_requests_cost'])
   self.assertEqual(1, loading_report['contentful_preloaded_requests_cost'])
   self.assertEqual(1, loading_report['significant_preloaded_requests_cost'])
   self.assertEqual(400, loading_report['plt_predicted_no_state_prefetch_ms'])
   self.assertEqual(14,
       loading_report['first_text_predicted_no_state_prefetch_ms'])
   self.assertEqual(104,
       loading_report['contentful_predicted_no_state_prefetch_ms'])
   self.assertEqual(74,
       loading_report['significant_predicted_no_state_prefetch_ms'])
   self.assertEqual('', loading_report['contentful_inversion'])
   self.assertEqual('', loading_report['significant_inversion'])
   self.assertIsNone(loading_report['ad_requests'])
   self.assertIsNone(loading_report['ad_or_tracking_requests'])
   self.assertIsNone(loading_report['ad_or_tracking_initiated_requests'])
   self.assertIsNone(loading_report['ad_or_tracking_initiated_transfer_size'])
   self.assertIsNone(loading_report['ad_or_tracking_script_frac'])
   self.assertIsNone(loading_report['ad_or_tracking_parsing_frac'])
   self.assertEqual(
       self._FIRST_REQUEST_DATA_LENGTH + self._SECOND_REQUEST_DATA_LENGTH
       + metrics.HTTP_OK_LENGTH * 2,
       loading_report['transfer_size'])
   self.assertEqual(0, loading_report['total_queuing_blocked_msec'])
   self.assertEqual(0, loading_report['total_queuing_load_msec'])
   self.assertEqual(0, loading_report['average_blocking_request_count'])
   self.assertEqual(0, loading_report['median_blocking_request_count'])
Esempio n. 5
0
 def testAdsAndTrackingCost(self):
   load_time = float(self._LOAD_END_TIME - self._NAVIGATION_START_TIME)
   self.trace_events.append(
      {'ts':  load_time / 3. * self.MILLI_TO_MICRO,
       'pid': 1, 'tid': 1, 'ph': 'X',
       'dur': load_time / 2. * self.MILLI_TO_MICRO,
       'cat': 'devtools.timeline', 'name': 'EvaluateScript',
       'args': {'data': {'scriptName': self.ad_url}}})
   loading_report = report.LoadingReport(
       self._MakeTrace(), [self.ad_domain]).GenerateReport()
   self.assertAlmostEqual(.5, loading_report['ad_or_tracking_script_frac'], 2)
   self.assertAlmostEqual(0., loading_report['ad_or_tracking_parsing_frac'])
Esempio n. 6
0
 def testThreadBusyness(self):
   loading_report = report.LoadingReport(self._MakeTrace()).GenerateReport()
   self.assertAlmostEqual(
       1., loading_report['significant_activity_frac'])
   self.assertAlmostEqual(
       float(self._TOPLEVEL_EVENT_DURATION - self._TOPLEVEL_EVENT_OFFSET)
       / (self._CONTENTFUL_PAINT - self._NAVIGATION_START_TIME),
       loading_report['contentful_activity_frac'])
   self.assertAlmostEqual(
       float(self._TOPLEVEL_EVENT_DURATION - self._TOPLEVEL_EVENT_OFFSET)
       / (self._LOAD_END_TIME - self._NAVIGATION_START_TIME),
       loading_report['plt_activity_frac'])
 def testInversion(self):
   self.requests[0].timing.loading_finished = 4 * (
       self._REQUEST_OFFSET + self._DURATION)
   self.requests[1].initiator['type'] = 'parser'
   self.requests[1].initiator['url'] = self.requests[0].url
   for e in self.trace_events:
     if e['name'] == 'firstContentfulPaint':
       e['ts'] = self.MILLI_TO_MICRO * (
           self._FIRST_REQUEST_TIME +  self._REQUEST_OFFSET +
           self._DURATION + 1)
       break
   loading_report = report.LoadingReport(self._MakeTrace()).GenerateReport()
   self.assertEqual(self.requests[0].url,
                    loading_report['contentful_inversion'])
   self.assertEqual(None, loading_report['significant_inversion'])
 def testGenerateReport(self):
   trace = self._MakeTrace()
   loading_report = report.LoadingReport(trace).GenerateReport()
   self.assertEqual(trace.url, loading_report['url'])
   self.assertEqual(self._TEXT_PAINT - self._NAVIGATION_START_TIME,
                    loading_report['first_text_ms'])
   self.assertEqual(self._SIGNIFICANT_PAINT - self._NAVIGATION_START_TIME,
                    loading_report['significant_paint_ms'])
   self.assertEqual(self._CONTENTFUL_PAINT - self._NAVIGATION_START_TIME,
                    loading_report['contentful_paint_ms'])
   self.assertAlmostEqual(self._LOAD_END_TIME - self._NAVIGATION_START_TIME,
                          loading_report['plt_ms'])
   self.assertAlmostEqual(0.34, loading_report['contentful_byte_frac'], 2)
   self.assertAlmostEqual(0.1844, loading_report['significant_byte_frac'], 2)
   self.assertIsNone(loading_report['contentful_inversion'])
   self.assertIsNone(loading_report['significant_inversion'])
   self.assertIsNone(loading_report['ad_requests'])
   self.assertIsNone(loading_report['ad_or_tracking_requests'])
   self.assertIsNone(loading_report['ad_or_tracking_initiated_requests'])
Esempio n. 9
0
 def testQueueStats(self):
   # We use three requests, A, B and C. A is not blocked, B is blocked by A,
   # and C blocked by A and B.
   BASE_MSEC = self._FIRST_REQUEST_TIME + 4 * self._DURATION
   self.requests = []
   request_A = self.trace_creator.RequestAt(BASE_MSEC, 5)
   request_B = self.trace_creator.RequestAt(BASE_MSEC + 6, 5)
   request_C = self.trace_creator.RequestAt(BASE_MSEC + 12, 10)
   self.requests.extend([request_A, request_B, request_C])
   self._AddQueuingEvents(10, request_A.url,
                          BASE_MSEC, BASE_MSEC, BASE_MSEC + 5)
   self._AddQueuingEvents(20, request_B.url,
                          BASE_MSEC + 1, BASE_MSEC + 6, BASE_MSEC + 11)
   self._AddQueuingEvents(30, request_C.url,
                          BASE_MSEC + 2, BASE_MSEC + 12, BASE_MSEC + 22)
   loading_report = report.LoadingReport(self._MakeTrace()).GenerateReport()
   self.assertEqual(15, loading_report['total_queuing_blocked_msec'])
   self.assertEqual(35, loading_report['total_queuing_load_msec'])
   self.assertAlmostEqual(1, loading_report['average_blocking_request_count'])
   self.assertEqual(1, loading_report['median_blocking_request_count'])
Esempio n. 10
0
  def testActivityBreakdown(self):
    loading_report = report.LoadingReport(self._MakeTrace()).GenerateReport()
    load_time = float(self._LOAD_END_TIME - self._NAVIGATION_START_TIME)
    contentful_time = float(
        self._CONTENTFUL_PAINT - self._NAVIGATION_START_TIME)

    self.assertAlmostEqual(self._SCRIPT_EVENT_DURATION / load_time,
                           loading_report['plt_script_frac'])
    self.assertAlmostEqual(
        (self._PARSING_EVENT_DURATION - self._SCRIPT_EVENT_DURATION)
        / load_time,
        loading_report['plt_parsing_frac'])

    self.assertAlmostEqual(1., loading_report['significant_script_frac'])
    self.assertAlmostEqual(0., loading_report['significant_parsing_frac'])

    self.assertAlmostEqual(self._SCRIPT_EVENT_DURATION / contentful_time,
                           loading_report['contentful_script_frac'])
    self.assertAlmostEqual(
        (self._PARSING_EVENT_DURATION - self._SCRIPT_EVENT_DURATION)
        / contentful_time, loading_report['contentful_parsing_frac'])