Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Unified Diff: base/process.cc

Issue 6492: Port parts of base/process_util to Linux. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 12 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());
-}
-
« no previous file with comments | « base/SConscript ('k') | base/process_posix.cc » ('j') | base/process_util_linux.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698