~ubuntu-branches/ubuntu/raring/qtwebkit-source/raring-proposed

« back to all changes in this revision

Viewing changes to Tools/Scripts/webkitpy/common/system/profiler_unittest.py

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-02-18 14:24:18 UTC
  • Revision ID: package-import@ubuntu.com-20130218142418-eon0jmjg3nj438uy
Tags: upstream-2.3
ImportĀ upstreamĀ versionĀ 2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2012 Google Inc. All rights reserved.
 
2
#
 
3
# Redistribution and use in source and binary forms, with or without
 
4
# modification, are permitted provided that the following conditions are
 
5
# met:
 
6
#
 
7
#     * Redistributions of source code must retain the above copyright
 
8
# notice, this list of conditions and the following disclaimer.
 
9
#     * Redistributions in binary form must reproduce the above
 
10
# copyright notice, this list of conditions and the following disclaimer
 
11
# in the documentation and/or other materials provided with the
 
12
# distribution.
 
13
#     * Neither the name of Google Inc. nor the names of its
 
14
# contributors may be used to endorse or promote products derived from
 
15
# this software without specific prior written permission.
 
16
#
 
17
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
18
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
19
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
20
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
21
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
22
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
23
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
24
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
25
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
26
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
27
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
28
 
 
29
import unittest
 
30
 
 
31
from webkitpy.common.system.systemhost_mock import MockSystemHost
 
32
 
 
33
from .profiler import ProfilerFactory, Instruments, GooglePProf
 
34
 
 
35
 
 
36
class ProfilerFactoryTest(unittest.TestCase):
 
37
    def test_basic(self):
 
38
        host = MockSystemHost()
 
39
        self.assertFalse(host.filesystem.exists("/tmp/output"))
 
40
        profiler = ProfilerFactory.create_profiler(host, '/bin/executable', '/tmp/output')
 
41
        self.assertTrue(host.filesystem.exists("/tmp/output"))
 
42
        self.assertEquals(profiler._output_path, "/tmp/output/test.trace")
 
43
 
 
44
        host.platform.os_name = 'linux'
 
45
        profiler = ProfilerFactory.create_profiler(host, '/bin/executable', '/tmp/output')
 
46
        self.assertEquals(profiler._output_path, "/tmp/output/test.pprof")
 
47
 
 
48
    def test_pprof_output_regexp(self):
 
49
        pprof_output = """
 
50
sometimes
 
51
there
 
52
is
 
53
junk before the total line
 
54
 
 
55
 
 
56
Total: 3770 samples
 
57
      76   2.0%   2.0%      104   2.8% lookup (inline)
 
58
      60   1.6%   3.6%       60   1.6% FL_SetPrevious (inline)
 
59
      56   1.5%   5.1%       56   1.5% MaskPtr (inline)
 
60
      51   1.4%   6.4%      222   5.9% WebCore::HTMLTokenizer::nextToken
 
61
      42   1.1%   7.6%       47   1.2% WTF::Vector::shrinkCapacity
 
62
      35   0.9%   8.5%       35   0.9% WTF::RefPtr::get (inline)
 
63
      33   0.9%   9.4%       43   1.1% append (inline)
 
64
      29   0.8%  10.1%       67   1.8% WTF::StringImpl::deref (inline)
 
65
      29   0.8%  10.9%      100   2.7% add (inline)
 
66
      28   0.7%  11.6%       28   0.7% WebCore::QualifiedName::localName (inline)
 
67
      25   0.7%  12.3%       27   0.7% WebCore::Private::addChildNodesToDeletionQueue
 
68
      24   0.6%  12.9%       24   0.6% __memcpy_ssse3_back
 
69
      23   0.6%  13.6%       23   0.6% intHash (inline)
 
70
      23   0.6%  14.2%       76   2.0% tcmalloc::FL_Next
 
71
      23   0.6%  14.8%       95   2.5% tcmalloc::FL_Push
 
72
      22   0.6%  15.4%       22   0.6% WebCore::MarkupTokenizerBase::InputStreamPreprocessor::peek (inline)
 
73
"""
 
74
        expected_first_ten_lines = """      76   2.0%   2.0%      104   2.8% lookup (inline)
 
75
      60   1.6%   3.6%       60   1.6% FL_SetPrevious (inline)
 
76
      56   1.5%   5.1%       56   1.5% MaskPtr (inline)
 
77
      51   1.4%   6.4%      222   5.9% WebCore::HTMLTokenizer::nextToken
 
78
      42   1.1%   7.6%       47   1.2% WTF::Vector::shrinkCapacity
 
79
      35   0.9%   8.5%       35   0.9% WTF::RefPtr::get (inline)
 
80
      33   0.9%   9.4%       43   1.1% append (inline)
 
81
      29   0.8%  10.1%       67   1.8% WTF::StringImpl::deref (inline)
 
82
      29   0.8%  10.9%      100   2.7% add (inline)
 
83
      28   0.7%  11.6%       28   0.7% WebCore::QualifiedName::localName (inline)
 
84
"""
 
85
        host = MockSystemHost()
 
86
        profiler = GooglePProf(host, '/bin/executable', '/tmp/output')
 
87
        self.assertEquals(profiler._first_ten_lines_of_profile(pprof_output), expected_first_ten_lines)