From a105e5ba1e92f91b34e7f25cc4b307900248881a Mon Sep 17 00:00:00 2001 From: Markus Mohrhard Date: Mon, 31 Aug 2015 01:36:02 +0200 Subject: [PATCH 098/398] log resource usage of unit tests on UNX platforms Change-Id: I3788eae60f73bc42488bf2e4961922962f7e505b Reviewed-on: https://gerrit.libreoffice.org/18155 Reviewed-by: Markus Mohrhard Tested-by: Markus Mohrhard (cherry picked from commit 87514b0907dfbb479e2646b5ff951c68babf3417) --- sal/cppunittester/cppunittester.cxx | 50 +++++++++++++++++++++++++++++++++++++ solenv/gbuild/CppunitTest.mk | 2 +- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/sal/cppunittester/cppunittester.cxx b/sal/cppunittester/cppunittester.cxx index b637fb62cb2d..ef9212d6a2fa 100644 --- a/sal/cppunittester/cppunittester.cxx +++ b/sal/cppunittester/cppunittester.cxx @@ -21,6 +21,11 @@ #include #endif +#ifdef UNX +#include +#include +#endif + #include #include #include @@ -292,11 +297,48 @@ public: } }; +#ifdef UNX + +double get_time(timeval* time) +{ + double nTime = (double)time->tv_sec; + nTime += ((double)time->tv_usec)/1000000.0; + return nTime; +} + +OString generateTestName(const OUString& rPath) +{ + sal_Int32 nPathSep = rPath.lastIndexOf("/"); + OUString aTestName = rPath.copy(nPathSep+1); + return OUStringToOString(aTestName, RTL_TEXTENCODING_UTF8); +} + +void reportResourceUsage(const OUString& rPath) +{ + OUString aFullPath = rPath + OUString(".resource.log"); + rusage resource_usage; + getrusage(RUSAGE_SELF, &resource_usage); + + OString aPath = OUStringToOString(aFullPath, RTL_TEXTENCODING_UTF8); + std::ofstream resource_file(aPath.getStr()); + resource_file << "Name = " << generateTestName(rPath) << std::endl; + double nUserSpace = get_time(&resource_usage.ru_utime); + double nKernelSpace = get_time(&resource_usage.ru_stime); + resource_file << "UserSpace = " << nUserSpace << std::endl; + resource_file << "KernelSpace = " << nKernelSpace << std::endl; +} +#else +void reportResourceUsage(const OUString& /*rPath*/) +{ +} +#endif + } SAL_IMPLEMENT_MAIN() { bool ok = false; + OUString path; try { #ifdef WNT @@ -322,6 +364,12 @@ SAL_IMPLEMENT_MAIN() while (index < rtl_getAppCommandArgCount()) { rtl::OUString arg = getArgument(index); + if (arg == "--target") + { + path = getArgument(++index); + ++index; + continue; + } if ( arg != "--protector" ) { if (testlib.empty()) @@ -383,6 +431,8 @@ SAL_IMPLEMENT_MAIN() SAL_WARN("vcl.app", "Fatal exception: " << e.what()); } + reportResourceUsage(path); + return ok ? EXIT_SUCCESS : EXIT_FAILURE; } diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk index 021ecc8c37aa..944a87ab612d 100644 --- a/solenv/gbuild/CppunitTest.mk +++ b/solenv/gbuild/CppunitTest.mk @@ -101,7 +101,7 @@ $(call gb_CppunitTest_get_target,%) :| $(gb_CppunitTest_RUNTIMEDEPS) PYTHONDONTWRITEBYTECODE=1) \ $(ICECREAM_RUN) $(gb_CppunitTest_GDBTRACE) $(gb_CppunitTest_VALGRINDTOOL) $(gb_CppunitTest_CPPTESTCOMMAND) \ $(call gb_LinkTarget_get_target,$(call gb_CppunitTest_get_linktarget,$*)) \ - $(call gb_CppunitTest__make_args) \ + $(call gb_CppunitTest__make_args) --target $@ \ $(if $(gb_CppunitTest__interactive),, \ > $@.log 2>&1 \ || ($(if $(value gb_CppunitTest_postprocess), \ -- 2.12.0