Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: tools/binary_size/libsupersize/function_signature_test.py

Issue 2870743003: supersize: Add symbol.template_name, and strip <>s from symbol.name (Closed)
Patch Set: review comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2017 The Chromium Authors. All rights reserved. 2 # Copyright 2017 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import logging 6 import logging
7 import re
7 import unittest 8 import unittest
8 9
9 import function_signature 10 import function_signature
10 11
11 12
12 class AnalyzeTest(unittest.TestCase): 13 class AnalyzeTest(unittest.TestCase):
13 14
14 def testParseFunctionSignature(self): 15 def testParseFunctionSignature(self):
15 def check(ret_part, name_part, params_part, after_part=''): 16 def check(ret_part, name_part, params_part, after_part='',
17 name_without_templates=None):
18 if name_without_templates is None:
19 name_without_templates = re.sub(r'<.*?>', '', name_part) + after_part
20
16 signature = ''.join((name_part, params_part, after_part)) 21 signature = ''.join((name_part, params_part, after_part))
17 got_full, got_name = function_signature.Parse(signature) 22 got_full_name, got_template_name, got_name = (
18 self.assertEqual(name_part + after_part, got_name) 23 function_signature.Parse(signature))
19 self.assertEqual(name_part + params_part + after_part, got_full) 24 self.assertEqual(name_without_templates, got_name)
25 self.assertEqual(name_part + after_part, got_template_name)
26 self.assertEqual(name_part + params_part + after_part, got_full_name)
20 if ret_part: 27 if ret_part:
21 signature = ''.join((ret_part, name_part, params_part, after_part)) 28 signature = ''.join((ret_part, name_part, params_part, after_part))
22 got_full, got_name = function_signature.Parse(signature) 29 got_full_name, got_template_name, got_name = (
23 self.assertEqual(name_part + after_part, got_name) 30 function_signature.Parse(signature))
24 self.assertEqual(name_part + params_part + after_part, got_full) 31 self.assertEqual(name_without_templates, got_name)
32 self.assertEqual(name_part + after_part, got_template_name)
33 self.assertEqual(name_part + params_part + after_part, got_full_name)
25 34
26 check('bool ', 35 check('bool ',
27 'foo::Bar<unsigned int, int>::Do<unsigned int>', 36 'foo::Bar<unsigned int, int>::Do<unsigned int>',
28 '(unsigned int)') 37 '(unsigned int)')
29 check('base::internal::CheckedNumeric<int>& ', 38 check('base::internal::CheckedNumeric<int>& ',
30 'base::internal::CheckedNumeric<int>::operator+=<int>', 39 'base::internal::CheckedNumeric<int>::operator+=<int>',
31 '(int)') 40 '(int)')
32 check('base::internal::CheckedNumeric<int>& ', 41 check('base::internal::CheckedNumeric<int>& ',
33 'b::i::CheckedNumeric<int>::MathOp<b::i::CheckedAddOp, int>', 42 'b::i::CheckedNumeric<int>::MathOp<b::i::CheckedAddOp, int>',
34 '(int)') 43 '(int)')
35 check('', '(anonymous namespace)::GetBridge', '(long long)') 44 check('', '(anonymous namespace)::GetBridge', '(long long)')
36 check('', 'operator delete', '(void*)') 45 check('', 'operator delete', '(void*)')
37 check('', 'b::i::DstRangeRelationToSrcRangeImpl<long long, long long, ' 46 check('', 'b::i::DstRangeRelationToSrcRangeImpl<long long, long long, '
38 'std::__ndk1::numeric_limits, (b::i::Integer)1>::Check', 47 'std::__ndk1::numeric_limits, (b::i::Integer)1>::Check',
39 '(long long)') 48 '(long long)')
40 check('', 'cc::LayerIterator::operator cc::LayerIteratorPosition const', 49 check('', 'cc::LayerIterator::operator cc::LayerIteratorPosition const',
41 '()', 50 '()',
42 ' const') 51 ' const')
43 check('decltype ({parm#1}((SkRecords::NoOp)())) ', 52 check('decltype ({parm#1}((SkRecords::NoOp)())) ',
44 'SkRecord::Record::visit<SkRecords::Draw&>', 53 'SkRecord::Record::visit<SkRecords::Draw&>',
45 '(SkRecords::Draw&)', 54 '(SkRecords::Draw&)',
46 ' const') 55 ' const')
47 check('', 'base::internal::BindStateBase::BindStateBase', 56 check('', 'base::internal::BindStateBase::BindStateBase',
48 '(void (*)(), void (*)(base::internal::BindStateBase const*))') 57 '(void (*)(), void (*)(base::internal::BindStateBase const*))')
49 check('int ', 'std::__ndk1::__c11_atomic_load<int>', 58 check('int ', 'std::__ndk1::__c11_atomic_load<int>',
50 '(std::__ndk1::<int> volatile*, std::__ndk1::memory_order)') 59 '(std::__ndk1::<int> volatile*, std::__ndk1::memory_order)')
51 check('std::basic_ostream<char, std::char_traits<char> >& ', 60 check('std::basic_ostream<char, std::char_traits<char> >& ',
52 'std::operator<< <std::char_traits<char> >', 61 'std::operator<< <std::char_traits<char> >',
53 '(std::basic_ostream<char, std::char_traits<char> >&, char)') 62 '(std::basic_ostream<char, std::char_traits<char> >&, char)',
63 name_without_templates='std::operator<<')
54 check('v8::internal::SlotCallbackResult ', 64 check('v8::internal::SlotCallbackResult ',
55 'v8::internal::UpdateTypedSlotHelper::UpdateCodeTarget' 65 'v8::internal::UpdateTypedSlotHelper::UpdateCodeTarget'
56 '<v8::PointerUpdateJobTraits<(v8::Direction)1>::Foo(v8::Heap*, ' 66 '<v8::PointerUpdateJobTraits<(v8::Direction)1>::Foo(v8::Heap*, '
57 'v8::MemoryChunk*)::{lambda(v8::SlotType, unsigned char*)#2}::' 67 'v8::MemoryChunk*)::{lambda(v8::SlotType, unsigned char*)#2}::'
58 'operator()(v8::SlotType, unsigned char*, unsigned char*) ' 68 'operator()(v8::SlotType, unsigned char*, unsigned char*) '
59 'const::{lambda(v8::Object**)#1}>', 69 'const::{lambda(v8::Object**)#1}>',
60 '(v8::RelocInfo, v8::Foo<(v8::PointerDirection)1>::Bar(v8::Heap*)::' 70 '(v8::RelocInfo, v8::Foo<(v8::PointerDirection)1>::Bar(v8::Heap*)::'
61 '{lambda(v8::SlotType)#2}::operator()(v8::SlotType) const::' 71 '{lambda(v8::SlotType)#2}::operator()(v8::SlotType) const::'
62 '{lambda(v8::Object**)#1})') 72 '{lambda(v8::Object**)#1})',
73 name_without_templates=(
74 'v8::internal::UpdateTypedSlotHelper::UpdateCodeTarget'))
63 check('', 75 check('',
64 'WTF::StringAppend<WTF::String, WTF::String>::operator WTF::String', 76 'WTF::StringAppend<WTF::String, WTF::String>::operator WTF::String',
65 '()', 77 '()',
66 ' const') 78 ' const')
67 # Make sure []s are not removed from the name part. 79 # Make sure []s are not removed from the name part.
68 check('', 'Foo', '()', ' [virtual thunk]') 80 check('', 'Foo', '()', ' [virtual thunk]')
69 # Template function that accepts an anonymous lambda. 81 # Template function that accepts an anonymous lambda.
70 check('', 82 check('',
71 'blink::FrameView::ForAllNonThrottledFrameViews<blink::FrameView::Pre' 83 'blink::FrameView::ForAllNonThrottledFrameViews<blink::FrameView::Pre'
72 'Paint()::{lambda(FrameView&)#2}>', 84 'Paint()::{lambda(FrameView&)#2}>',
73 '(blink::FrameView::PrePaint()::{lambda(FrameView&)#2} const&)', '') 85 '(blink::FrameView::PrePaint()::{lambda(FrameView&)#2} const&)', '')
74 86
87 # Test with multiple template args.
88 check('int ', 'Foo<int()>::bar<a<b> >', '()',
89 name_without_templates='Foo::bar')
90
75 # SkArithmeticImageFilter.cpp has class within function body. e.g.: 91 # SkArithmeticImageFilter.cpp has class within function body. e.g.:
76 # ArithmeticFP::onCreateGLSLInstance() looks like: 92 # ArithmeticFP::onCreateGLSLInstance() looks like:
77 # class ArithmeticFP { 93 # class ArithmeticFP {
78 # GrGLSLFragmentProcessor* onCreateGLSLInstance() const { 94 # GrGLSLFragmentProcessor* onCreateGLSLInstance() const {
79 # class GLSLFP { 95 # class GLSLFP {
80 # void emitCode(EmitArgs& args) { ... } 96 # void emitCode(EmitArgs& args) { ... }
81 # }; 97 # };
82 # ... 98 # ...
83 # } 99 # }
84 # }; 100 # };
85 SIG = '(anonymous namespace)::Foo::Baz() const::GLSLFP::onData(Foo, Bar)' 101 SIG = '(anonymous namespace)::Foo::Baz() const::GLSLFP::onData(Foo, Bar)'
86 got_full, got_name = function_signature.Parse(SIG) 102 got_full_name, got_template_name, got_name = (
103 function_signature.Parse(SIG))
87 self.assertEqual('(anonymous namespace)::Foo::Baz', got_name) 104 self.assertEqual('(anonymous namespace)::Foo::Baz', got_name)
88 self.assertEqual(SIG, got_full) 105 self.assertEqual('(anonymous namespace)::Foo::Baz', got_template_name)
106 self.assertEqual(SIG, got_full_name)
89 107
90 # Top-level lambda. 108 # Top-level lambda.
91 # Note: Inline lambdas do not seem to be broken into their own symbols. 109 # Note: Inline lambdas do not seem to be broken into their own symbols.
92 SIG = 'cc::{lambda(cc::PaintOp*)#63}::_FUN(cc::PaintOp*)' 110 SIG = 'cc::{lambda(cc::PaintOp*)#63}::_FUN(cc::PaintOp*)'
93 got_full, got_name = function_signature.Parse(SIG) 111 got_full_name, got_template_name, got_name = (
112 function_signature.Parse(SIG))
94 self.assertEqual('cc::{lambda#63}', got_name) 113 self.assertEqual('cc::{lambda#63}', got_name)
95 self.assertEqual('cc::{lambda#63}(cc::PaintOp*)', got_full) 114 self.assertEqual('cc::{lambda#63}', got_template_name)
115 self.assertEqual('cc::{lambda#63}(cc::PaintOp*)', got_full_name)
96 116
117 # Data members
118 check('', 'blink::CSSValueKeywordsHash::findValueImpl', '(char const*)',
119 '::value_word_list')
120 check('', 'foo::Bar<Z<Y> >::foo<bar>', '(abc)', '::var<baz>',
121 name_without_templates='foo::Bar::foo::var')
97 122
98 if __name__ == '__main__': 123 if __name__ == '__main__':
99 logging.basicConfig(level=logging.DEBUG, 124 logging.basicConfig(level=logging.DEBUG,
100 format='%(levelname).1s %(relativeCreated)6d %(message)s') 125 format='%(levelname).1s %(relativeCreated)6d %(message)s')
101 unittest.main() 126 unittest.main()
OLDNEW
« no previous file with comments | « tools/binary_size/libsupersize/function_signature.py ('k') | tools/binary_size/libsupersize/html_report.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698