def test_DictConstruction(self):
     graph = test_utils.TestResourceGraph({
         'request_track': {
             'events': [
                 test_utils.MakeRequest(0, 'null', 100, 100.5,
                                        101).ToJsonDict(),
                 test_utils.MakeRequest(1, 0, 102, 102.5, 103).ToJsonDict(),
                 test_utils.MakeRequest(2, 0, 102, 102.5, 103).ToJsonDict(),
                 test_utils.MakeRequest(3, 2, 104, 114.5, 105).ToJsonDict()
             ],
             'metadata': {
                 request_track.RequestTrack._DUPLICATES_KEY: 0,
                 request_track.RequestTrack._INCONSISTENT_INITIATORS_KEY: 0
             }
         },
         'url': 'foo.com',
         'tracing_track': {
             'events': []
         },
         'page_track': {
             'events': []
         },
         'metadata': {}
     })
     self.assertEqual(self.SuccessorIndicies(graph._nodes[0]), [1, 2])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[1]), [])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[2]), [3])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[3]), [])
 def test_MaxPath(self):
     requests = [
         test_utils.MakeRequest(0, 'null', 100, 110, 111),
         test_utils.MakeRequest(1, 0, 115, 120, 121),
         test_utils.MakeRequest(2, 0, 112, 120, 121),
         test_utils.MakeRequest(3, 1, 122, 126, 127),
         test_utils.MakeRequest(4, 3, 127, 128, 129),
         test_utils.MakeRequest(5, 'null', 100, 105, 106),
         test_utils.MakeRequest(6, 5, 105, 110, 111)
     ]
     graph = test_utils.TestResourceGraph.FromRequestList(requests)
     path_list = []
     self.assertEqual(29, graph.Cost(path_list))
     self.assertEqual([0, 1, 3, 4], [n.Index() for n in path_list])
 def test_Costing(self):
     requests = [
         test_utils.MakeRequest(0, 'null', 100, 105, 110),
         test_utils.MakeRequest(1, 0, 115, 117, 120),
         test_utils.MakeRequest(2, 0, 112, 116, 120),
         test_utils.MakeRequest(3, 1, 122, 124, 126),
         test_utils.MakeRequest(4, 3, 127, 127.5, 128),
         test_utils.MakeRequest(5, 'null', 100, 103, 105),
         test_utils.MakeRequest(6, 5, 105, 107, 110)
     ]
     graph = test_utils.TestResourceGraph.FromRequestList(requests)
     self.assertEqual(self.SuccessorIndicies(graph._nodes[0]), [1, 2])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[1]), [3])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[2]), [])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[3]), [4])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[4]), [])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[5]), [6])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[6]), [])
     self.assertEqual(self.SortedIndicies(graph), [0, 5, 1, 2, 6, 3, 4])
     self.assertEqual(28, graph.Cost())
     graph.Set(cache_all=True)
     self.assertEqual(8, graph.Cost())
 def test_TimingSplitImage(self):
     # If we're all image types, then we shouldn't split by timing.
     requests = [
         test_utils.MakeRequest(0, 'null', 100, 110, 110),
         test_utils.MakeRequest(1, 0, 115, 120, 120),
         test_utils.MakeRequest(2, 0, 121, 122, 122),
         test_utils.MakeRequest(3, 0, 112, 119, 119),
         test_utils.MakeRequest(4, 2, 122, 126, 126),
         test_utils.MakeRequest(5, 2, 122, 126, 126)
     ]
     for r in requests:
         r.response_headers['Content-Type'] = 'image/gif'
     graph = test_utils.TestResourceGraph.FromRequestList(requests)
     self.assertEqual(self.SuccessorIndicies(graph._nodes[0]), [1, 2, 3])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[1]), [])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[2]), [4, 5])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[3]), [])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[4]), [])
     self.assertEqual(self.SuccessorIndicies(graph._nodes[5]), [])
     self.assertEqual(self.SortedIndicies(graph), [0, 1, 2, 3, 4, 5])
Пример #5
0
 def testHandleTimingDependenciesImages(self):
     # If we're all image types, then we shouldn't split by timing.
     requests = [
         test_utils.MakeRequest(0, 'null', 100, 110, 110),
         test_utils.MakeRequest(1, 0, 115, 120, 120),
         test_utils.MakeRequest(2, 0, 121, 122, 122),
         test_utils.MakeRequest(3, 0, 112, 119, 119),
         test_utils.MakeRequest(4, 2, 122, 126, 126),
         test_utils.MakeRequest(5, 2, 122, 126, 126)
     ]
     for r in requests:
         r.response_headers['Content-Type'] = 'image/gif'
     g = self._GraphFromRequests(requests)
     self.assertSetEqual(self._Successors(g, requests[0]),
                         set([requests[1], requests[2], requests[3]]))
     self.assertSetEqual(self._Successors(g, requests[1]), set())
     self.assertSetEqual(self._Successors(g, requests[2]),
                         set([requests[4], requests[5]]))
     self.assertSetEqual(self._Successors(g, requests[3]), set())
     self.assertSetEqual(self._Successors(g, requests[4]), set())
     self.assertSetEqual(self._Successors(g, requests[5]), set())
    def test_TimingSplit(self):
        # Timing adds node 1 as a parent to 2 but not 3.
        requests = [
            test_utils.MakeRequest(0,
                                   'null',
                                   100,
                                   110,
                                   110,
                                   magic_content_type=True),
            test_utils.MakeRequest(1,
                                   0,
                                   115,
                                   120,
                                   120,
                                   magic_content_type=True),
            test_utils.MakeRequest(2,
                                   0,
                                   121,
                                   122,
                                   122,
                                   magic_content_type=True),
            test_utils.MakeRequest(3,
                                   0,
                                   112,
                                   119,
                                   119,
                                   magic_content_type=True),
            test_utils.MakeRequest(4, 2, 122, 126, 126),
            test_utils.MakeRequest(5, 2, 122, 126, 126)
        ]
        graph = test_utils.TestResourceGraph.FromRequestList(requests)
        self.assertEqual(self.SuccessorIndicies(graph._nodes[0]), [1, 3])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[1]), [2])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[2]), [4, 5])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[3]), [])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[4]), [])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[5]), [])
        self.assertEqual(self.SortedIndicies(graph), [0, 1, 3, 2, 4, 5])

        # Change node 1 so it is a parent of 3, which becomes the parent of 2.
        requests[1] = test_utils.MakeRequest(1,
                                             0,
                                             110,
                                             111,
                                             111,
                                             magic_content_type=True)
        graph = test_utils.TestResourceGraph.FromRequestList(requests)
        self.assertEqual(self.SuccessorIndicies(graph._nodes[0]), [1])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[1]), [3])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[2]), [4, 5])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[3]), [2])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[4]), [])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[5]), [])
        self.assertEqual(self.SortedIndicies(graph), [0, 1, 3, 2, 4, 5])

        # Add an initiator dependence to 1 that will become the parent of 3.
        requests[1] = test_utils.MakeRequest(1,
                                             0,
                                             110,
                                             111,
                                             111,
                                             magic_content_type=True)
        requests.append(test_utils.MakeRequest(6, 1, 111, 112, 112))
        graph = test_utils.TestResourceGraph.FromRequestList(requests)
        # Check it doesn't change until we change the content type of 6.
        self.assertEqual(self.SuccessorIndicies(graph._nodes[6]), [])
        requests[6] = test_utils.MakeRequest(6,
                                             1,
                                             111,
                                             112,
                                             112,
                                             magic_content_type=True)
        graph = test_utils.TestResourceGraph.FromRequestList(requests)
        self.assertEqual(self.SuccessorIndicies(graph._nodes[0]), [1])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[1]), [6])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[2]), [4, 5])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[3]), [2])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[4]), [])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[5]), [])
        self.assertEqual(self.SuccessorIndicies(graph._nodes[6]), [3])
        self.assertEqual(self.SortedIndicies(graph), [0, 1, 6, 3, 2, 4, 5])
Пример #7
0
 def testBreakdownEdgeActivityByInitiator(self):
     requests = [
         test_utils.MakeRequest(0, 1, 10, 20, 30),
         test_utils.MakeRequest(0, 1, 50, 60, 70)
     ]
     raw_events = [{
         u'args': {
             u'beginData': {
                 u'url': requests[0].url
             }
         },
         u'cat': u'devtools.timeline',
         u'dur': 12 * 1000,
         u'name': u'ParseHTML',
         u'ph': u'X',
         u'pid': 1,
         u'tid': 1,
         u'ts': 25 * 1000
     }, {
         u'args': {
             u'data': {
                 'scriptName': requests[0].url
             }
         },
         u'cat': u'devtools.timeline,v8',
         u'dur': 0,
         u'name': u'EvaluateScript',
         u'ph': u'X',
         u'pid': 1,
         u'tid': 1,
         u'ts': 0
     }, {
         u'cat': u'toplevel',
         u'dur': 100 * 1000,
         u'name': u'MessageLoop::RunTask',
         u'ph': u'X',
         u'pid': 1,
         u'tid': 1,
         u'ts': 0
     }]
     activity = self._ActivityLens(requests, raw_events)
     dep = (requests[0], requests[1], 'parser')
     self.assertEquals(
         {
             'unrelated_work': 18,
             'idle': 0,
             'script': 0,
             'parsing': 12,
             'other_url': 0,
             'unknown_url': 0
         }, activity.BreakdownEdgeActivityByInitiator(dep))
     dep = (requests[0], requests[1], 'other')
     # Truncating the event from the parent request end.
     self.assertEquals(
         {
             'unrelated_work': 13,
             'idle': 0,
             'script': 0,
             'parsing': 7,
             'other_url': 0,
             'unknown_url': 0
         }, activity.BreakdownEdgeActivityByInitiator(dep))
     # Unknown URL
     raw_events[0]['args']['beginData']['url'] = None
     activity = self._ActivityLens(requests, raw_events)
     dep = (requests[0], requests[1], 'parser')
     self.assertEquals(
         {
             'unrelated_work': 18,
             'idle': 0,
             'script': 0,
             'parsing': 0,
             'other_url': 0,
             'unknown_url': 12
         }, activity.BreakdownEdgeActivityByInitiator(dep))
     # Script
     raw_events[1]['ts'] = 40 * 1000
     raw_events[1]['dur'] = 6 * 1000
     activity = self._ActivityLens(requests, raw_events)
     dep = (requests[0], requests[1], 'script')
     self.assertEquals(
         {
             'unrelated_work': 7,
             'idle': 0,
             'script': 6,
             'parsing': 0,
             'other_url': 0,
             'unknown_url': 7
         }, activity.BreakdownEdgeActivityByInitiator(dep))
     # Other URL
     raw_events[1]['args']['data']['scriptName'] = 'http://other.com/url'
     activity = self._ActivityLens(requests, raw_events)
     self.assertEquals(
         {
             'unrelated_work': 7,
             'idle': 0,
             'script': 0.,
             'parsing': 0.,
             'other_url': 6.,
             'unknown_url': 7.
         }, activity.BreakdownEdgeActivityByInitiator(dep))
Пример #8
0
    def testHandleTimingDependencies(self):
        # Timing adds node 1 as a parent to 2 but not 3.
        requests = [
            test_utils.MakeRequest(0,
                                   'null',
                                   100,
                                   110,
                                   110,
                                   magic_content_type=True),
            test_utils.MakeRequest(1,
                                   0,
                                   115,
                                   120,
                                   120,
                                   magic_content_type=True),
            test_utils.MakeRequest(2,
                                   0,
                                   121,
                                   122,
                                   122,
                                   magic_content_type=True),
            test_utils.MakeRequest(3,
                                   0,
                                   112,
                                   119,
                                   119,
                                   magic_content_type=True),
            test_utils.MakeRequest(4, 2, 122, 126, 126),
            test_utils.MakeRequest(5, 2, 122, 126, 126)
        ]

        g = self._GraphFromRequests(requests)
        self.assertSetEqual(self._Successors(g, requests[0]),
                            set([requests[1], requests[3]]))
        self.assertSetEqual(self._Successors(g, requests[1]),
                            set([requests[2]]))
        self.assertSetEqual(self._Successors(g, requests[2]),
                            set([requests[4], requests[5]]))
        self.assertSetEqual(self._Successors(g, requests[3]), set())
        self.assertSetEqual(self._Successors(g, requests[4]), set())
        self.assertSetEqual(self._Successors(g, requests[5]), set())

        # Change node 1 so it is a parent of 3, which becomes the parent of 2.
        requests[1] = test_utils.MakeRequest(1,
                                             0,
                                             110,
                                             111,
                                             111,
                                             magic_content_type=True)
        g = self._GraphFromRequests(requests)
        self.assertSetEqual(self._Successors(g, requests[0]),
                            set([requests[1]]))
        self.assertSetEqual(self._Successors(g, requests[1]),
                            set([requests[3]]))
        self.assertSetEqual(self._Successors(g, requests[2]),
                            set([requests[4], requests[5]]))
        self.assertSetEqual(self._Successors(g, requests[3]),
                            set([requests[2]]))
        self.assertSetEqual(self._Successors(g, requests[4]), set())
        self.assertSetEqual(self._Successors(g, requests[5]), set())

        # Add an initiator dependence to 1 that will become the parent of 3.
        requests[1] = test_utils.MakeRequest(1,
                                             0,
                                             110,
                                             111,
                                             111,
                                             magic_content_type=True)
        requests.append(test_utils.MakeRequest(6, 1, 111, 112, 112))
        g = self._GraphFromRequests(requests)
        # Check it doesn't change until we change the content type of 6.
        self.assertEqual(self._Successors(g, requests[6]), set())
        requests[6] = test_utils.MakeRequest(6,
                                             1,
                                             111,
                                             112,
                                             112,
                                             magic_content_type=True)
        g = self._GraphFromRequests(requests)
        self.assertSetEqual(self._Successors(g, requests[0]),
                            set([requests[1]]))
        self.assertSetEqual(self._Successors(g, requests[1]),
                            set([requests[6]]))
        self.assertSetEqual(self._Successors(g, requests[2]),
                            set([requests[4], requests[5]]))
        self.assertSetEqual(self._Successors(g, requests[3]),
                            set([requests[2]]))
        self.assertSetEqual(self._Successors(g, requests[4]), set())
        self.assertSetEqual(self._Successors(g, requests[5]), set())
        self.assertSetEqual(self._Successors(g, requests[6]),
                            set([requests[3]]))