| Index: base/process.cc
|
| ===================================================================
|
| --- base/process.cc (revision 3009)
|
| +++ base/process.cc (working copy)
|
| @@ -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());
|
| -}
|
| -
|
|
|
|
|