OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #if !defined(DART_IO_DISABLED) | 5 #if !defined(DART_IO_DISABLED) |
6 | 6 |
7 #include "platform/globals.h" | 7 #include "platform/globals.h" |
8 #if defined(HOST_OS_ANDROID) | 8 #if defined(HOST_OS_ANDROID) |
9 | 9 |
10 #include "bin/process.h" | 10 #include "bin/process.h" |
11 | 11 |
12 #include <errno.h> // NOLINT | 12 #include <errno.h> // NOLINT |
13 #include <fcntl.h> // NOLINT | 13 #include <fcntl.h> // NOLINT |
14 #include <poll.h> // NOLINT | 14 #include <poll.h> // NOLINT |
15 #include <stdio.h> // NOLINT | 15 #include <stdio.h> // NOLINT |
16 #include <stdlib.h> // NOLINT | 16 #include <stdlib.h> // NOLINT |
17 #include <string.h> // NOLINT | 17 #include <string.h> // NOLINT |
18 #include <sys/wait.h> // NOLINT | 18 #include <sys/wait.h> // NOLINT |
19 #include <unistd.h> // NOLINT | 19 #include <unistd.h> // NOLINT |
20 | 20 |
21 #include "bin/dartutils.h" | 21 #include "bin/dartutils.h" |
22 #include "bin/fdutils.h" | 22 #include "bin/fdutils.h" |
| 23 #include "bin/file.h" |
23 #include "bin/lockers.h" | 24 #include "bin/lockers.h" |
24 #include "bin/log.h" | 25 #include "bin/log.h" |
| 26 #include "bin/reference_counting.h" |
25 #include "bin/thread.h" | 27 #include "bin/thread.h" |
26 | 28 |
27 #include "platform/signal_blocker.h" | 29 #include "platform/signal_blocker.h" |
28 #include "platform/utils.h" | 30 #include "platform/utils.h" |
29 | 31 |
30 extern char** environ; | 32 extern char** environ; |
31 | 33 |
32 namespace dart { | 34 namespace dart { |
33 namespace bin { | 35 namespace bin { |
34 | 36 |
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
880 void Process::TerminateExitCodeHandler() { | 882 void Process::TerminateExitCodeHandler() { |
881 ExitCodeHandler::TerminateExitCodeThread(); | 883 ExitCodeHandler::TerminateExitCodeThread(); |
882 } | 884 } |
883 | 885 |
884 | 886 |
885 intptr_t Process::CurrentProcessId() { | 887 intptr_t Process::CurrentProcessId() { |
886 return static_cast<intptr_t>(getpid()); | 888 return static_cast<intptr_t>(getpid()); |
887 } | 889 } |
888 | 890 |
889 | 891 |
| 892 int64_t Process::CurrentRSS() { |
| 893 // The second value in /proc/self/statm is the current RSS in pages. |
| 894 File* statm = File::Open("/proc/self/statm", File::kRead); |
| 895 if (statm == NULL) { |
| 896 return -1; |
| 897 } |
| 898 RefCntReleaseScope<File> releaser(statm); |
| 899 const intptr_t statm_length = 1 * KB; |
| 900 void* buffer = reinterpret_cast<void*>(Dart_ScopeAllocate(statm_length)); |
| 901 const intptr_t statm_read = statm->Read(buffer, statm_length); |
| 902 if (statm_read <= 0) { |
| 903 return -1; |
| 904 } |
| 905 int64_t current_rss_pages = 0; |
| 906 int matches = sscanf(reinterpret_cast<char*>(buffer), "%*s%" Pd64 "", |
| 907 ¤t_rss_pages); |
| 908 if (matches != 1) { |
| 909 return -1; |
| 910 } |
| 911 return current_rss_pages * getpagesize(); |
| 912 } |
| 913 |
| 914 |
| 915 int64_t Process::MaxRSS() { |
| 916 struct rusage usage; |
| 917 usage.ru_maxrss = 0; |
| 918 int r = getrusage(RUSAGE_SELF, &usage); |
| 919 if (r < 0) { |
| 920 return -1; |
| 921 } |
| 922 return usage.ru_maxrss * KB; |
| 923 } |
| 924 |
| 925 |
890 static Mutex* signal_mutex = new Mutex(); | 926 static Mutex* signal_mutex = new Mutex(); |
891 static SignalInfo* signal_handlers = NULL; | 927 static SignalInfo* signal_handlers = NULL; |
892 static const int kSignalsCount = 7; | 928 static const int kSignalsCount = 7; |
893 static const int kSignals[kSignalsCount] = { | 929 static const int kSignals[kSignalsCount] = { |
894 SIGHUP, SIGINT, SIGTERM, SIGUSR1, SIGUSR2, SIGWINCH, | 930 SIGHUP, SIGINT, SIGTERM, SIGUSR1, SIGUSR2, SIGWINCH, |
895 SIGQUIT // Allow VMService to listen on SIGQUIT. | 931 SIGQUIT // Allow VMService to listen on SIGQUIT. |
896 }; | 932 }; |
897 | 933 |
898 | 934 |
899 SignalInfo::~SignalInfo() { | 935 SignalInfo::~SignalInfo() { |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
996 VOID_NO_RETRY_EXPECTED(sigaction(signal, &act, NULL)); | 1032 VOID_NO_RETRY_EXPECTED(sigaction(signal, &act, NULL)); |
997 } | 1033 } |
998 } | 1034 } |
999 | 1035 |
1000 } // namespace bin | 1036 } // namespace bin |
1001 } // namespace dart | 1037 } // namespace dart |
1002 | 1038 |
1003 #endif // defined(HOST_OS_ANDROID) | 1039 #endif // defined(HOST_OS_ANDROID) |
1004 | 1040 |
1005 #endif // !defined(DART_IO_DISABLED) | 1041 #endif // !defined(DART_IO_DISABLED) |
OLD | NEW |