| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 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 | 4 |
| 5 """Base class for linker-specific test cases. | 5 """Base class for linker-specific test cases. |
| 6 | 6 |
| 7 The custom dynamic linker can only be tested through a custom test case | 7 The custom dynamic linker can only be tested through a custom test case |
| 8 for various technical reasons: | 8 for various technical reasons: |
| 9 | 9 |
| 10 - It's an 'invisible feature', i.e. it doesn't expose a new API or | 10 - It's an 'invisible feature', i.e. it doesn't expose a new API or |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 # Note that this behaviour doesn't seem to happen when starting an | 547 # Note that this behaviour doesn't seem to happen when starting an |
| 548 # application 'normally', i.e. when using the application launcher to | 548 # application 'normally', i.e. when using the application launcher to |
| 549 # start the activity. | 549 # start the activity. |
| 550 logging.info('Ignoring system\'s low randomization of browser libraries' + | 550 logging.info('Ignoring system\'s low randomization of browser libraries' + |
| 551 ' for regular devices') | 551 ' for regular devices') |
| 552 | 552 |
| 553 if not renderer_status: | 553 if not renderer_status: |
| 554 return ResultType.FAIL, renderer_logs | 554 return ResultType.FAIL, renderer_logs |
| 555 | 555 |
| 556 return ResultType.PASS, logs | 556 return ResultType.PASS, logs |
| 557 | |
| 558 | |
| 559 class LinkerLowMemoryThresholdTest(LinkerTestCaseBase): | |
| 560 """This test checks that the definitions for the low-memory device physical | |
| 561 RAM threshold are identical in the base/ and linker sources. Because these | |
| 562 two components should absolutely not depend on each other, it's difficult | |
| 563 to perform this check correctly at runtime inside the linker test binary | |
| 564 without introducing hairy dependency issues in the build, or complicated | |
| 565 plumbing at runtime. | |
| 566 | |
| 567 To work-around this, this test looks directly into the sources for a | |
| 568 definition of the same constant that should look like: | |
| 569 | |
| 570 #define ANDROID_LOW_MEMORY_DEVICE_THRESHOLD_MB <number> | |
| 571 | |
| 572 And will check that the values for <number> are identical in all of | |
| 573 them.""" | |
| 574 | |
| 575 # A regular expression used to find the definition of the threshold in all | |
| 576 # sources: | |
| 577 _RE_THRESHOLD_DEFINITION = re.compile( | |
| 578 r'^\s*#\s*define\s+ANDROID_LOW_MEMORY_DEVICE_THRESHOLD_MB\s+(\d+)\s*$', | |
| 579 re.MULTILINE) | |
| 580 | |
| 581 # The list of source files, relative to DIR_SOURCE_ROOT, which must contain | |
| 582 # a line that matches the re above. | |
| 583 _SOURCES_LIST = [ | |
| 584 'base/android/sys_utils.cc', | |
| 585 'content/common/android/linker/linker_jni.cc' ] | |
| 586 | |
| 587 def _RunTest(self, adb): | |
| 588 failure = False | |
| 589 values = [] | |
| 590 # First, collect all the values in all input sources. | |
| 591 re = LinkerLowMemoryThresholdTest._RE_THRESHOLD_DEFINITION | |
| 592 for source in LinkerLowMemoryThresholdTest._SOURCES_LIST: | |
| 593 source_path = os.path.join(constants.DIR_SOURCE_ROOT, source); | |
| 594 if not os.path.exists(source_path): | |
| 595 logging.error('Missing source file: ' + source_path) | |
| 596 failure = True | |
| 597 continue | |
| 598 with open(source_path) as f: | |
| 599 source_text = f.read() | |
| 600 # For some reason, re.match() never works here. | |
| 601 source_values = re.findall(source_text) | |
| 602 if not source_values: | |
| 603 logging.error('Missing low-memory threshold definition in ' + \ | |
| 604 source_path) | |
| 605 logging.error('Source:\n%s\n' % source_text) | |
| 606 failure = True | |
| 607 continue | |
| 608 values += source_values | |
| 609 | |
| 610 # Second, check that they are all the same. | |
| 611 if not failure: | |
| 612 for value in values[1:]: | |
| 613 if value != values[0]: | |
| 614 logging.error('Value mismatch: ' + repr(values)) | |
| 615 failure = True | |
| 616 | |
| 617 if failure: | |
| 618 return ResultType.FAIL, 'Incorrect low-end memory threshold definitions!' | |
| 619 | |
| 620 return ResultType.PASS, '' | |
| OLD | NEW |