summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--SConstruct2
-rw-r--r--SwifTools/Idle/MacOSXIdleQuerier.cpp25
-rw-r--r--SwifTools/Idle/MacOSXIdleQuerier.h17
-rw-r--r--SwifTools/Idle/PlatformIdleQuerier.cpp9
-rw-r--r--SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp10
-rw-r--r--SwifTools/SConscript2
6 files changed, 56 insertions, 9 deletions
diff --git a/SConstruct b/SConstruct
index 29be052..cfc34c5 100644
--- a/SConstruct
+++ b/SConstruct
@@ -50,97 +50,97 @@ if env["PLATFORM"] == "win32" :
env["CCFLAGS"] = env.get("ccflags", [])
env["LINKFLAGS"] = env.get("linkflags", [])
if env["optimize"] :
env.Append(CCFLAGS = "-O2")
if env["PLATFORM"] == "win32" :
env.Append(CCFLAGS = ["GL"])
env.Append(LINKFLAGS = ["/INCREMENTAL:NO", "/LTCG"])
if env["debug"] :
if env["PLATFORM"] == "win32" :
env.Append(CCFLAGS = ["/Zi", "/MDd"])
env.Append(LINKFLAGS = ["/DEBUG"])
else :
env.Append(CCFLAGS = "-g")
elif env["PLATFORM"] == "win32" :
env.Append(CCFLAGS = ["/MD"])
if env.get("universal", 0) :
assert(env["PLATFORM"] == "darwin")
env.Append(CCFLAGS = [
"-isysroot", "/Developer/SDKs/MacOSX10.4u.sdk",
"-arch", "i386",
"-arch", "ppc"])
env.Append(LINKFLAGS = [
"-mmacosx-version-min=10.4",
"-Wl", "-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk",
"-arch", "i386",
"-arch", "ppc"])
if env["warnings"] :
if env["PLATFORM"] == "win32" :
env.Append(CCFLAGS = ["/Wall"])
else :
env.Append(CCFLAGS = ["-W", "-Wall"])
#env.Append(CCFLAGS = ["-W", "-Wall", "-Wredundant-decls", "-pedantic", "-Wno-long-long", "-Woverloaded-virtual", "-Wundef", "-Wfloat-equal", "-Wold-style-cast"])
if env.get("coverage", 0) :
assert(env["PLATFORM"] != "win32")
env.Append(CCFLAGS = ["-fprofile-arcs", "-ftest-coverage"])
env.Append(LINKFLAGS = ["-fprofile-arcs", "-ftest-coverage"])
if env["PLATFORM"] == "win32" :
env.Append(LIBS = ["dnsapi", "ws2_32", "wsock32"])
env.Append(CCFLAGS = ["/EHsc", "/nologo"])
env["LINKCOM"] = [env["LINKCOM"], 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;1']
env["SHLINKCOM"] = [env["SHLINKCOM"], 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;2']
if env["PLATFORM"] == "darwin" :
- env.Append(FRAMEWORKS = "AppKit")
+ env.Append(FRAMEWORKS = ["IOKit", "AppKit"])
# Testing
env["TEST_TYPE"] = env["test"]
env.Alias("check", ".")
if "check" in ARGUMENTS or "check" in COMMAND_LINE_TARGETS :
env["TEST_TYPE"] = "unit"
env["TEST"] = (env["TEST_TYPE"] != "none") or env.GetOption("clean")
if env.get("valgrind", 0) :
env["TEST_RUNNER"] = "valgrind --suppressions=QA/valgrind.supp -q --leak-check=full --track-origins=yes "
# Packaging
if ARGUMENTS.get("SWIFT_INSTALLDIR", "") :
env["SWIFT_INSTALLDIR"] = Dir(ARGUMENTS["SWIFT_INSTALLDIR"]).abspath
conf_env = env.Clone()
Export("env")
Export("conf_env")
################################################################################
# Extend the default build environment (not affecting the configure env)
#
# Keeping both environments separated mostly because of SCons Issue 2391,
# although it doesn't hurt to separate them (e.g. not have pretty printed
# strings in config.log)
################################################################################
#if env["PLATFORM"] == "win32" :
# env["MSVC_BATCH"] = 1
# Pretty output
def colorize(command, target, color) :
colors = { "red": "31", "green": "32", "yellow": "33", "blue": "34" }
prefix = ""
suffix = ""
if sys.stdout.isatty() and env["PLATFORM"] != "win32":
prefix = "\033[0;" + colors[color] + ";140m"
suffix = "\033[0m"
return " " + prefix + command + suffix + " " + target
if int(ARGUMENTS.get("V", 0)) == 0:
env["CCCOMSTR"] = colorize("CC", "$TARGET", "green")
env["CXXCOMSTR"] = colorize("CXX", "$TARGET", "green")
env["LINKCOMSTR"] = colorize("LINK", "$TARGET", "red")
env["ARCOMSTR"] = colorize("AR", "$TARGET", "red")
env["RANLIBCOMSTR"] = colorize("RANLIB", "$TARGET", "red")
env["QT4_RCCCOMSTR"] = colorize("RCC", "$TARGET", "blue")
diff --git a/SwifTools/Idle/MacOSXIdleQuerier.cpp b/SwifTools/Idle/MacOSXIdleQuerier.cpp
new file mode 100644
index 0000000..ac6dff9
--- /dev/null
+++ b/SwifTools/Idle/MacOSXIdleQuerier.cpp
@@ -0,0 +1,25 @@
+#include "SwifTools/Idle/MacOSXIdleQuerier.h"
+
+#include <cassert>
+#include <iostream>
+#include <CoreFoundation/CoreFoundation.h>
+
+namespace Swift {
+
+MacOSXIdleQuerier::MacOSXIdleQuerier() : ioService(NULL) {
+ mach_port_t masterPort;
+ IOMasterPort(MACH_PORT_NULL, &masterPort);
+ ioService = IOServiceGetMatchingService(masterPort, IOServiceMatching("IOHIDSystem"));
+ assert(ioService);
+}
+
+int MacOSXIdleQuerier::getIdleTimeSeconds() {
+ CFTypeRef property = IORegistryEntryCreateCFProperty(ioService, CFSTR("HIDIdleTime"), kCFAllocatorDefault, 0);
+ uint64_t idle = 0;
+ bool result = CFNumberGetValue((CFNumberRef)property, kCFNumberSInt64Type, &idle);
+ assert(result);
+ CFRelease(property);
+ return idle / 1000000000;
+}
+
+}
diff --git a/SwifTools/Idle/MacOSXIdleQuerier.h b/SwifTools/Idle/MacOSXIdleQuerier.h
new file mode 100644
index 0000000..f70432d
--- /dev/null
+++ b/SwifTools/Idle/MacOSXIdleQuerier.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include <IOKit/IOKitLib.h>
+
+#include "SwifTools/Idle/IdleQuerier.h"
+
+namespace Swift {
+ class MacOSXIdleQuerier : public IdleQuerier {
+ public:
+ MacOSXIdleQuerier();
+
+ virtual int getIdleTimeSeconds();
+
+ private:
+ io_service_t ioService;
+ };
+}
diff --git a/SwifTools/Idle/PlatformIdleQuerier.cpp b/SwifTools/Idle/PlatformIdleQuerier.cpp
index 76a3f7d..80a5da3 100644
--- a/SwifTools/Idle/PlatformIdleQuerier.cpp
+++ b/SwifTools/Idle/PlatformIdleQuerier.cpp
@@ -1,26 +1,31 @@
#include "SwifTools/Idle/PlatformIdleQuerier.h"
+#include "Swiften/Base/Platform.h"
-#if defined(HAVE_XSS)
+#if defined(SWIFTEN_PLATFORM_MACOSX)
+#include "SwifTools/Idle/MacOSXIdleQuerier.h"
+#elif defined(HAVE_XSS)
#include "SwifTools/Idle/XSSIdleQuerier.h"
#else
#include "SwifTools/Idle/DummyIdleQuerier.h"
#endif
#include <cassert>
#include <iostream>
namespace Swift {
PlatformIdleQuerier::PlatformIdleQuerier() : querier(NULL) {
-#if defined(HAVE_XSS)
+#if defined(SWIFTEN_PLATFORM_MACOSX)
+ querier = new MacOSXIdleQuerier();
+#elif defined(HAVE_XSS)
querier = new XSSIdleQuerier();
#else
querier = new DummyIdleQuerier();
#endif
}
PlatformIdleQuerier::~PlatformIdleQuerier() {
delete querier;
}
}
diff --git a/SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp b/SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp
index 99a7099..a191b21 100644
--- a/SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp
+++ b/SwifTools/Idle/UnitTest/ActualIdleDetectorTest.cpp
@@ -1,138 +1,138 @@
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <boost/bind.hpp>
#include "SwifTools/Idle/ActualIdleDetector.h"
#include "SwifTools/Idle/IdleQuerier.h"
#include "Swiften/Base/foreach.h"
#include "Swiften/Network/TimerFactory.h"
#include "Swiften/Network/Timer.h"
using namespace Swift;
class ActualIdleDetectorTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(ActualIdleDetectorTest);
CPPUNIT_TEST(testDestructor);
CPPUNIT_TEST(testHandleTick_Idle);
CPPUNIT_TEST(testHandleTick_Idle_AlreadyIdle);
CPPUNIT_TEST(testHandleTick_NotIdle);
CPPUNIT_TEST(testHandleTick_NotIdle_AlreadyNotIdle);
CPPUNIT_TEST_SUITE_END();
public:
void setUp() {
querier = new MockIdleQuerier();
timerFactory = new MockTimerFactory();
idleEvents.clear();
}
void tearDown() {
delete timerFactory;
delete querier;
}
void testDestructor() {
ActualIdleDetector* testling = createDetector();
testling->setIdleTimeSeconds(15);
delete testling;
querier->idleTime = 15;
timerFactory->updateTime(15000);
- CPPUNIT_ASSERT_EQUAL(0U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(idleEvents.size()));
}
void testHandleTick_Idle() {
std::auto_ptr<ActualIdleDetector> testling(createDetector());
testling->setIdleTimeSeconds(15);
querier->idleTime = 15;
timerFactory->updateTime(15000);
- CPPUNIT_ASSERT_EQUAL(1U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(idleEvents.size()));
CPPUNIT_ASSERT(idleEvents[0]);
}
void testHandleTick_Idle_AlreadyIdle() {
std::auto_ptr<ActualIdleDetector> testling(createDetector());
testling->setIdleTimeSeconds(15);
querier->idleTime = 15;
timerFactory->updateTime(15000);
querier->idleTime = 30;
timerFactory->updateTime(30000);
- CPPUNIT_ASSERT_EQUAL(1U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(idleEvents.size()));
CPPUNIT_ASSERT(idleEvents[0]);
}
void testHandleTick_NotIdle() {
std::auto_ptr<ActualIdleDetector> testling(createDetector());
testling->setIdleTimeSeconds(15);
querier->idleTime = 15;
timerFactory->updateTime(15000);
querier->idleTime = 5;
timerFactory->updateTime(30000);
- CPPUNIT_ASSERT_EQUAL(2U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(idleEvents.size()));
CPPUNIT_ASSERT(idleEvents[0]);
CPPUNIT_ASSERT(!idleEvents[1]);
}
void testHandleTick_NotIdle_AlreadyNotIdle() {
std::auto_ptr<ActualIdleDetector> testling(createDetector());
testling->setIdleTimeSeconds(15);
querier->idleTime = 5;
timerFactory->updateTime(15000);
- CPPUNIT_ASSERT_EQUAL(0U, idleEvents.size());
+ CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(idleEvents.size()));
}
private:
ActualIdleDetector* createDetector() {
ActualIdleDetector* detector = new ActualIdleDetector(querier, timerFactory, 10);
detector->onIdleChanged.connect(boost::bind(&ActualIdleDetectorTest::handleIdle, this, _1));
return detector;
}
void handleIdle(bool b) {
idleEvents.push_back(b);
}
private:
struct MockIdleQuerier : public IdleQuerier {
MockIdleQuerier() : idleTime(0) {}
virtual int getIdleTimeSeconds() { return idleTime; }
int idleTime;
};
struct MockTimer : public Timer {
MockTimer(int interval) : interval(interval), running(false), lastTime(0) {}
virtual void start() {
running = true;
}
virtual void stop() {
running = false;
}
virtual void updateTime(int currentTime) {
if (lastTime == currentTime) {
return;
}
if (running) {
int time = lastTime;
while (time <= currentTime) {
onTick();
time += interval;
}
}
lastTime = currentTime;
}
int interval;
bool running;
int lastTime;
diff --git a/SwifTools/SConscript b/SwifTools/SConscript
index cff2c6b..a92e0dc 100644
--- a/SwifTools/SConscript
+++ b/SwifTools/SConscript
@@ -1,35 +1,35 @@
Import("env")
env["SWIFTOOLS_FLAGS"] = {
"LIBPATH": [Dir(".")],
"LIBS": ["SwifTools"]
}
myenv = env.Clone()
myenv.MergeFlags(myenv["BOOST_FLAGS"])
sources = [
"Idle/IdleDetector.cpp",
"Idle/ActualIdleDetector.cpp",
"Idle/IdleQuerier.cpp",
"Idle/PlatformIdleQuerier.cpp",
"Linkify.cpp",
]
if myenv["PLATFORM"] == "win32" :
pass
elif myenv["PLATFORM"] == "darwin" :
- pass
+ sources += ["Idle/MacOSXIdleQuerier.cpp"]
elif myenv["HAVE_XSS"] :
myenv.Append(CPPDEFINES = ["HAVE_XSS"])
sources += ["Idle/XSSIdleQuerier.cpp"]
else :
sources += ["Idle/DummyIdleQuerier.cpp"]
myenv.StaticLibrary("SwifTools", sources)
SConscript(dirs = [
"Idle/IdleQuerierTest",
"Idle/UnitTest",
"UnitTest"
])