blob: 2b0a8d7873a985d5c7aa3554bc70b6411cf3bb8b [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import unittest
from queuing_lens import QueuingLens
import request_track
import test_utils
class QueuingLensTestCase(unittest.TestCase):
MILLIS_TO_MICROS = 1000
MILLIS_TO_SECONDS = 0.001
URL_1 = 'http://1'
URL_2 = 'http://2'
def testRequestQueuing(self):
# http://1: queued at 5ms, request start at 10ms, ready at 11ms,
# done at 12ms; blocked by 2.
# http://2: queued at 4ms, request start at 4ms, ready at 5 ms, done at 9ms.
trace_events = [
{'args': {
'data': {
'request_url': self.URL_1,
'source_id': 1
}
},
'cat': QueuingLens.QUEUING_CATEGORY,
'id': 1,
'name': QueuingLens.ASYNC_NAME,
'ph': 'b',
'ts': 5 * self.MILLIS_TO_MICROS
},
{'args': {
'data': {
'source_id': 1
}
},
'cat': QueuingLens.QUEUING_CATEGORY,
'id': 1,
'name': QueuingLens.READY_NAME,
'ph': 'n',
'ts': 10 * self.MILLIS_TO_MICROS
},
{'args': {
'data': {
'source_id': 1
}
},
'cat': QueuingLens.QUEUING_CATEGORY,
'id': 1,
'name': QueuingLens.ASYNC_NAME,
'ph': 'e',
'ts': 12 * self.MILLIS_TO_MICROS
},
{'args': {
'data': {
'request_url': self.URL_2,
'source_id': 2
}
},
'cat': QueuingLens.QUEUING_CATEGORY,
'id': 2,
'name': QueuingLens.ASYNC_NAME,
'ph': 'b',
'ts': 4 * self.MILLIS_TO_MICROS
},
{'args': {
'data': {
'source_id': 2
}
},
'cat': QueuingLens.QUEUING_CATEGORY,
'id': 2,
'name': QueuingLens.READY_NAME,
'ph': 'n',
'ts': 5 * self.MILLIS_TO_MICROS
},
{'args': {
'data': {
'source_id': 2
}
},
'cat': QueuingLens.QUEUING_CATEGORY,
'id': 2,
'name': QueuingLens.ASYNC_NAME,
'ph': 'e',
'ts': 9 * self.MILLIS_TO_MICROS
}]
requests = [
request_track.Request.FromJsonDict(
{'url': self.URL_1,
'request_id': '0.1',
'timing': {'request_time': 10 * self.MILLIS_TO_SECONDS,
'loading_finished': 2}}),
request_track.Request.FromJsonDict(
{'url': self.URL_2,
'request_id': '0.2',
'timing': {'request_time': 4 * self.MILLIS_TO_SECONDS,
'loading_finished': 5}})]
trace = test_utils.LoadingTraceFromEvents(
requests=requests, trace_events=trace_events)
queue_info = QueuingLens(trace).GenerateRequestQueuing()
self.assertEqual(set(['0.2']),
set(rq.request_id
for rq in queue_info[requests[0]].blocking))
self.assertEqual((5., 10., 12.), (queue_info[requests[0]].start_msec,
queue_info[requests[0]].ready_msec,
queue_info[requests[0]].end_msec))
self.assertEqual(0, len(queue_info[requests[1]].blocking))
self.assertEqual((4., 5., 9.), (queue_info[requests[1]].start_msec,
queue_info[requests[1]].ready_msec,
queue_info[requests[1]].end_msec))