summaryrefslogtreecommitdiffstats
path: root/chrome/browser/memory_details.h
diff options
context:
space:
mode:
authorinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
committerinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
commit09911bf300f1a419907a9412154760efd0b7abc3 (patch)
treef131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/browser/memory_details.h
parent586acc5fe142f498261f52c66862fa417c3d52d2 (diff)
downloadchromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/memory_details.h')
-rw-r--r--chrome/browser/memory_details.h162
1 files changed, 162 insertions, 0 deletions
diff --git a/chrome/browser/memory_details.h b/chrome/browser/memory_details.h
new file mode 100644
index 0000000..bb179d2
--- /dev/null
+++ b/chrome/browser/memory_details.h
@@ -0,0 +1,162 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CHROME_BROWSER_MEMORY_DETAILS_H_
+#define CHROME_BROWSER_MEMORY_DETAILS_H_
+
+
+#include <string>
+#include <vector>
+
+#include "base/process_util.h"
+#include "base/ref_counted.h"
+
+class MessageLoop;
+
+// We collect data about each browser process. A browser may
+// have multiple processes (of course!). Even IE has multiple
+// processes these days.
+struct ProcessMemoryInformation {
+ ProcessMemoryInformation() {
+ memset(this, 0, sizeof(ProcessMemoryInformation));
+ }
+
+ // The process id.
+ int pid;
+ // The working set information.
+ process_util::WorkingSetKBytes working_set;
+ // The committed bytes.
+ process_util::CommittedKBytes committed;
+ // The process version
+ std::wstring version;
+ // The process product name.
+ std::wstring product_name;
+ // The number of processes which this memory represents.
+ int num_processes;
+ // A process is a diagnostics process if it is rendering
+ // about:xxx information.
+ bool is_diagnostics;
+};
+
+typedef std::vector<ProcessMemoryInformation> ProcessMemoryInformationList;
+
+// Information that we need about a plugin process.
+struct PluginProcessInformation {
+ int pid;
+ std::wstring dll_path;
+};
+typedef std::vector<PluginProcessInformation> PluginProcessInformationList;
+
+// Browser Process Information.
+struct ProcessData {
+ const wchar_t* name;
+ const wchar_t* process_name;
+ ProcessMemoryInformationList processes;
+};
+
+// MemoryDetails fetches memory details about current running browsers.
+// Because this data can only be fetched asynchronously, callers use
+// this class via a callback.
+//
+// Example usage:
+//
+// class MyMemoryDetailConsumer : public MemoryDetails {
+//
+// MyMemoryDetailConsumer() : MemoryDetails(true) {
+// StartFetch(); // Starts fetching details.
+// }
+//
+// // Your class stuff here
+//
+// virtual void OnDetailsAvailable() {
+// // do work with memory info here
+// }
+// }
+class MemoryDetails : public base::RefCountedThreadSafe<MemoryDetails> {
+ public:
+ // Known browsers which we collect details for.
+ enum {
+ CHROME_BROWSER = 0,
+ IE_BROWSER,
+ FIREFOX_BROWSER,
+ OPERA_BROWSER,
+ SAFARI_BROWSER,
+ MAX_BROWSERS
+ } BrowserProcess;
+
+ // Constructor.
+ MemoryDetails();
+ virtual ~MemoryDetails() {}
+
+ // Access to the process detail information. This is an array
+ // of MAX_BROWSER ProcessData structures. This data is only available
+ // after OnDetailsAvailable() has been called.
+ ProcessData* processes() { return process_data_; }
+
+ // Access to the plugin details.
+ const PluginProcessInformationList* plugins() const { return &plugins_; }
+
+ // Initiate updating the current memory details. These are fetched
+ // asynchronously because data must be collected from multiple threads.
+ // OnDetailsAvailable will be called when this process is complete.
+ void StartFetch();
+
+ virtual void OnDetailsAvailable() {}
+
+ private:
+ // Collect the a list of information about current plugin processes that
+ // will be used by about:memory. When finished, invokes back to the
+ // return_loop to run the rest of the about:memory functionality.
+ // Runs on the IO thread because the PluginProcessHost is only accessible
+ // from the IO thread.
+ void CollectPluginInformation();
+
+ // Collect current process information from the OS and store it
+ // for processing. If data has already been collected, clears old
+ // data and re-collects the data.
+ // Note - this function enumerates memory details from many processes
+ // and is fairly expensive to run.
+ void CollectProcessData();
+
+ // Collect renderer specific information. This information is gathered
+ // on the Browser thread, where the RenderHostIterator is accessible.
+ void CollectRenderHostInformation();
+
+ // Each time we take a memory sample, we do a little work to update
+ // the global histograms for tracking memory usage.
+ void UpdateHistograms();
+
+ ProcessData process_data_[MAX_BROWSERS];
+ PluginProcessInformationList plugins_;
+ MessageLoop* ui_loop_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(MemoryDetails);
+};
+
+#endif // CHROME_BROWSER_MEMORY_DETAILS_H_