diff options
author | evanm@google.com <evanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-14 20:49:16 +0000 |
---|---|---|
committer | evanm@google.com <evanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-14 20:49:16 +0000 |
commit | 0b100bc8b653af9c1a12794a7508d1269fafc156 (patch) | |
tree | d78f750536d7f60cdf460fdbc5bb39f74e9af29c /base/process.cc | |
parent | 36b147bd8298c28e8ba4e7ab529b199aa3cce680 (diff) | |
download | chromium_src-0b100bc8b653af9c1a12794a7508d1269fafc156.zip chromium_src-0b100bc8b653af9c1a12794a7508d1269fafc156.tar.gz chromium_src-0b100bc8b653af9c1a12794a7508d1269fafc156.tar.bz2 |
Port parts of base/process_util to Linux.
Review URL: http://codereview.chromium.org/6492
Patch from Paweł Hajdan jr <phajdan.jr@gmail.com>.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@3363 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/process.cc')
-rw-r--r-- | base/process.cc | 110 |
1 files changed, 0 insertions, 110 deletions
diff --git a/base/process.cc b/base/process.cc deleted file mode 100644 index 38fe63c..0000000 --- a/base/process.cc +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) 2006-2008 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. - -#include "base/process.h" -#include "base/logging.h" -#include "base/process_util.h" -#include "base/scoped_ptr.h" - -bool Process::IsProcessBackgrounded() { - DCHECK(process_); - DWORD priority = GetPriorityClass(process_); - if (priority == 0) - return false; // Failure case. - return priority == BELOW_NORMAL_PRIORITY_CLASS; -} - -bool Process::SetProcessBackgrounded(bool value) { - DCHECK(process_); - DWORD priority = value ? BELOW_NORMAL_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS; - return (SetPriorityClass(process_, priority) != 0); -} - -// According to MSDN, these are the default values which XP -// uses to govern working set soft limits. -// http://msdn.microsoft.com/en-us/library/ms686234.aspx -static const int kWinDefaultMinSet = 50 * 4096; -static const int kWinDefaultMaxSet = 345 * 4096; -static const int kDampingFactor = 2; - -bool Process::ReduceWorkingSet() { - if (!process_) - return false; - // The idea here is that when we the process' working set has gone - // down, we want to release those pages to the OS quickly. However, - // when it is not going down, we want to be careful not to release - // too much back to the OS, as it could cause additional paging. - - // We use a damping function to lessen the working set over time. - // As the process grows/shrinks, this algorithm will lag with - // working set reduction. - // - // The intended algorithm is: - // TargetWorkingSetSize = (LastWorkingSet/2 + CurrentWorkingSet) /2 - - scoped_ptr<process_util::ProcessMetrics> metrics( - process_util::ProcessMetrics::CreateProcessMetrics(process_)); - process_util::WorkingSetKBytes working_set; - if (!metrics->GetWorkingSetKBytes(&working_set)) - return false; - - - // We want to compute the amount of working set that the process - // needs to keep in memory. Since other processes contain the - // pages which are shared, we don't need to reserve them in our - // process, the system already has them tagged. Keep in mind, we - // don't get to control *which* pages get released, but if we - // assume reasonable distribution of pages, this should generally - // be the right value. - size_t current_working_set_size = working_set.priv + - working_set.shareable; - - size_t max_size = current_working_set_size; - if (last_working_set_size_) - max_size = (max_size + last_working_set_size_) / 2; // Average. - max_size *= 1024; // Convert to KBytes. - last_working_set_size_ = current_working_set_size / kDampingFactor; - - BOOL rv = SetProcessWorkingSetSize(process_, kWinDefaultMinSet, max_size); - return rv == TRUE; -} - -bool Process::UnReduceWorkingSet() { - if (!process_) - return false; - - if (!last_working_set_size_) - return true; // There was nothing to undo. - - // We've had a reduced working set. Make sure we have lots of - // headroom now that we're active again. - size_t limit = last_working_set_size_ * kDampingFactor * 2 * 1024; - BOOL rv = SetProcessWorkingSetSize(process_, kWinDefaultMinSet, limit); - return rv == TRUE; -} - -bool Process::EmptyWorkingSet() { - if (!process_) - return false; - - BOOL rv = SetProcessWorkingSetSize(process_, -1, -1); - return rv == TRUE; -} - -int32 Process::pid() const { - if (process_ == 0) - return 0; - - return process_util::GetProcId(process_); -} - -bool Process::is_current() const { - return process_ == GetCurrentProcess(); -} - -// static -Process Process::Current() { - return Process(GetCurrentProcess()); -} - |