Process Statistics header, add max RSS to render_pdfs
Committed: https://skia.googlesource.com/skia/+/6274baae7fe82ce6481da367687aa6168356e1e1
R=mtklein@google.com
Author: halcanary@google.com
Review URL: https://codereview.chromium.org/448993003
diff --git a/dm/DMReporter.cpp b/dm/DMReporter.cpp
index 14f5087..12bcfac 100644
--- a/dm/DMReporter.cpp
+++ b/dm/DMReporter.cpp
@@ -3,21 +3,7 @@
#include "SkDynamicAnnotations.h"
#include "SkCommonFlags.h"
#include "OverwriteLine.h"
-
-#if defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_ANDROID)
- #include <sys/resource.h>
- static long get_max_rss_kb() {
- struct rusage ru;
- getrusage(RUSAGE_SELF, &ru);
- #if defined(SK_BUILD_FOR_MAC)
- return ru.ru_maxrss / 1024; // Darwin reports bytes.
- #else
- return ru.ru_maxrss; // Linux reports kilobytes.
- #endif
- }
-#else
- static long get_max_rss_kb() { return 0; }
-#endif
+#include "ProcStats.h"
namespace DM {
@@ -36,8 +22,9 @@
status.appendf(", %d failed", failed);
}
if (FLAGS_verbose) {
- if (long max_rss_kb = get_max_rss_kb()) {
- status.appendf("\t%4ldM peak", max_rss_kb / 1024);
+ int max_rss_kb = sk_tools::getMaxResidentSetSizeKB();
+ if (max_rss_kb >= 0) {
+ status.appendf("\t%4dM peak", max_rss_kb / 1024);
}
status.appendf("\t%5dms\t%s", timeMs, name.c_str());
}
diff --git a/gyp/apptype_console.gypi b/gyp/apptype_console.gypi
index b993998..53cadf5 100644
--- a/gyp/apptype_console.gypi
+++ b/gyp/apptype_console.gypi
@@ -27,24 +27,32 @@
'target_conditions': [
['_type == "executable"', {
'mac_bundle' : 1,
+ 'sources': [
+ '../src/views/ios/SkOSWindow_iOS.mm',
+ '../src/views/mac/SkEventNotifier.mm',
+ '../experimental/iOSSampleApp/iPad/AppDelegate_iPad.mm',
+ '../experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.mm',
+ '../experimental/iOSSampleApp/Shared/SkUIView.mm',
+ '../experimental/iOSSampleApp/Shared/skia_ios.mm',
+ '../experimental/SimpleiOSApp/SimpleApp.mm',
+ ],
+ 'include_dirs' : [
+ '../experimental/iOSSampleApp/Shared',
+ '../include/views',
+ '../include/xml',
+ '../include/utils/mac',
+ '../src/views/mac',
+ ],
+ 'xcode_config_file': '../experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig',
+ 'mac_bundle_resources' : [
+ '../experimental/SimpleiOSApp/iPad/MainWindow_iPad.xib',
+ '../experimental/SimpleiOSApp/iPhone/MainWindow_iPhone.xib',
+ ],
+ 'xcode_settings' : {
+ 'INFOPLIST_FILE' : '../experimental/SimpleiOSApp/tool-Info.plist',
+ },
}],
],
- 'include_dirs' : [
- '../experimental/iOSSampleApp/Shared',
- '../include/views',
- '../include/xml',
- '../include/utils/mac',
- '../src/views/mac',
- ],
- 'sources': [
- '../src/views/ios/SkOSWindow_iOS.mm',
- '../src/views/mac/SkEventNotifier.mm',
- '../experimental/iOSSampleApp/iPad/AppDelegate_iPad.mm',
- '../experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.mm',
- '../experimental/iOSSampleApp/Shared/SkUIView.mm',
- '../experimental/iOSSampleApp/Shared/skia_ios.mm',
- '../experimental/SimpleiOSApp/SimpleApp.mm',
- ],
'dependencies': [
'views.gyp:views',
'xml.gyp:xml',
@@ -59,14 +67,6 @@
'$(SDKROOT)/System/Library/Frameworks/UIKit.framework',
],
},
- 'xcode_config_file': '../experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig',
- 'mac_bundle_resources' : [
- '../experimental/SimpleiOSApp/iPad/MainWindow_iPad.xib',
- '../experimental/SimpleiOSApp/iPhone/MainWindow_iPhone.xib',
- ],
- 'xcode_settings' : {
- 'INFOPLIST_FILE' : '../experimental/SimpleiOSApp/tool-Info.plist',
- },
}],
],
},
diff --git a/gyp/dm.gypi b/gyp/dm.gypi
index 92262f3..238c153 100644
--- a/gyp/dm.gypi
+++ b/gyp/dm.gypi
@@ -19,6 +19,7 @@
'jsoncpp.gyp:jsoncpp',
'skia_lib.gyp:skia_lib',
'tools.gyp:crash_handler',
+ 'tools.gyp:sk_tool_proc_stats',
'tools.gyp:sk_tool_utils',
],
'includes': [
diff --git a/gyp/tools.gyp b/gyp/tools.gyp
index f36c523..f4d927c 100644
--- a/gyp/tools.gyp
+++ b/gyp/tools.gyp
@@ -530,6 +530,7 @@
'pdf.gyp:pdf',
'skia_lib.gyp:skia_lib',
'tools.gyp:picture_utils',
+ 'tools.gyp:sk_tool_proc_stats',
],
'conditions': [
['skia_win_debuggers_path and skia_os == "win"',
@@ -646,6 +647,17 @@
'skia_lib.gyp:skia_lib',
],
},
+ {
+ 'target_name': 'sk_tool_proc_stats',
+ 'type': 'static_library',
+ 'sources': [
+ '../tools/ProcStats.h',
+ '../tools/ProcStats.cpp',
+ ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [ '../tools', ],
+ },
+ },
],
'conditions': [
['skia_shared_lib',
diff --git a/tools/ProcStats.cpp b/tools/ProcStats.cpp
new file mode 100644
index 0000000..9466039
--- /dev/null
+++ b/tools/ProcStats.cpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "ProcStats.h"
+
+#if defined(SK_BUILD_FOR_UNIX) || \
+ defined(SK_BUILD_FOR_MAC) || \
+ defined(SK_BUILD_FOR_ANDROID)
+
+ #include <sys/resource.h>
+ int sk_tools::getMaxResidentSetSizeKB() {
+ struct rusage ru;
+ getrusage(RUSAGE_SELF, &ru);
+ #if defined(SK_BUILD_FOR_MAC)
+ return static_cast<int>(ru.ru_maxrss / 1024); // Darwin reports bytes.
+ #else
+ return static_cast<int>(ru.ru_maxrss); // Linux reports kilobytes.
+ #endif
+ }
+
+#else
+
+ int sk_tools::getMaxResidentSetSizeKB() {
+ return -1;
+ }
+
+#endif
diff --git a/tools/ProcStats.h b/tools/ProcStats.h
new file mode 100644
index 0000000..42849f1
--- /dev/null
+++ b/tools/ProcStats.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef ProcStats_DEFINED
+#define ProcStats_DEFINED
+
+/**
+ * ProcStats - Process Statistics Functions
+ */
+
+namespace sk_tools {
+
+/**
+ * If not implemented for this OS, returns -1. Otherwise, return
+ * the maximum resident set size, as reported by getrusage().
+ */
+int getMaxResidentSetSizeKB();
+
+} // namespace sk_tools
+
+#endif // ProcStats_DEFINED
diff --git a/tools/render_pdfs_main.cpp b/tools/render_pdfs_main.cpp
index be29439..34e5e58 100644
--- a/tools/render_pdfs_main.cpp
+++ b/tools/render_pdfs_main.cpp
@@ -18,6 +18,7 @@
#include "SkTArray.h"
#include "SkTSort.h"
#include "PdfRenderer.h"
+#include "ProcStats.h"
#include "picture_utils.h"
__SK_FORCE_IMAGE_DECODER_LINKING;
@@ -219,7 +220,9 @@
}
}
}
- SkTQSort<SkString>(files.begin(), files.end() - 1);
+ if (files.count() > 0) {
+ SkTQSort<SkString>(files.begin(), files.end() - 1);
+ }
int failures = 0;
for (int i = 0; i < files.count(); i ++) {
if (!render_pdf(files[i], outputDir, renderer)) {
@@ -246,6 +249,11 @@
int failures = process_input(FLAGS_inputPaths, outputDir, *renderer);
+ int max_rss_kb = sk_tools::getMaxResidentSetSizeKB();
+ if (max_rss_kb >= 0) {
+ SkDebugf("%4dM peak ResidentSetSize\n", max_rss_kb / 1024);
+ }
+
if (failures != 0) {
SkDebugf("Failed to render %i PDFs.\n", failures);
return 1;