Diff
Modified: trunk/Source/WebCore/ChangeLog (141247 => 141248)
--- trunk/Source/WebCore/ChangeLog 2013-01-30 11:56:42 UTC (rev 141247)
+++ trunk/Source/WebCore/ChangeLog 2013-01-30 11:58:08 UTC (rev 141248)
@@ -1,3 +1,21 @@
+2013-01-30 Patrick Gansterer <[email protected]>
+
+ Port SharedTimerWin.cpp to WinCE
+ https://bugs.webkit.org/show_bug.cgi?id=103724
+
+ Reviewed by Brent Fulgham.
+
+ Add #if !OS(WINCE) around some parts of the code, so it can be used by the WinCE port too.
+
+ * PlatformWinCE.cmake:
+ * platform/win/SharedTimerWin.cpp:
+ (WebCore):
+ (WebCore::TimerWindowWndProc):
+ (WebCore::initializeOffScreenTimerWindow):
+ (WebCore::setSharedTimerFireInterval):
+ (WebCore::stopSharedTimer):
+ * platform/wince/SharedTimerWinCE.cpp: Removed.
+
2013-01-30 Andrey Lushnikov <[email protected]>
ctrl-arrows, ctrl-shift-arrow, ctrl-backspace
Modified: trunk/Source/WebCore/PlatformWinCE.cmake (141247 => 141248)
--- trunk/Source/WebCore/PlatformWinCE.cmake 2013-01-30 11:56:42 UTC (rev 141247)
+++ trunk/Source/WebCore/PlatformWinCE.cmake 2013-01-30 11:58:08 UTC (rev 141248)
@@ -53,6 +53,7 @@
platform/win/ScrollbarThemeWin.cpp
platform/win/SearchPopupMenuWin.cpp
platform/win/SharedBufferWin.cpp
+ platform/win/SharedTimerWin.cpp
platform/win/SoundWin.cpp
platform/win/SystemInfo.cpp
platform/win/SystemTimeWin.cpp
@@ -64,7 +65,6 @@
platform/wince/DragImageWince.cpp
platform/wince/FileSystemWince.cpp
platform/wince/KURLWince.cpp
- platform/wince/SharedTimerWince.cpp
platform/network/win/CredentialStorageWin.cpp
platform/network/win/CookieJarWin.cpp
Modified: trunk/Source/WebCore/platform/win/SharedTimerWin.cpp (141247 => 141248)
--- trunk/Source/WebCore/platform/win/SharedTimerWin.cpp 2013-01-30 11:56:42 UTC (rev 141247)
+++ trunk/Source/WebCore/platform/win/SharedTimerWin.cpp 2013-01-30 11:58:08 UTC (rev 141248)
@@ -40,7 +40,7 @@
#include <wx/wx.h>
#endif
-#include <windows.h>
+#include "WindowsExtras.h"
#include <mmsystem.h>
#if PLATFORM(WIN)
@@ -66,18 +66,21 @@
static UINT timerID;
static void (*sharedTimerFiredFunction)();
+static HANDLE timer;
static HWND timerWindowHandle = 0;
+const LPCWSTR kTimerWindowClassName = L"TimerWindowClass";
+
+#if !OS(WINCE)
static UINT timerFiredMessage = 0;
static HANDLE timerQueue;
-static HANDLE timer;
static bool highResTimerActive;
static bool processingCustomTimerMessage = false;
static LONG pendingTimers;
-const LPCWSTR kTimerWindowClassName = L"TimerWindowClass";
const int timerResolution = 1; // To improve timer resolution, we call timeBeginPeriod/timeEndPeriod with this value to increase timer resolution to 1ms.
const int highResolutionThresholdMsec = 16; // Only activate high-res timer for sub-16ms timers (Windows can fire timers at 16ms intervals without changing the system resolution).
const int stopHighResTimerInMsec = 300; // Stop high-res timer after 0.3 seconds to lessen power consumption (we don't use a smaller time since oscillating between high and low resolution breaks timer accuracy on XP).
+#endif
enum {
sharedTimerID = 1000,
@@ -97,20 +100,23 @@
}
#endif
- if (message == timerFiredMessage) {
- InterlockedExchange(&pendingTimers, 0);
- processingCustomTimerMessage = true;
- sharedTimerFiredFunction();
- processingCustomTimerMessage = false;
- } else if (message == WM_TIMER) {
+ if (message == WM_TIMER) {
if (wParam == sharedTimerID) {
KillTimer(timerWindowHandle, sharedTimerID);
sharedTimerFiredFunction();
- } else if (wParam == endHighResTimerID) {
+ }
+#if !OS(WINCE)
+ else if (wParam == endHighResTimerID) {
KillTimer(timerWindowHandle, endHighResTimerID);
highResTimerActive = false;
timeEndPeriod(timerResolution);
}
+ } else if (message == timerFiredMessage) {
+ InterlockedExchange(&pendingTimers, 0);
+ processingCustomTimerMessage = true;
+ sharedTimerFiredFunction();
+ processingCustomTimerMessage = false;
+#endif
} else
return DefWindowProc(hWnd, message, wParam, lParam);
@@ -121,18 +127,31 @@
{
if (timerWindowHandle)
return;
-
+
+#if OS(WINCE)
+ WNDCLASS wcex;
+ memset(&wcex, 0, sizeof(WNDCLASS));
+#else
WNDCLASSEX wcex;
memset(&wcex, 0, sizeof(WNDCLASSEX));
wcex.cbSize = sizeof(WNDCLASSEX);
+#endif
+
wcex.lpfnWndProc = TimerWindowWndProc;
wcex.hInstance = WebCore::instanceHandle();
wcex.lpszClassName = kTimerWindowClassName;
+#if OS(WINCE)
+ RegisterClass(&wcex);
+#else
RegisterClassEx(&wcex);
+#endif
timerWindowHandle = CreateWindow(kTimerWindowClassName, 0, 0,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, HWND_MESSAGE, 0, WebCore::instanceHandle(), 0);
+
+#if !OS(WINCE)
timerFiredMessage = RegisterWindowMessage(L"com.apple.WebKit.TimerFired");
+#endif
}
void setSharedTimerFiredFunction(void (*f)())
@@ -140,11 +159,13 @@
sharedTimerFiredFunction = f;
}
+#if !OS(WINCE)
static void NTAPI queueTimerProc(PVOID, BOOLEAN)
{
if (InterlockedIncrement(&pendingTimers) == 1)
PostMessage(timerWindowHandle, timerFiredMessage, 0, 0);
}
+#endif
void setSharedTimerFireInterval(double interval)
{
@@ -160,6 +181,7 @@
initializeOffScreenTimerWindow();
bool timerSet = false;
+#if !OS(WINCE)
if (Settings::shouldUseHighResolutionTimers()) {
if (interval < highResolutionThresholdMsec) {
if (!highResTimerActive) {
@@ -191,6 +213,7 @@
}
}
}
+#endif // !OS(WINCE)
if (timerSet) {
if (timerID) {
@@ -205,10 +228,12 @@
void stopSharedTimer()
{
+#if !OS(WINCE)
if (timerQueue && timer) {
DeleteTimerQueueTimer(timerQueue, timer, 0);
timer = 0;
}
+#endif
if (timerID) {
KillTimer(timerWindowHandle, timerID);
Deleted: trunk/Source/WebCore/platform/wince/SharedTimerWinCE.cpp (141247 => 141248)
--- trunk/Source/WebCore/platform/wince/SharedTimerWinCE.cpp 2013-01-30 11:56:42 UTC (rev 141247)
+++ trunk/Source/WebCore/platform/wince/SharedTimerWinCE.cpp 2013-01-30 11:58:08 UTC (rev 141248)
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
- * Copyright (C) 2007-2008 Torch Mobile, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "SharedTimer.h"
-
-#include "Page.h"
-#include "SystemTime.h"
-#include "WebCoreInstanceHandle.h"
-#include "Widget.h"
-#include <wtf/Assertions.h>
-#include <wtf/CurrentTime.h>
-#include <windows.h>
-
-namespace WebCore {
-
-enum {
- TimerIdNone = 0,
- TimerIdAuto,
- TimerIdManual,
-};
-static UINT timerID = TimerIdNone;
-
-static void (*sharedTimerFiredFunction)();
-
-static HWND timerWindowHandle = 0;
-const LPCWSTR kTimerWindowClassName = L"TimerWindowClass";
-
-LRESULT CALLBACK TimerWindowWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- if (message == WM_TIMER) {
- if (timerID != TimerIdNone)
- sharedTimerFiredFunction();
- } else if (message == WM_USER) {
- if (timerID = TimerIdManual) {
- sharedTimerFiredFunction();
- PostMessage(hWnd, WM_USER, 0, 0);
- }
- } else
- return DefWindowProc(hWnd, message, wParam, lParam);
-
- return 0;
-}
-
-static void initializeOffScreenTimerWindow()
-{
- if (timerWindowHandle)
- return;
-
- WNDCLASS wcex = {0};
- wcex.lpfnWndProc = TimerWindowWndProc;
- wcex.hInstance = WebCore::instanceHandle();
- wcex.lpszClassName = kTimerWindowClassName;
- RegisterClass(&wcex);
-
- timerWindowHandle = CreateWindow(kTimerWindowClassName, 0, 0,
- CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, WebCore::instanceHandle(), 0);
-}
-
-void setSharedTimerFiredFunction(void (*f)())
-{
- sharedTimerFiredFunction = f;
-}
-
-#define USER_TIMER_MAXIMUM 0x7FFFFFFF
-#define USER_TIMER_MINIMUM 0x0000000A
-
-void setSharedTimerFireInterval(double intervalSeconds)
-{
- ASSERT(sharedTimerFiredFunction);
-
- double intervalMS = intervalSeconds * 1000.;
- unsigned clampedIntervalMS = intervalMS < USER_TIMER_MINIMUM
- ? USER_TIMER_MINIMUM
- : intervalMS > USER_TIMER_MAXIMUM
- ? USER_TIMER_MAXIMUM
- : static_cast<unsigned>(intervalMS);
-
- if (timerID == TimerIdAuto) {
- KillTimer(timerWindowHandle, TimerIdAuto);
- timerID = TimerIdNone;
- }
-
- initializeOffScreenTimerWindow();
- if (SetTimer(timerWindowHandle, TimerIdAuto, clampedIntervalMS, 0))
- timerID = TimerIdAuto;
- else if (timerID != TimerIdManual)
- PostMessage(timerWindowHandle, WM_USER, 0, 0);
-}
-
-void stopSharedTimer()
-{
- if (timerID == TimerIdAuto)
- KillTimer(timerWindowHandle, TimerIdAuto);
-
- timerID = TimerIdNone;
-}
-
-} // namespace WebCore