Get timestamps and ids working in WK2 gamepads (and test them!)
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 24 Aug 2016 16:22:37 +0000 (16:22 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 24 Aug 2016 16:22:37 +0000 (16:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=161112

Reviewed by Alex Christensen.

Source/WebKit2:

* Shared/Gamepad/GamepadData.cpp:
(WebKit::GamepadData::GamepadData):
(WebKit::GamepadData::encode):
(WebKit::GamepadData::decode):
* Shared/Gamepad/GamepadData.h:
(WebKit::GamepadData::id):
(WebKit::GamepadData::index): Deleted.

* UIProcess/Gamepad/UIGamepad.cpp:
(WebKit::UIGamepad::UIGamepad):
(WebKit::UIGamepad::condensedGamepadData):
(WebKit::UIGamepad::fullGamepadData): Include the ID for initial WebGamepad creation.
(WebKit::UIGamepad::gamepadData): Deleted.
* UIProcess/Gamepad/UIGamepad.h:

* UIProcess/Gamepad/UIGamepadProvider.cpp:
(WebKit::UIGamepadProvider::snapshotGamepads):

* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::gamepadConnected):
(WebKit::WebProcessPool::setInitialConnectedGamepads):

* WebProcess/Gamepad/WebGamepad.cpp:
(WebKit::WebGamepad::WebGamepad):
(WebKit::WebGamepad::updateValues):

LayoutTests:

* gamepad/gamepad-polling-access-expected.txt:
* gamepad/gamepad-polling-access.html:
* gamepad/gamepad-timestamp-expected.txt: Added.
* gamepad/gamepad-timestamp.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@204896 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
LayoutTests/ChangeLog
LayoutTests/gamepad/gamepad-polling-access-expected.txt
LayoutTests/gamepad/gamepad-polling-access.html
LayoutTests/gamepad/gamepad-timestamp-expected.txt [new file with mode: 0644]
LayoutTests/gamepad/gamepad-timestamp.html [new file with mode: 0644]
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/Gamepad/GamepadData.cpp
Source/WebKit2/Shared/Gamepad/GamepadData.h
Source/WebKit2/UIProcess/Gamepad/UIGamepad.cpp
Source/WebKit2/UIProcess/Gamepad/UIGamepad.h
Source/WebKit2/UIProcess/Gamepad/UIGamepadProvider.cpp
Source/WebKit2/UIProcess/WebProcessPool.cpp
Source/WebKit2/WebProcess/Gamepad/WebGamepad.cpp

index fb0c2a4..7a95437 100644 (file)
@@ -1,3 +1,15 @@
+2016-08-24  Brady Eidson  <beidson@apple.com>
+
+        Get timestamps and ids working in WK2 gamepads (and test them!)
+        https://bugs.webkit.org/show_bug.cgi?id=161112
+
+        Reviewed by Alex Christensen.
+
+        * gamepad/gamepad-polling-access-expected.txt:
+        * gamepad/gamepad-polling-access.html:
+        * gamepad/gamepad-timestamp-expected.txt: Added.
+        * gamepad/gamepad-timestamp.html: Added.
+
 2016-08-24  Skachkov Oleksandr  <gskachkov@gmail.com>
 
         [ES2016] Allow assignment in for-in head in not-strict mode
index 41b5a64..52b6bb5 100644 (file)
@@ -2,163 +2,203 @@ Initial gamepads length: 0
 Connecting 20 different gamepads
 Connecting gamepad:
 [object Gamepad]
+Name: 0
 Index: 0
 Axes: 
 Buttons: 
 Connecting gamepad:
 [object Gamepad],[object Gamepad]
+Name: 1
 Index: 1
 Axes: 0
 Buttons: false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad]
+Name: 2
 Index: 2
 Axes: 0,0
 Buttons: false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 3
 Index: 3
 Axes: 0,0,0
 Buttons: false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 4
 Index: 4
 Axes: 0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 5
 Index: 5
 Axes: 0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 6
 Index: 6
 Axes: 0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 7
 Index: 7
 Axes: 0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 8
 Index: 8
 Axes: 0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 9
 Index: 9
 Axes: 0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 10
 Index: 10
 Axes: 0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 11
 Index: 11
 Axes: 0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 12
 Index: 12
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 13
 Index: 13
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 14
 Index: 14
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 15
 Index: 15
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 16
 Index: 16
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 17
 Index: 17
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 18
 Index: 18
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Connecting gamepad:
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 19
 Index: 19
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
 Verifying there are 20 connected gamepads in the set of all gamepads
 [object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad],[object Gamepad]
+Name: 0
 Index: 0
 Axes: 
 Buttons: 
+Name: 1
 Index: 1
 Axes: 0
 Buttons: false-0 
+Name: 2
 Index: 2
 Axes: 0,0
 Buttons: false-0 false-0 
+Name: 3
 Index: 3
 Axes: 0,0,0
 Buttons: false-0 false-0 false-0 
+Name: 4
 Index: 4
 Axes: 0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 
+Name: 5
 Index: 5
 Axes: 0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 
+Name: 6
 Index: 6
 Axes: 0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 7
 Index: 7
 Axes: 0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 8
 Index: 8
 Axes: 0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 9
 Index: 9
 Axes: 0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 10
 Index: 10
 Axes: 0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 11
 Index: 11
 Axes: 0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 12
 Index: 12
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 13
 Index: 13
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 14
 Index: 14
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 15
 Index: 15
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0
+Name: 16
 Index: 16
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 17
 Index: 17
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 18
 Index: 18
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
+Name: 19
 Index: 19
 Axes: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 Buttons: false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 false-0 
@@ -206,6 +246,7 @@ Disconnecting gamepad:
 Checking non-zero'ed details for a gamepad
 Connecting gamepad:
 ,,,,,,,,,,[object Gamepad],,,,,,,,,
+Name: Awesome Joystick 5000
 Index: 10
 Axes: 0.7,-0.9,1,-1
 Buttons: true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 true-1 
index 93ce4f8..646d219 100644 (file)
@@ -34,6 +34,7 @@ function handleGamepadDisconnect(evt)
 
 function logGamepad(gp)
 {
+    log("Name: " + gp.id);
     log("Index: " + gp.index);
     log("Axes: " + gp.axes);
     
diff --git a/LayoutTests/gamepad/gamepad-timestamp-expected.txt b/LayoutTests/gamepad/gamepad-timestamp-expected.txt
new file mode 100644 (file)
index 0000000..ff146b3
--- /dev/null
@@ -0,0 +1,2 @@
+Increasing timestamp values seen for 10 RAF cycles
+
diff --git a/LayoutTests/gamepad/gamepad-timestamp.html b/LayoutTests/gamepad/gamepad-timestamp.html
new file mode 100644 (file)
index 0000000..5390e87
--- /dev/null
@@ -0,0 +1,76 @@
+<head>
+<script>
+
+if (window.testRunner) {
+    testRunner.dumpAsText();
+    testRunner.waitUntilDone();
+}
+
+function log(msg)
+{
+    document.getElementById("logger").innerHTML += msg + "<br>";
+}
+
+function finishTest()
+{
+    if (testRunner)
+        testRunner.notifyDone();
+}
+
+var rafCount = 0;
+var increasingTimestampsSeen = 0;
+var timestamp = 0;
+
+function rafCallback()
+{
+    var gamepad = navigator.getGamepads()[0];
+    
+    if (gamepad.timestamp < timestamp) {
+        log("Timestamp on gamepad is " + gamepad.timestamp + " which is less than " + timestamp);
+        finishTest();
+    }
+
+    if (gamepad.timestamp > timestamp)
+        ++increasingTimestampsSeen;
+
+    if (increasingTimestampsSeen == 10) {
+        log("Increasing timestamp values seen for 10 RAF cycles");
+        finishTest();
+    }
+
+    if (++rafCount == 120) {
+        log("Went 120 RAF cycles without seeing 10 increasing timestamp values... yikes!");
+        finishTest();
+    }
+
+    timestamp = gamepad.timestamp;
+
+    if (gamepad.buttons[0] == 1.0)
+        testRunner.setMockGamepadButtonValue(0, 0, 0.0);
+    else
+        testRunner.setMockGamepadButtonValue(0, 0, 1.0);
+    
+    requestAnimationFrame(rafCallback);
+}
+
+function handleGamepadConnect()
+{
+    requestAnimationFrame(rafCallback);
+}
+
+function runTest() {
+    addEventListener("gamepadconnected", handleGamepadConnect);
+
+    testRunner.setMockGamepadDetails(0, "Test Joystick", 2, 2);
+    testRunner.setMockGamepadAxisValue(0, 0, 0.7);
+    testRunner.setMockGamepadAxisValue(0, 1, -1.0);
+    testRunner.setMockGamepadButtonValue(0, 0, 1.0);
+    testRunner.setMockGamepadButtonValue(0, 1, 1.0);
+    testRunner.connectMockGamepad(0);
+}
+
+</script>
+</head>
+<body onload="runTest();">
+<div id="logger"></div>
+</body>
index e7f2bef..5ae64c0 100644 (file)
@@ -1,3 +1,36 @@
+2016-08-24  Brady Eidson  <beidson@apple.com>
+
+        Get timestamps and ids working in WK2 gamepads (and test them!)
+        https://bugs.webkit.org/show_bug.cgi?id=161112
+
+        Reviewed by Alex Christensen.
+
+        * Shared/Gamepad/GamepadData.cpp:
+        (WebKit::GamepadData::GamepadData):
+        (WebKit::GamepadData::encode):
+        (WebKit::GamepadData::decode):
+        * Shared/Gamepad/GamepadData.h:
+        (WebKit::GamepadData::id):
+        (WebKit::GamepadData::index): Deleted.
+        
+        * UIProcess/Gamepad/UIGamepad.cpp:
+        (WebKit::UIGamepad::UIGamepad):
+        (WebKit::UIGamepad::condensedGamepadData):
+        (WebKit::UIGamepad::fullGamepadData): Include the ID for initial WebGamepad creation.
+        (WebKit::UIGamepad::gamepadData): Deleted.
+        * UIProcess/Gamepad/UIGamepad.h:
+        
+        * UIProcess/Gamepad/UIGamepadProvider.cpp:
+        (WebKit::UIGamepadProvider::snapshotGamepads):
+        
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::gamepadConnected):
+        (WebKit::WebProcessPool::setInitialConnectedGamepads):
+        
+        * WebProcess/Gamepad/WebGamepad.cpp:
+        (WebKit::WebGamepad::WebGamepad):
+        (WebKit::WebGamepad::updateValues):
+
 2016-08-24  Hunseop Jeong  <hs85.jeong@samsung.com>
 
         [EFL] Fix test_ewk2_view
index 6bcb292..30fc889 100644 (file)
@@ -40,13 +40,21 @@ GamepadData::GamepadData(unsigned index, const Vector<double>& axisValues, const
 {
 }
 
+GamepadData::GamepadData(unsigned index, const String& id, const Vector<double>& axisValues, const Vector<double>& buttonValues)
+    : m_index(index)
+    , m_id(id)
+    , m_axisValues(axisValues)
+    , m_buttonValues(buttonValues)
+{
+}
+
 void GamepadData::encode(IPC::Encoder& encoder) const
 {
     encoder << m_isNull;
     if (m_isNull)
         return;
 
-    encoder << m_index << m_axisValues << m_buttonValues;
+    encoder << m_index << m_id << m_axisValues << m_buttonValues;
 }
 
 bool GamepadData::decode(IPC::Decoder& decoder, GamepadData& data)
@@ -60,6 +68,9 @@ bool GamepadData::decode(IPC::Decoder& decoder, GamepadData& data)
     if (!decoder.decode(data.m_index))
         return false;
 
+    if (!decoder.decode(data.m_id))
+        return false;
+
     if (!decoder.decode(data.m_axisValues))
         return false;
 
index a1b0cab..0dee74c 100644 (file)
@@ -45,6 +45,7 @@ public:
     }
 
     GamepadData(unsigned index, const Vector<double>& axisValues, const Vector<double>& buttonValues);
+    GamepadData(unsigned index, const String& id, const Vector<double>& axisValues, const Vector<double>& buttonValues);
 
     void encode(IPC::Encoder&) const;
     static bool decode(IPC::Decoder&, GamepadData&);
@@ -52,11 +53,13 @@ public:
     bool isNull() const { return m_isNull; }
 
     unsigned index() const { return m_index; }
+    const String& id() const { return m_id; }
     const Vector<double>& axisValues() const { return m_axisValues; }
     const Vector<double>& buttonValues() const { return m_buttonValues; }
 
 private:
     unsigned m_index;
+    String m_id;
     Vector<double> m_axisValues;
     Vector<double> m_buttonValues;
 
index 780d868..1e4be4a 100644 (file)
@@ -37,6 +37,7 @@ namespace WebKit {
 
 UIGamepad::UIGamepad(WebCore::PlatformGamepad& platformGamepad)
     : m_index(platformGamepad.index())
+    , m_id(platformGamepad.id())
 {
     m_axisValues.resize(platformGamepad.axisValues().size());
     m_buttonValues.resize(platformGamepad.buttonValues().size());
@@ -54,11 +55,17 @@ void UIGamepad::updateFromPlatformGamepad(WebCore::PlatformGamepad& platformGame
     m_buttonValues = platformGamepad.buttonValues();
 }
 
-GamepadData UIGamepad::gamepadData() const
+GamepadData UIGamepad::condensedGamepadData() const
 {
     return { m_index, m_axisValues, m_buttonValues };
 }
 
+GamepadData UIGamepad::fullGamepadData() const
+{
+    return { m_index, m_id, m_axisValues, m_buttonValues };
+}
+
+
 }
 
 #endif // ENABLE(GAMEPAD)
index ea159fa..6479a3b 100644 (file)
@@ -28,6 +28,7 @@
 #if ENABLE(GAMEPAD)
 
 #include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 class PlatformGamepad;
@@ -43,12 +44,14 @@ public:
 
     unsigned index() const { return m_index; }
 
-    GamepadData gamepadData() const;
+    GamepadData condensedGamepadData() const;
+    GamepadData fullGamepadData() const;
 
     void updateFromPlatformGamepad(WebCore::PlatformGamepad&);
 
 private:
     unsigned m_index;
+    String m_id;
     Vector<double> m_axisValues;
     Vector<double> m_buttonValues;
 };
index 95ee9df..7bddd40 100644 (file)
@@ -215,7 +215,7 @@ Vector<GamepadData> UIGamepadProvider::snapshotGamepads()
 
     for (auto& gamepad : m_gamepads) {
         if (gamepad)
-            gamepadDatas.uncheckedAppend(gamepad->gamepadData());
+            gamepadDatas.uncheckedAppend(gamepad->condensedGamepadData());
         else
             gamepadDatas.uncheckedAppend({ });
     }
index f14c8b2..21f7ae8 100644 (file)
@@ -1278,7 +1278,7 @@ void WebProcessPool::processStoppedUsingGamepads(WebProcessProxy& process)
 void WebProcessPool::gamepadConnected(const UIGamepad& gamepad)
 {
     for (auto& process : m_processesUsingGamepads)
-        process->send(Messages::WebProcess::GamepadConnected(gamepad.gamepadData()), 0);
+        process->send(Messages::WebProcess::GamepadConnected(gamepad.fullGamepadData()), 0);
 }
 
 void WebProcessPool::gamepadDisconnected(const UIGamepad& gamepad)
@@ -1294,7 +1294,7 @@ void WebProcessPool::setInitialConnectedGamepads(const Vector<std::unique_ptr<UI
     for (size_t i = 0; i < gamepads.size(); ++i) {
         if (!gamepads[i])
             continue;
-        gamepadDatas[i] = gamepads[i]->gamepadData();
+        gamepadDatas[i] = gamepads[i]->fullGamepadData();
     }
 
     for (auto& process : m_processesUsingGamepads)
index 4c6b351..8f7c68a 100644 (file)
@@ -30,6 +30,8 @@
 
 #include "GamepadData.h"
 #include "Logging.h"
+#include <wtf/CurrentTime.h>
+
 
 namespace WebKit {
 
@@ -38,6 +40,7 @@ WebGamepad::WebGamepad(const GamepadData& gamepadData)
 {
     LOG(Gamepad, "Connecting WebGamepad %u", gamepadData.index());
 
+    m_id = gamepadData.id();
     m_axisValues.resize(gamepadData.axisValues().size());
     m_buttonValues.resize(gamepadData.buttonValues().size());
 
@@ -63,6 +66,8 @@ void WebGamepad::updateValues(const GamepadData& gamepadData)
 
     m_axisValues = gamepadData.axisValues();
     m_buttonValues = gamepadData.buttonValues();
+
+    m_lastUpdateTime = monotonicallyIncreasingTime();
 }
 
 }