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

Side by Side Diff: content/test/gpu/page_sets/gpu_process_tests.py

Issue 2257373002: Revert of Fix ineffective --disable-gpu-driver-bug-workarounds (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
« no previous file with comments | « content/browser/gpu/gpu_process_host.cc ('k') | 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 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 import sys 4 import sys
5 from telemetry.story import story_set as story_set_module 5 from telemetry.story import story_set as story_set_module
6 from telemetry.page import page_test 6 from telemetry.page import page_test
7 7
8 from gpu_tests import gpu_test_base 8 from gpu_tests import gpu_test_base
9 9
10 class GpuProcessSharedPageState(gpu_test_base.GpuSharedPageState): 10 class GpuProcessSharedPageState(gpu_test_base.GpuSharedPageState):
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 return 113 return
114 114
115 if self.expected_workaround: 115 if self.expected_workaround:
116 self._Validate(tab, "browser_process", True, self.expected_workaround) 116 self._Validate(tab, "browser_process", True, self.expected_workaround)
117 self._Validate(tab, "gpu_process", True, self.expected_workaround) 117 self._Validate(tab, "gpu_process", True, self.expected_workaround)
118 118
119 if self.unexpected_workaround: 119 if self.unexpected_workaround:
120 self._Validate(tab, "browser_process", False, self.unexpected_workaround) 120 self._Validate(tab, "browser_process", False, self.unexpected_workaround)
121 self._Validate(tab, "gpu_process", False, self.unexpected_workaround) 121 self._Validate(tab, "gpu_process", False, self.unexpected_workaround)
122 122
123
124 class EqualBugWorkaroundsBasePage(gpu_test_base.PageBase):
125 def __init__(self, name=None, page_set=None, shared_page_state_class=None,
126 expectations=None):
127 super(EqualBugWorkaroundsBasePage, self).__init__(
128 url='chrome:gpu',
129 name=name,
130 page_set=page_set,
131 shared_page_state_class=shared_page_state_class,
132 expectations=expectations)
133
134 def Validate(self, tab, results):
135 has_gpu_process_js = 'chrome.gpuBenchmarking.hasGpuProcess()'
136 if not tab.EvaluateJavaScript(has_gpu_process_js):
137 raise page_test.Failure('No GPU process detected')
138
139 has_gpu_channel_js = 'chrome.gpuBenchmarking.hasGpuChannel()'
140 if not tab.EvaluateJavaScript(has_gpu_channel_js):
141 raise page_test.Failure('No GPU channel detected')
142
143 browser_list = tab.EvaluateJavaScript('GetDriverBugWorkarounds()')
144 gpu_list = tab.EvaluateJavaScript( \
145 'chrome.gpuBenchmarking.getGpuDriverBugWorkarounds()')
146
147 diff = set(browser_list).symmetric_difference(set(gpu_list))
148 if len(diff) > 0:
149 print 'Test failed. Printing page contents:'
150 print tab.EvaluateJavaScript('document.body.innerHTML')
151 raise page_test.Failure('Browser and GPU process list of driver bug' \
152 'workarounds are not equal: %s != %s, diff: %s' % \
153 (browser_list, gpu_list, list(diff)))
154
155 return gpu_list
156
157
158 class GpuProcessTestsPage(gpu_test_base.PageBase): 123 class GpuProcessTestsPage(gpu_test_base.PageBase):
159 def __init__(self, url, name, story_set, expectations): 124 def __init__(self, url, name, story_set, expectations):
160 super(GpuProcessTestsPage, self).__init__(url=url, 125 super(GpuProcessTestsPage, self).__init__(url=url,
161 shared_page_state_class=gpu_test_base.GpuSharedPageState, 126 shared_page_state_class=gpu_test_base.GpuSharedPageState,
162 page_set=story_set, 127 page_set=story_set,
163 name=name, 128 name=name,
164 expectations=expectations) 129 expectations=expectations)
165 130
166 131
167 class FunctionalVideoPage(GpuProcessTestsPage): 132 class FunctionalVideoPage(GpuProcessTestsPage):
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 result = result and status == 'disabled_software' 509 result = result and status == 'disabled_software'
545 elif name == 'webgl': 510 elif name == 'webgl':
546 result = result and status == 'enabled_readback' 511 result = result and status == 'enabled_readback'
547 else: 512 else:
548 result = result and status == 'unavailable_software' 513 result = result and status == 'unavailable_software'
549 if not result: 514 if not result:
550 raise page_test.Failure('WebGL readback setup failed: %s' \ 515 raise page_test.Failure('WebGL readback setup failed: %s' \
551 % feature_status_list) 516 % feature_status_list)
552 517
553 518
519 class EqualBugWorkaroundsInBrowserAndGpuProcessPage(gpu_test_base.PageBase):
520 def __init__(self, story_set, expectations):
521 super(EqualBugWorkaroundsInBrowserAndGpuProcessPage, self).__init__(
522 url='chrome:gpu',
523 name='GpuProcess.equal_bug_workarounds_in_browser_and_gpu_process',
524 page_set=story_set,
525 shared_page_state_class=GpuProcessSharedPageState,
526 expectations=expectations)
527
528 def Validate(self, tab, results):
529 browser_list = tab.EvaluateJavaScript('GetDriverBugWorkarounds()')
530 gpu_list = tab.EvaluateJavaScript( \
531 'chrome.gpuBenchmarking.getGpuDriverBugWorkarounds()')
532
533 diff = set(browser_list).symmetric_difference(set(gpu_list))
534 if len(diff) > 0:
535 print 'Test failed. Printing page contents:'
536 print tab.EvaluateJavaScript('document.body.innerHTML')
537 raise page_test.Failure('Browser and GPU process list of driver bug' \
538 'workarounds are not equal: %s != %s, diff: %s' % \
539 (browser_list, gpu_list, list(diff)))
540
541
554 class HasTransparentVisualsShared(GpuProcessSharedPageState): 542 class HasTransparentVisualsShared(GpuProcessSharedPageState):
555 def __init__(self, test, finder_options, story_set): 543 def __init__(self, test, finder_options, story_set):
556 super(HasTransparentVisualsShared, self).__init__( 544 super(HasTransparentVisualsShared, self).__init__(
557 test, finder_options, story_set) 545 test, finder_options, story_set)
558 options = finder_options.browser_options 546 options = finder_options.browser_options
559 if sys.platform.startswith('linux'): 547 if sys.platform.startswith('linux'):
560 # Hit id 173 from kGpuDriverBugListJson. 548 # Hit id 173 from kGpuDriverBugListJson.
561 options.AppendExtraBrowserArgs('--gpu-testing-gl-version=3.0 Mesa ' \ 549 options.AppendExtraBrowserArgs('--gpu-testing-gl-version=3.0 Mesa ' \
562 '12.1') 550 '12.1')
563 551
(...skipping 28 matching lines...) Expand all
592 shared_page_state_class=NoTransparentVisualsShared, 580 shared_page_state_class=NoTransparentVisualsShared,
593 expectations=expectations, 581 expectations=expectations,
594 expected_workaround='disable_transparent_visuals', 582 expected_workaround='disable_transparent_visuals',
595 unexpected_workaround=None) 583 unexpected_workaround=None)
596 584
597 def Validate(self, tab, results): 585 def Validate(self, tab, results):
598 if sys.platform.startswith('linux'): 586 if sys.platform.startswith('linux'):
599 super(NoTransparentVisualsGpuProcessPage, self).Validate(tab, results) 587 super(NoTransparentVisualsGpuProcessPage, self).Validate(tab, results)
600 588
601 589
602 class TransferWorkaroundSharedPageState(GpuProcessSharedPageState):
603 def __init__(self, test, finder_options, story_set):
604 super(TransferWorkaroundSharedPageState, self).__init__(
605 test, finder_options, story_set)
606
607 # Extra browser args need to be added here. Adding them in RunStory would be
608 # too late.
609 def WillRunStory(self, results):
610 if self.WarmUpDone():
611 options = self._finder_options.browser_options
612 options.AppendExtraBrowserArgs('--use_gpu_driver_workaround_for_testing')
613 options.AppendExtraBrowserArgs('--disable-gpu-driver-bug-workarounds')
614
615 # Inject some info to make sure the flag above is effective.
616 if sys.platform == 'darwin':
617 # Hit id 33 from kGpuDriverBugListJson.
618 options.AppendExtraBrowserArgs('--gpu-testing-gl-vendor=Imagination')
619 else:
620 # Hit id 5 from kGpuDriverBugListJson.
621 options.AppendExtraBrowserArgs('--gpu-testing-vendor-id=0x10de')
622 options.AppendExtraBrowserArgs('--gpu-testing-device-id=0x0001')
623 # no multi gpu on Android.
624 if not options.browser_type.startswith('android'):
625 options.AppendExtraBrowserArgs('--gpu-testing-secondary-vendor-ids=')
626 options.AppendExtraBrowserArgs('--gpu-testing-secondary-device-ids=')
627
628 for workaround in self.RecordedWorkarounds():
629 options.AppendExtraBrowserArgs('--' + workaround)
630 super(TransferWorkaroundSharedPageState, self).WillRunStory(results)
631
632 # self._current_page is None in WillRunStory so do the transfer here.
633 def RunStory(self, results):
634 if self.WarmUpDone():
635 self._current_page.expected_workarounds = self.RecordedWorkarounds()
636 self.AddTestingWorkaround(self._current_page.expected_workarounds)
637 super(TransferWorkaroundSharedPageState, self).RunStory(results)
638
639 def WarmUpDone(self):
640 return self._previous_page is not None and \
641 self.RecordedWorkarounds() is not None
642
643 def RecordedWorkarounds(self):
644 return self._previous_page.recorded_workarounds
645
646 def AddTestingWorkaround(self, workarounds):
647 if workarounds is not None:
648 workarounds.append('use_gpu_driver_workaround_for_testing')
649
650
651 class EqualBugWorkaroundsPage(EqualBugWorkaroundsBasePage):
652 def __init__(self, story_set, expectations):
653 super(EqualBugWorkaroundsPage, self).__init__(
654 name='GpuProcess.equal_bug_workarounds_in_browser_and_gpu_process',
655 page_set=story_set,
656 shared_page_state_class=TransferWorkaroundSharedPageState,
657 expectations=expectations)
658 self.recorded_workarounds = None
659
660 def Validate(self, tab, results):
661 gpu_list = super(EqualBugWorkaroundsPage, self).Validate(tab, results)
662 self.recorded_workarounds = gpu_list
663
664
665 class OnlyOneWorkaroundPage(EqualBugWorkaroundsBasePage):
666 def __init__(self, story_set, expectations):
667 super(OnlyOneWorkaroundPage, self).__init__(
668 name='GpuProcess.only_one_workaround',
669 page_set=story_set,
670 shared_page_state_class=TransferWorkaroundSharedPageState,
671 expectations=expectations)
672 self.expected_workarounds = None
673
674 def Validate(self, tab, results):
675 # Requires EqualBugWorkaroundsPage to succeed. If it has failed then just
676 # pass to not overload the logs.
677 if self.expected_workarounds is None:
678 return
679
680 gpu_list = super(OnlyOneWorkaroundPage, self).Validate(tab, results)
681
682 diff = set(self.expected_workarounds).symmetric_difference(set(gpu_list))
683 if len(diff) > 0:
684 print 'Test failed. Printing page contents:'
685 print tab.EvaluateJavaScript('document.body.innerHTML')
686 raise page_test.Failure('GPU process and expected list of driver bug' \
687 'workarounds are not equal: %s != %s, diff: %s' % \
688 (self.expected_workarounds, gpu_list, list(diff)))
689
690
691 class GpuProcessTestsStorySet(story_set_module.StorySet): 590 class GpuProcessTestsStorySet(story_set_module.StorySet):
692 591
693 """ Tests that accelerated content triggers the creation of a GPU process """ 592 """ Tests that accelerated content triggers the creation of a GPU process """
694 593
695 def __init__(self, expectations, is_platform_android): 594 def __init__(self, expectations, is_platform_android):
696 super(GpuProcessTestsStorySet, self).__init__( 595 super(GpuProcessTestsStorySet, self).__init__(
697 serving_dirs=set(['../../../../content/test/data'])) 596 serving_dirs=set(['../../../../content/test/data']))
698 597
699 urls_and_names_list = [ 598 urls_and_names_list = [
700 ('file://../../data/gpu/functional_canvas_demo.html', 599 ('file://../../data/gpu/functional_canvas_demo.html',
701 'GpuProcess.canvas2d'), 600 'GpuProcess.canvas2d'),
702 ('file://../../data/gpu/functional_3d_css.html', 601 ('file://../../data/gpu/functional_3d_css.html',
703 'GpuProcess.css3d'), 602 'GpuProcess.css3d'),
704 ('file://../../data/gpu/functional_webgl.html', 603 ('file://../../data/gpu/functional_webgl.html',
705 'GpuProcess.webgl') 604 'GpuProcess.webgl')
706 ] 605 ]
707 606
708 for url, name in urls_and_names_list: 607 for url, name in urls_and_names_list:
709 self.AddStory(GpuProcessTestsPage(url, name, self, expectations)) 608 self.AddStory(GpuProcessTestsPage(url, name, self, expectations))
710 609
711 self.AddStory(FunctionalVideoPage(self, expectations)) 610 self.AddStory(FunctionalVideoPage(self, expectations))
712 self.AddStory(GpuInfoCompletePage(self, expectations)) 611 self.AddStory(GpuInfoCompletePage(self, expectations))
713 self.AddStory(NoGpuProcessPage(self, expectations)) 612 self.AddStory(NoGpuProcessPage(self, expectations))
714 self.AddStory(DriverBugWorkaroundsInGpuProcessPage(self, expectations)) 613 self.AddStory(DriverBugWorkaroundsInGpuProcessPage(self, expectations))
715 self.AddStory(ReadbackWebGLGpuProcessPage(self, expectations, 614 self.AddStory(ReadbackWebGLGpuProcessPage(self, expectations,
716 is_platform_android)) 615 is_platform_android))
717 self.AddStory(DriverBugWorkaroundsUponGLRendererPage(self, expectations, 616 self.AddStory(DriverBugWorkaroundsUponGLRendererPage(self, expectations,
718 is_platform_android)) 617 is_platform_android))
719 self.AddStory(EqualBugWorkaroundsPage(self, expectations)) 618 self.AddStory(EqualBugWorkaroundsInBrowserAndGpuProcessPage(self,
720 self.AddStory(OnlyOneWorkaroundPage(self, expectations)) 619 expectations))
721
722 if not is_platform_android: 620 if not is_platform_android:
723 self.AddStory(SkipGpuProcessPage(self, expectations)) 621 self.AddStory(SkipGpuProcessPage(self, expectations))
724 self.AddStory(HasTransparentVisualsGpuProcessPage(self, expectations)) 622 self.AddStory(HasTransparentVisualsGpuProcessPage(self, expectations))
725 self.AddStory(NoTransparentVisualsGpuProcessPage(self, expectations)) 623 self.AddStory(NoTransparentVisualsGpuProcessPage(self, expectations))
726 624
727 # There is no Android multi-gpu configuration and the helper 625 # There is no Android multi-gpu configuration and the helper
728 # gpu_info_collector.cc::IdentifyActiveGPU is not even called. 626 # gpu_info_collector.cc::IdentifyActiveGPU is not even called.
729 self.AddStory(IdentifyActiveGpuPage1(self, expectations)) 627 self.AddStory(IdentifyActiveGpuPage1(self, expectations))
730 self.AddStory(IdentifyActiveGpuPage2(self, expectations)) 628 self.AddStory(IdentifyActiveGpuPage2(self, expectations))
731 self.AddStory(IdentifyActiveGpuPage3(self, expectations)) 629 self.AddStory(IdentifyActiveGpuPage3(self, expectations))
732 self.AddStory(IdentifyActiveGpuPage4(self, expectations)) 630 self.AddStory(IdentifyActiveGpuPage4(self, expectations))
733 631
734 # There is currently no entry in kSoftwareRenderingListJson that enables 632 # There is currently no entry in kSoftwareRenderingListJson that enables
735 # a software GL driver on Android. 633 # a software GL driver on Android.
736 self.AddStory(SoftwareGpuProcessPage(self, expectations)) 634 self.AddStory(SoftwareGpuProcessPage(self, expectations))
737 635
738 @property 636 @property
739 def allow_mixed_story_states(self): 637 def allow_mixed_story_states(self):
740 # Return True here in order to be able to run pages with different browser 638 # Return True here in order to be able to run pages with different browser
741 # command line arguments. 639 # command line arguments.
742 return True 640 return True
OLDNEW
« no previous file with comments | « content/browser/gpu/gpu_process_host.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698