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

Side by Side Diff: tools/testing/perf_testing/run_perf_tests.py

Issue 9949044: Refactor dromeao driver to skip broken tests (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 3 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
4 # for details. All rights reserved. Use of this source code is governed by a 4 # for details. All rights reserved. Use of this source code is governed by a
5 # BSD-style license that can be found in the LICENSE file. 5 # BSD-style license that can be found in the LICENSE file.
6 6
7 import datetime 7 import datetime
8 import getpass 8 import getpass
9 import math 9 import math
10 from matplotlib.font_manager import FontProperties 10 from matplotlib.font_manager import FontProperties
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 else: 542 else:
543 bench_dict = self.values_dict[browser][FROG] 543 bench_dict = self.values_dict[browser][FROG]
544 bench_dict[name] += [float(score)] 544 bench_dict[name] += [float(score)]
545 self.revision_dict[browser][version][name] += [revision_num] 545 self.revision_dict[browser][version][name] += [revision_num]
546 546
547 f.close() 547 f.close()
548 self.calculate_geometric_mean(browser, version, revision_num) 548 self.calculate_geometric_mean(browser, version, revision_num)
549 549
550 550
551 # TODO(vsm): This should not be hardcoded here if possible. 551 # TODO(vsm): This should not be hardcoded here if possible.
552 DROMAEO_BENCHMARKS = {
553 'attr': ('attributes', [
554 'getAttribute',
555 'element.property',
556 'setAttribute',
557 'element.property = value']),
558 'modify': ('modify', [
559 'createElement',
560 'createTextNode',
561 'innerHTML',
562 'cloneNode',
563 'appendChild',
564 'insertBefore']),
565 'query': ('query', [
566 'getElementById',
567 'getElementById (not in document)',
568 'getElementsByTagName(div)',
569 'getElementsByTagName(p)',
570 'getElementsByTagName(a)',
571 'getElementsByTagName(*)',
572 'getElementsByTagName (not in document)',
573 'getElementsByName',
574 'getElementsByName (not in document)']),
575 'traverse': ('traverse', [
576 'firstChild',
577 'lastChild',
578 'nextSibling',
579 'previousSibling',
580 'childNodes'])
581 }
582
583 # TODO(vsm): This is a hack to skip breaking tests. Triage this
584 # failure properly. The modify suite fails on 32-bit chrome on
585 # the mac.
586 def get_valid_dromaeo_tags():
587 tags = [tag for (tag, _) in DROMAEO_BENCHMARKS.values()]
588 if platform.system() == 'Darwin':
589 tags.remove('modify')
590 return tags
591
552 def get_dromaeo_benchmarks(): 592 def get_dromaeo_benchmarks():
553 return map(lambda str: str.replace(' ', '_'), 593 valid = get_valid_dromaeo_tags()
554 ['getAttribute', 'element.property', 'setAttribute', 594 benchmarks = reduce(lambda l1,l2: l1+l2,
555 'element.property = value', 'createElement', 'createTextNode', 595 [tests for (tag, tests) in
556 'innerHTML', 'cloneNode', 'appendChild', 'insertBefore', 596 DROMAEO_BENCHMARKS.values() if tag in valid])
557 'getElementById', 'getElementById (not in document)', 597 return map(lambda str: str.replace(' ', '_'), benchmarks)
558 'getElementsByTagName(div)', 'getElementsByTagName(p)',
559 'getElementsByTagName(a)', 'getElementsByTagName(*)',
560 'getElementsByTagName (not in document)', 'getElementsByName',
561 'getElementsByName (not in document)', 'firstChild', 'lastChild',
562 'nextSibling', 'previousSibling', 'childNodes'])
563
564 598
565 def get_dromaeo_versions(): 599 def get_dromaeo_versions():
566 return ['js', 'frog_dom', 'frog_html'] 600 return ['js', 'frog_dom', 'frog_html']
567 601
602 def get_dromaeo_url_query(version):
603 version = version.replace('_','&')
604 tags = get_valid_dromaeo_tags()
605 return '|'.join([ '%s&%s' % (version, tag) for tag in tags])
606
568 class DromaeoTest(PerformanceTest): 607 class DromaeoTest(PerformanceTest):
569 """Runs Dromaeo tests, in the browser.""" 608 """Runs Dromaeo tests, in the browser."""
570 def __init__(self): 609 def __init__(self):
571 super(DromaeoTest, self).__init__( 610 super(DromaeoTest, self).__init__(
572 DROMAEO, get_browsers(), 'browser', 611 DROMAEO, get_browsers(), 'browser',
573 get_dromaeo_versions(), get_dromaeo_benchmarks()) 612 get_dromaeo_versions(), get_dromaeo_benchmarks())
574 613
575 def run_tests(self): 614 def run_tests(self):
576 """Run dromaeo in the browser.""" 615 """Run dromaeo in the browser."""
577 616
578 # Build tests. 617 # Build tests.
579 dromaeo_path = os.path.join('samples', 'third_party', 'dromaeo') 618 dromaeo_path = os.path.join('samples', 'third_party', 'dromaeo')
580 current_path = os.getcwd() 619 current_path = os.getcwd()
581 os.chdir(dromaeo_path) 620 os.chdir(dromaeo_path)
582 run_cmd(['python', 'generate_frog_tests.py']) 621 run_cmd(['python', 'generate_frog_tests.py'])
583 os.chdir(current_path) 622 os.chdir(current_path)
584 623
585 versions = get_dromaeo_versions() 624 versions = get_dromaeo_versions()
586 625
587 for browser in get_browsers(): 626 for browser in get_browsers():
588 for version_name in versions: 627 for version_name in versions:
589 version = version_name.replace('_','&') 628 version = get_dromaeo_url_query(version_name)
590 self.trace_file = os.path.join('tools', 'testing', 'perf_testing', 629 self.trace_file = os.path.join('tools', 'testing', 'perf_testing',
591 self.result_folder_name, 630 self.result_folder_name,
592 'dromaeo-%s-%s-%s' % (self.cur_time, browser, version_name)) 631 'dromaeo-%s-%s-%s' % (self.cur_time, browser, version_name))
593 self.add_svn_revision_to_trace(self.trace_file) 632 self.add_svn_revision_to_trace(self.trace_file)
594 file_path = os.path.join(os.getcwd(), dromaeo_path, 633 file_path = os.path.join(os.getcwd(), dromaeo_path,
595 'index-js.html?%s' % version) 634 'index-js.html?%s' % version)
596 run_cmd(['python', os.path.join('tools', 'testing', 'run_selenium.py'), 635 run_cmd(['python', os.path.join('tools', 'testing', 'run_selenium.py'),
597 '--out', file_path, '--browser', browser, 636 '--out', file_path, '--browser', browser,
598 '--timeout', '200', '--mode', 'dromaeo'], self.trace_file, 637 '--timeout', '200', '--mode', 'dromaeo'], self.trace_file,
599 append=True) 638 append=True)
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 f.close() 674 f.close()
636 self.calculate_geometric_mean(browser, version, revision_num) 675 self.calculate_geometric_mean(browser, version, revision_num)
637 676
638 677
639 class DromaeoSizeTest(TestRunner): 678 class DromaeoSizeTest(TestRunner):
640 """Run tests to determine the compiled file output size of Dromaeo.""" 679 """Run tests to determine the compiled file output size of Dromaeo."""
641 def __init__(self): 680 def __init__(self):
642 super(DromaeoSizeTest, self).__init__( 681 super(DromaeoSizeTest, self).__init__(
643 DROMAEO_SIZE, 682 DROMAEO_SIZE,
644 ['browser'], ['dart', 'frog_dom', 'frog_html', 'frog_htmlidiomatic'], 683 ['browser'], ['dart', 'frog_dom', 'frog_html', 'frog_htmlidiomatic'],
645 ['attr', 'modify', 'query', 'traverse']) 684 DROMAEO_BENCHMARK.keys())
646 685
647 def run_tests(self): 686 def run_tests(self):
648 # Build tests. 687 # Build tests.
649 dromaeo_path = os.path.join('samples', 'third_party', 'dromaeo') 688 dromaeo_path = os.path.join('samples', 'third_party', 'dromaeo')
650 current_path = os.getcwd() 689 current_path = os.getcwd()
651 os.chdir(dromaeo_path) 690 os.chdir(dromaeo_path)
652 run_cmd(['python', os.path.join('generate_frog_tests.py')]) 691 run_cmd(['python', os.path.join('generate_frog_tests.py')])
653 os.chdir(current_path) 692 os.chdir(current_path)
654 693
655 self.trace_file = os.path.join('tools', 'testing', 'perf_testing', 694 self.trace_file = os.path.join('tools', 'testing', 'perf_testing',
656 self.result_folder_name, self.result_folder_name + self.cur_time) 695 self.result_folder_name, self.result_folder_name + self.cur_time)
657 self.add_svn_revision_to_trace(self.trace_file) 696 self.add_svn_revision_to_trace(self.trace_file)
658 697
659 variants = [ 698 variants = [
660 ('frog_dom', ''), 699 ('frog_dom', ''),
661 ('frog_html', '-html'), 700 ('frog_html', '-html'),
662 ('frog_htmlidiomatic', '-htmlidiomatic')] 701 ('frog_htmlidiomatic', '-htmlidiomatic')]
663 702
664 test_path = os.path.join(dromaeo_path, 'tests') 703 test_path = os.path.join(dromaeo_path, 'tests')
665 frog_path = os.path.join(test_path, 'frog') 704 frog_path = os.path.join(test_path, 'frog')
666 total_size = {} 705 total_size = {}
667 for (variant, _) in variants: 706 for (variant, _) in variants:
668 total_size[variant] = 0 707 total_size[variant] = 0
669 total_dart_size = 0 708 total_dart_size = 0
670 for suite in ['attr', 'modify', 'query', 'traverse']: 709 for suite in DROMAEO_BENCHMARK.keys():
671 dart_size = 0 710 dart_size = 0
672 try: 711 try:
673 dart_size = os.path.getsize(os.path.join(test_path, 712 dart_size = os.path.getsize(os.path.join(test_path,
674 'dom-%s.dart' % suite)) 713 'dom-%s.dart' % suite))
675 except OSError: 714 except OSError:
676 pass #If compilation failed, continue on running other tests. 715 pass #If compilation failed, continue on running other tests.
677 716
678 total_dart_size += dart_size 717 total_dart_size += dart_size
679 run_cmd(['echo', 'Size (dart, %s): %s' % (suite, str(dart_size))], 718 run_cmd(['echo', 'Size (dart, %s): %s' % (suite, str(dart_size))],
680 self.trace_file, append=True) 719 self.trace_file, append=True)
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 self.values_dict['browser'][variant][metric] += [num] 773 self.values_dict['browser'][variant][metric] += [num]
735 self.revision_dict['browser'][variant][metric] += [revision_num] 774 self.revision_dict['browser'][variant][metric] += [revision_num]
736 775
737 f.close() 776 f.close()
738 777
739 def plot_results(self, png_filename): 778 def plot_results(self, png_filename):
740 self.style_and_save_perf_plot( 779 self.style_and_save_perf_plot(
741 'Compiled Dromaeo Sizes', 780 'Compiled Dromaeo Sizes',
742 'Size (in bytes)', 10, 10, 'lower left', png_filename, 781 'Size (in bytes)', 10, 10, 'lower left', png_filename,
743 ['browser'], ['dart', 'frog_dom', 'frog_html', 'frog_htmlidiomatic'], 782 ['browser'], ['dart', 'frog_dom', 'frog_html', 'frog_htmlidiomatic'],
744 ['attr', 'modify', 'query', 'traverse']) 783 DROMEAO_BENCHMARK.keys())
745 784
746 self.style_and_save_perf_plot( 785 self.style_and_save_perf_plot(
747 'Compiled Dromaeo Sizes', 786 'Compiled Dromaeo Sizes',
748 'Size (in bytes)', 10, 10, 'lower left', '2' + png_filename, 787 'Size (in bytes)', 10, 10, 'lower left', '2' + png_filename,
749 ['browser'], ['dart', 'frog_dom', 'frog_html', 'frog_htmlidiomatic'], 788 ['browser'], ['dart', 'frog_dom', 'frog_html', 'frog_htmlidiomatic'],
750 [GEO_MEAN]) 789 [GEO_MEAN])
751 790
752 791
753 792
754 class CompileTimeAndSizeTest(TestRunner): 793 class CompileTimeAndSizeTest(TestRunner):
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 run_test_sequence(suites, no_build, graph_only, 970 run_test_sequence(suites, no_build, graph_only,
932 username, password) 971 username, password)
933 else: 972 else:
934 time.sleep(SLEEP_TIME) 973 time.sleep(SLEEP_TIME)
935 else: 974 else:
936 run_test_sequence(suites, no_build, graph_only, 975 run_test_sequence(suites, no_build, graph_only,
937 username, password) 976 username, password)
938 977
939 if __name__ == '__main__': 978 if __name__ == '__main__':
940 main() 979 main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698