示例#1
0
    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()))