| Index: chrome/test/functional/memory.py
|
| ===================================================================
|
| --- chrome/test/functional/memory.py (revision 261231)
|
| +++ chrome/test/functional/memory.py (working copy)
|
| @@ -1,134 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import os
|
| -import sys
|
| -import time
|
| -
|
| -import pyauto_functional # Must be imported before pyauto
|
| -import pyauto
|
| -import test_utils
|
| -
|
| -
|
| -class MemoryTest(pyauto.PyUITest):
|
| - """Tests for memory usage of Chrome-related processes.
|
| -
|
| - These tests are meant to be used manually, not as part of the continuous
|
| - test cycle. This is because each test starts up and periodically
|
| - measures/records the memory usage of a relevant Chrome process, doing so
|
| - repeatedly until the test is manually killed. Currently, this script only
|
| - works in Linux and ChromeOS, as it uses a Linux shell command to query the
|
| - system for process memory usage info (test_utils.GetMemoryUsageOfProcess()).
|
| -
|
| - The tests in this suite produce the following output files (relative to the
|
| - current working directory):
|
| -
|
| - testTabRendererProcessMemoryUsage: 'renderer_process_mem.txt'
|
| - testExtensionProcessMemoryUsage: 'extension_process_mem.txt'
|
| - """
|
| -
|
| - # Constants for all tests in this suite.
|
| - NUM_SECONDS_BETWEEN_MEASUREMENTS = 10
|
| - MEASUREMENT_LOG_MESSAGE_TEMPLATE = '[%s] %.2f MB (pid: %d)'
|
| - LOG_TO_OUTPUT_FILE = True
|
| -
|
| - # Constants for testTabRendererProcessMemoryUsage.
|
| - RENDERER_PROCESS_URL = 'http://chrome.angrybirds.com'
|
| - RENDERER_PROCESS_OUTPUT_FILE = 'renderer_process_mem.txt'
|
| -
|
| - # Constants for testExtensionProcessMemoryUsage.
|
| - EXTENSION_LOCATION = os.path.abspath(os.path.join(
|
| - pyauto.PyUITest.DataDir(), 'extensions', 'google_talk.crx'))
|
| - EXTENSION_PROCESS_NAME = 'Google Talk'
|
| - EXTENSION_PROCESS_OUTPUT_FILE = 'extension_process_mem.txt'
|
| -
|
| - def _GetPidOfExtensionProcessByName(self, name):
|
| - """Identifies the process ID of an extension process, given its name.
|
| -
|
| - Args:
|
| - name: The string name of an extension process, as returned by the function
|
| - GetBrowserInfo().
|
| -
|
| - Returns:
|
| - The integer process identifier (PID) for the specified process, or
|
| - None if the PID cannot be identified.
|
| - """
|
| - info = self.GetBrowserInfo()['extension_views']
|
| - pid = [x['pid'] for x in info if x['name'] == '%s' % name]
|
| - if pid:
|
| - return pid[0]
|
| - return None
|
| -
|
| - def _LogMessage(self, log_file, msg):
|
| - """Logs a message to the screen, and to a log file if necessary.
|
| -
|
| - Args:
|
| - log_file: The string name of a log file to which to write.
|
| - msg: The message to log.
|
| - """
|
| - print msg
|
| - sys.stdout.flush()
|
| - if self.LOG_TO_OUTPUT_FILE:
|
| - print >>open(log_file, 'a'), msg
|
| -
|
| - def testTabRendererProcessMemoryUsage(self):
|
| - """Test the memory usage of the renderer process for a tab.
|
| -
|
| - This test periodically queries the system for the current memory usage
|
| - of a tab's renderer process. The test will take measurements forever; you
|
| - must manually kill the test to terminate it.
|
| - """
|
| - if (self.LOG_TO_OUTPUT_FILE and
|
| - os.path.exists(self.RENDERER_PROCESS_OUTPUT_FILE)):
|
| - os.remove(self.RENDERER_PROCESS_OUTPUT_FILE)
|
| - self.NavigateToURL(self.RENDERER_PROCESS_URL)
|
| - self._LogMessage(
|
| - self.RENDERER_PROCESS_OUTPUT_FILE,
|
| - 'Memory usage for renderer process of a tab navigated to: "%s"' % (
|
| - self.RENDERER_PROCESS_URL))
|
| -
|
| - # A user must manually kill this test to terminate the following loop.
|
| - while True:
|
| - pid = self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid']
|
| - usage = test_utils.GetMemoryUsageOfProcess(pid)
|
| - current_time = time.asctime(time.localtime(time.time()))
|
| - self._LogMessage(
|
| - self.RENDERER_PROCESS_OUTPUT_FILE,
|
| - self.MEASUREMENT_LOG_MESSAGE_TEMPLATE % (current_time, usage, pid))
|
| - time.sleep(self.NUM_SECONDS_BETWEEN_MEASUREMENTS)
|
| -
|
| - def testExtensionProcessMemoryUsage(self):
|
| - """Test the memory usage of an extension process.
|
| -
|
| - This test periodically queries the system for the current memory usage
|
| - of an extension process. The test will take measurements forever; you
|
| - must manually kill the test to terminate it.
|
| - """
|
| - if (self.LOG_TO_OUTPUT_FILE and
|
| - os.path.exists(self.EXTENSION_PROCESS_OUTPUT_FILE)):
|
| - os.remove(self.EXTENSION_PROCESS_OUTPUT_FILE)
|
| - self.InstallExtension(self.EXTENSION_LOCATION)
|
| - # The PID is 0 until the extension has a chance to start up.
|
| - self.WaitUntil(
|
| - lambda: self._GetPidOfExtensionProcessByName(
|
| - self.EXTENSION_PROCESS_NAME) not in [0, None])
|
| - self._LogMessage(
|
| - self.EXTENSION_PROCESS_OUTPUT_FILE,
|
| - 'Memory usage for extension process with name: "%s"' % (
|
| - self.EXTENSION_PROCESS_NAME))
|
| -
|
| - # A user must manually kill this test to terminate the following loop.
|
| - while True:
|
| - pid = self._GetPidOfExtensionProcessByName(self.EXTENSION_PROCESS_NAME)
|
| - usage = test_utils.GetMemoryUsageOfProcess(pid)
|
| - current_time = time.asctime(time.localtime(time.time()))
|
| - self._LogMessage(
|
| - self.EXTENSION_PROCESS_OUTPUT_FILE,
|
| - self.MEASUREMENT_LOG_MESSAGE_TEMPLATE % (current_time, usage, pid))
|
| - time.sleep(self.NUM_SECONDS_BETWEEN_MEASUREMENTS)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - pyauto_functional.Main()
|
|
|