blob: b25e919e2bf1d9716df1607a74fd6bd9f6467cb5 [file] [log] [blame]
# Copyright 2011 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 json
import math
import tempfile
import time
import unittest
from .log import *
from .trace_test import *
class SingleThreadTest(TraceTest):
def test_one_func(self):
actual_diff = []
def func1():
trace_begin("func1")
start = time.time()
time.sleep(0.25)
end = time.time()
actual_diff.append(end-start) # Pass via array because of Python scoping
trace_end("func1")
res = self.go(func1)
tids = res.findThreadIds()
self.assertEquals(1, len(tids))
events = res.findEventsOnThread(tids[0])
self.assertEquals(2, len(events))
self.assertEquals('B', events[0]["ph"])
self.assertEquals('E', events[1]["ph"])
measured_diff = events[1]["ts"] - events[0]["ts"]
actual_diff = 1000000 * actual_diff[0]
self.assertTrue(math.fabs(actual_diff - measured_diff) < 1000)
def test_redundant_flush(self):
def func1():
trace_begin("func1")
time.sleep(0.25)
trace_flush()
trace_flush()
trace_end("func1")
res = self.go(func1)
events = res.findEventsOnThread(res.findThreadIds()[0])
self.assertEquals(2, len(events))
self.assertEquals('B', events[0]["ph"])
self.assertEquals('E', events[1]["ph"])
def test_nested_func(self):
def func1():
trace_begin("func1")
time.sleep(0.25)
func2()
trace_end("func1")
def func2():
trace_begin("func2")
time.sleep(0.05)
trace_end("func2")
res = self.go(func1)
self.assertEquals(1, len(res.findThreadIds()))
tids = res.findThreadIds()
self.assertEquals(1, len(tids))
events = res.findEventsOnThread(tids[0])
efmt = ["%s %s" % (e["ph"], e["name"]) for e in events]
self.assertEquals(
["B func1",
"B func2",
"E func2",
"E func1"],
efmt);