| Index: base/process/process_metrics_posix.cc
|
| diff --git a/base/process/process_metrics_posix.cc b/base/process/process_metrics_posix.cc
|
| index 3422a730dce691847b886de4f092c1720ede0c2f..531f6a40d701444ea77c290130221ad502642198 100644
|
| --- a/base/process/process_metrics_posix.cc
|
| +++ b/base/process/process_metrics_posix.cc
|
| @@ -4,8 +4,11 @@
|
|
|
| #include "base/process/process_metrics.h"
|
|
|
| +#include <sys/resource.h>
|
| #include <sys/time.h>
|
|
|
| +#include "base/logging.h"
|
| +
|
| namespace base {
|
|
|
| int64 TimeValToMicroseconds(const struct timeval& tv) {
|
| @@ -18,4 +21,35 @@ int64 TimeValToMicroseconds(const struct timeval& tv) {
|
|
|
| ProcessMetrics::~ProcessMetrics() { }
|
|
|
| +#if defined(OS_LINUX)
|
| +static const rlim_t kSystemDefaultMaxFds = 8192;
|
| +#elif defined(OS_MACOSX)
|
| +static const rlim_t kSystemDefaultMaxFds = 256;
|
| +#elif defined(OS_SOLARIS)
|
| +static const rlim_t kSystemDefaultMaxFds = 8192;
|
| +#elif defined(OS_FREEBSD)
|
| +static const rlim_t kSystemDefaultMaxFds = 8192;
|
| +#elif defined(OS_OPENBSD)
|
| +static const rlim_t kSystemDefaultMaxFds = 256;
|
| +#elif defined(OS_ANDROID)
|
| +static const rlim_t kSystemDefaultMaxFds = 1024;
|
| +#endif
|
| +
|
| +size_t GetMaxFds() {
|
| + rlim_t max_fds;
|
| + struct rlimit nofile;
|
| + if (getrlimit(RLIMIT_NOFILE, &nofile)) {
|
| + // getrlimit failed. Take a best guess.
|
| + max_fds = kSystemDefaultMaxFds;
|
| + RAW_LOG(ERROR, "getrlimit(RLIMIT_NOFILE) failed");
|
| + } else {
|
| + max_fds = nofile.rlim_cur;
|
| + }
|
| +
|
| + if (max_fds > INT_MAX)
|
| + max_fds = INT_MAX;
|
| +
|
| + return static_cast<size_t>(max_fds);
|
| +}
|
| +
|
| } // namespace base
|
|
|