def _ProcessPhasedOrderfile(self, files): """Process the phased orderfiles produced by system health benchmarks. The offsets will be placed in _GetUnpatchedOrderfileFilename(). Args: file: Profile files pulled locally. """ self._step_recorder.BeginStep('Process Phased Orderfile') profiles = process_profiles.ProfileManager(files) processor = process_profiles.SymbolOffsetProcessor( self._compiler.lib_chrome_so) phaser = phased_orderfile.PhasedAnalyzer(profiles, processor) if self._options.offsets_for_memory: profile_offsets = phaser.GetOffsetsForMemoryFootprint() else: profile_offsets = phaser.GetOffsetsForStartup() self._output_data['orderfile_size'] = { 'startup_kib': processor.OffsetsPrimarySize(profile_offsets.startup) / 1024, 'common_kib': processor.OffsetsPrimarySize(profile_offsets.common) / 1024, 'interaction_kib': processor.OffsetsPrimarySize(profile_offsets.interaction) / 1024 } offsets_list = (profile_offsets.startup + profile_offsets.common + profile_offsets.interaction) ordered_symbols = processor.GetOrderedSymbols(offsets_list) if not ordered_symbols: raise Exception('Failed to get ordered symbols') with open(self._GetUnpatchedOrderfileFilename(), 'w') as orderfile: orderfile.write('\n'.join(ordered_symbols))
def testProfileStability(self): symbols = [SimpleTestSymbol(str(i), i, 10) for i in xrange(20)] phaser = phased_orderfile.PhasedAnalyzer( None, TestSymbolOffsetProcessor(symbols)) opo = lambda s, c, i: phased_orderfile.OrderfilePhaseOffsets( startup=s, common=c, interaction=i) phaser._phase_offsets = [opo(range(5), range(6, 10), range(11,15)), opo(range(4), range(6, 10), range(18, 20))] self.assertEquals((1.25, 1, None), phaser.ComputeStability())
def testIsStable(self): symbols = [SimpleTestSymbol(str(i), i, 10) for i in xrange(20)] phaser = phased_orderfile.PhasedAnalyzer( None, TestSymbolOffsetProcessor(symbols)) opo = lambda s, c, i: phased_orderfile.OrderfilePhaseOffsets( startup=s, common=c, interaction=i) phaser._phase_offsets = [opo(range(5), range(6, 10), range(11,15)), opo(range(4), range(6, 10), range(18, 20))] phaser.STARTUP_STABILITY_THRESHOLD = 1.1 self.assertFalse(phaser.IsStableProfile()) phaser.STARTUP_STABILITY_THRESHOLD = 1.5 self.assertTrue(phaser.IsStableProfile())
def testGetOrderfilePhaseOffsets(self): mgr = TestProfileManager({ self.File(0, 0): [12, 21, -1, 33], self.File(0, 1): [31, 49, 52], self.File(100, 0): [113, 128], self.File(200, 1): [132, 146], self.File(300, 0): [19, 20, 32], self.File(300, 1): [24, 39]}) phaser = phased_orderfile.PhasedAnalyzer(mgr, Mod10Processor()) opo = lambda s, c, i: phased_orderfile.OrderfilePhaseOffsets( startup=s, common=c, interaction=i) self.assertListEqual([opo([10, 20], [30], [40, 50]), opo([110, 120], [], []), opo([], [], [130, 140]), opo([10], [20, 30], [])], phaser._GetOrderfilePhaseOffsets())
def testGetOffsetVariations(self): mgr = TestProfileManager({ ProfileFile(40, 0, ''): [1, 2, 3], ProfileFile(50, 1, ''): [3, 4, 5], ProfileFile(51, 0, 'renderer'): [2, 3, 6], ProfileFile(51, 1, 'gpu-process'): [6, 7], ProfileFile(70, 0, ''): [2, 6, 8, 9], ProfileFile(70, 1, ''): [9]}) phaser = phased_orderfile.PhasedAnalyzer(mgr, IdentityProcessor()) offsets = phaser.GetOffsetsForMemoryFootprint() self.assertListEqual([1, 2, 8], offsets.startup) self.assertListEqual([6, 3, 9], offsets.common) self.assertListEqual([4, 5, 7], offsets.interaction) offsets = phaser.GetOffsetsForStartup() self.assertListEqual([1, 2, 6, 8], offsets.startup) self.assertListEqual([3, 9], offsets.common) self.assertListEqual([4, 5, 7], offsets.interaction)
def testGetCombinedProcessOffsets(self): mgr = TestProfileManager({ ProfileFile(40, 0, ''): [1, 2, 3], ProfileFile(50, 1, ''): [3, 4, 5], ProfileFile(51, 0, 'renderer'): [2, 3, 6], ProfileFile(51, 1, 'gpu-process'): [6, 7], ProfileFile(70, 0, ''): [2, 8, 9], ProfileFile(70, 1, ''): [9]}) phaser = phased_orderfile.PhasedAnalyzer(mgr, IdentityProcessor()) offsets = phaser._GetCombinedProcessOffsets('browser') self.assertListEqual([1, 2, 8], sorted(offsets.startup)) self.assertListEqual([4, 5], sorted(offsets.interaction)) self.assertListEqual([3, 9], sorted(offsets.common)) offsets = phaser._GetCombinedProcessOffsets('gpu-process') self.assertListEqual([], sorted(offsets.startup)) self.assertListEqual([6, 7], sorted(offsets.interaction)) self.assertListEqual([], sorted(offsets.common)) self.assertListEqual(['browser', 'gpu-process', 'renderer'], sorted(phaser._GetProcessList()))