You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2009/10/14 00:24:16 UTC
svn commit: r824956 - in /activemq/activemq-cpp/trunk/activemq-cpp:
configure.ac src/main/decaf/lang/System.cpp src/main/decaf/lang/System.h
src/test/decaf/lang/SystemTest.cpp src/test/decaf/lang/SystemTest.h
Author: tabish
Date: Tue Oct 13 22:24:15 2009
New Revision: 824956
URL: http://svn.apache.org/viewvc?rev=824956&view=rev
Log:
Add first cut at System.availableProcessors and unit test it.
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/configure.ac
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h
activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp/configure.ac
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/configure.ac?rev=824956&r1=824955&r2=824956&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/configure.ac (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/configure.ac Tue Oct 13 22:24:15 2009
@@ -110,6 +110,8 @@
AC_CHECK_HEADERS([sys/time.h])
AC_CHECK_HEADERS([sys/timeb.h])
AC_CHECK_HEADERS([sys/wait.h])
+AC_CHECK_HEADERS([sys/types.h])
+AC_CHECK_HEADERS([sys/sysctl.h])
AC_CHECK_HEADERS([sys/resource.h])
AC_CHECK_HEADERS([pthread.h])
AC_CHECK_HEADERS([errno.h])
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp?rev=824956&r1=824955&r2=824956&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp Tue Oct 13 22:24:15 2009
@@ -38,6 +38,12 @@
#ifdef HAVE_TIME_H
#include <time.h>
#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
#include <cstdlib>
@@ -283,3 +289,40 @@
}
#endif
+
+////////////////////////////////////////////////////////////////////////////////
+int System::availableProcessors() {
+
+ int numCpus = 1;
+
+#if defined(_WIN32)
+
+ SYSTEM_INFO sysInfo;
+ ::GetSystemInfo( &sysInfo );
+ numCpus = sysInfo.dwNumberOfProcessors;
+
+#elif defined(__APPLE__)
+
+ // derived from examples in the sysctl(3) man page from FreeBSD
+ int mib[2];
+ std::size_t len;
+
+ mib[0] = CTL_HW;
+ mib[1] = HW_NCPU;
+ len = sizeof(numCpus);
+ sysctl(mib, 2, &numCpus, &len, NULL, 0);
+
+#else
+
+ // returns number of online(_SC_NPROCESSORS_ONLN) processors, number configured(_SC_NPROCESSORS_CONF)
+ // may be more than online
+ numCpus = sysconf( _SC_NPROCESSORS_ONLN );
+
+#endif
+
+ if( numCpus < 1 ) {
+ numCpus = 1;
+ }
+
+ return numCpus;
+}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h?rev=824956&r1=824955&r2=824956&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h Tue Oct 13 22:24:15 2009
@@ -109,6 +109,17 @@
*/
static long long nanoTime();
+ /**
+ * Returns the number of processors available for exection of Decaf Threads.
+ *
+ * This value may change during a particular execution of a Decaf based application. Applications
+ * that are sensitive to the number of available processors should therefore occasionally poll
+ * this property and adjust their resource usage appropriately.
+ *
+ * @return the number of available processors.
+ */
+ static int availableProcessors();
+
private:
/**
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.cpp?rev=824956&r1=824955&r2=824956&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.cpp Tue Oct 13 22:24:15 2009
@@ -31,6 +31,12 @@
}
////////////////////////////////////////////////////////////////////////////////
+void SystemTest::test_availableProcessors() {
+
+ CPPUNIT_ASSERT( System::availableProcessors() >= 1 );
+}
+
+////////////////////////////////////////////////////////////////////////////////
void SystemTest::test_getenv() {
CPPUNIT_ASSERT( System::getenv( "PATH" ) != "" );
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.h?rev=824956&r1=824955&r2=824956&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/SystemTest.h Tue Oct 13 22:24:15 2009
@@ -27,6 +27,7 @@
class SystemTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE( SystemTest );
+ CPPUNIT_TEST( test_availableProcessors );
CPPUNIT_TEST( test_getenv );
CPPUNIT_TEST( test_getenv2 );
CPPUNIT_TEST( test_setenv );
@@ -40,6 +41,7 @@
SystemTest();
virtual ~SystemTest() {}
+ void test_availableProcessors();
void test_getenv();
void test_getenv2();
void test_setenv();