Commit 11651852 authored by Oksana Zhuravlova's avatar Oksana Zhuravlova Committed by Commit Bot

Move GamepadSharedMemoryReader to blink

This change moves the GamepadSharedMemoryReader class to
third_party/blink/renderer/modules/gamepad. Its instance is now
created in relevant Device*Dispatcher methods with a LocalFrame*
passed to be used for Mojo interface creation.
Since the GamepadMonitor interface request is now made on a frame, its
registration was moved to RenderFrameHost and
content_browser_manifest.json was updated accordingly.

Blink-related updates:
- DISALLOW_COPY_AND_ASSIGN -> WTF_MAKE_NONCOPYABLE

Bug: 612330
Change-Id: Ie3821f1bc75e4b4086f69db0eaf7cf88d65716a8
Reviewed-on: https://chromium-review.googlesource.com/1101841Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@chromium.org>
Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Oksana Zhuravlova <oksamyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575397}
parent f57472f5
......@@ -137,6 +137,7 @@
#include "content/public/common/service_names.mojom.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/url_utils.h"
#include "device/gamepad/gamepad_monitor.h"
#include "device/vr/public/mojom/vr_service.mojom.h"
#include "media/audio/audio_manager.h"
#include "media/base/media_switches.h"
......@@ -3398,6 +3399,8 @@ void RenderFrameHostImpl::RegisterMojoInterfaces() {
registry_->AddInterface(base::Bind(&SharedWorkerConnectorImpl::Create,
process_->GetID(), routing_id_));
registry_->AddInterface(base::BindRepeating(&device::GamepadMonitor::Create));
registry_->AddInterface<device::mojom::VRService>(base::Bind(
&WebvrServiceProvider::BindWebvrService, base::Unretained(this)));
......
......@@ -171,7 +171,6 @@
#include "content/public/common/service_names.mojom.h"
#include "content/public/common/url_constants.h"
#include "device/gamepad/gamepad_haptics_manager.h"
#include "device/gamepad/gamepad_monitor.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "gpu/command_buffer/client/gpu_switches.h"
#include "gpu/command_buffer/common/context_creation_attribs.h"
......@@ -1978,8 +1977,6 @@ void RenderProcessHostImpl::RegisterMojoInterfaces() {
registry->AddInterface(base::Bind(&device::GamepadHapticsManager::Create));
registry->AddInterface(base::Bind(&device::GamepadMonitor::Create));
registry->AddInterface(
base::Bind(&PushMessagingManager::BindRequest,
base::Unretained(push_messaging_manager_.get())));
......
......@@ -60,7 +60,6 @@
"content.mojom.WorkerURLLoaderFactoryProvider",
"device.mojom.BatteryMonitor",
"device.mojom.GamepadHapticsManager",
"device.mojom.GamepadMonitor",
"discardable_memory.mojom.DiscardableSharedMemoryManager",
"media.mojom.KeySystemSupport",
"media.mojom.VideoCaptureHost",
......@@ -181,6 +180,7 @@
"content.mojom.RendererAudioInputStreamFactory",
"content.mojom.RendererAudioOutputStreamFactory",
"content.mojom.SharedWorkerConnector",
"device.mojom.GamepadMonitor",
"device.mojom.Geolocation",
"device.mojom.NFC",
"device.mojom.SensorProvider",
......
......@@ -125,8 +125,6 @@ target(link_target_type, "renderer") {
"frame_blame_context.h",
"frame_owner_properties.cc",
"frame_owner_properties.h",
"gamepad_shared_memory_reader.cc",
"gamepad_shared_memory_reader.h",
"gpu/actions_parser.cc",
"gpu/actions_parser.h",
"gpu/compositor_dependencies.h",
......
......@@ -50,7 +50,6 @@
#include "content/renderer/dom_storage/webstoragenamespace_impl.h"
#include "content/renderer/file_info_util.h"
#include "content/renderer/fileapi/webfilesystem_impl.h"
#include "content/renderer/gamepad_shared_memory_reader.h"
#include "content/renderer/image_capture/image_capture_frame_grabber.h"
#include "content/renderer/indexed_db/webidbfactory_impl.h"
#include "content/renderer/loader/child_url_loader_factory_bundle.h"
......@@ -778,8 +777,6 @@ WebBlobRegistry* RendererBlinkPlatformImpl::GetBlobRegistry() {
//------------------------------------------------------------------------------
void RendererBlinkPlatformImpl::SampleGamepads(device::Gamepads& gamepads) {
if (gamepad_shared_memory_reader_)
gamepad_shared_memory_reader_->SampleGamepads(gamepads);
}
//------------------------------------------------------------------------------
......@@ -1071,25 +1068,11 @@ blink::InterfaceProvider* RendererBlinkPlatformImpl::GetInterfaceProvider() {
void RendererBlinkPlatformImpl::StartListening(
blink::WebPlatformEventType type,
blink::WebPlatformEventListener* listener) {
if (type == blink::kWebPlatformEventTypeGamepad) {
if (!gamepad_shared_memory_reader_) {
gamepad_shared_memory_reader_ =
std::make_unique<GamepadSharedMemoryReader>();
}
gamepad_shared_memory_reader_->Start(
static_cast<blink::WebGamepadListener*>(listener));
} else {
DVLOG(1) << "RendererBlinkPlatformImpl::startListening() with "
"unknown type.";
}
}
void RendererBlinkPlatformImpl::StopListening(
blink::WebPlatformEventType type) {
if (type == blink::kWebPlatformEventTypeGamepad) {
if (gamepad_shared_memory_reader_)
gamepad_shared_memory_reader_->Stop();
}
}
//------------------------------------------------------------------------------
......
......@@ -51,17 +51,12 @@ class WebMediaStream;
class WebSecurityOrigin;
} // namespace blink
namespace device {
class Gamepads;
}
namespace network {
class SharedURLLoaderFactory;
}
namespace content {
class BlinkInterfaceProviderImpl;
class GamepadSharedMemoryReader;
class ChildURLLoaderFactoryBundle;
class LocalStorageCachedAreas;
class PlatformEventObserverBase;
......@@ -307,10 +302,6 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl {
base::IDMap<std::unique_ptr<PlatformEventObserverBase>>
platform_event_observers_;
// TODO(crbug.com/612330): Remove when GamepadSharedMemoryReader class is
// moved to blink
std::unique_ptr<GamepadSharedMemoryReader> gamepad_shared_memory_reader_;
// NOT OWNED
blink::scheduler::WebThreadScheduler* main_thread_scheduler_;
......
......@@ -8,12 +8,13 @@
#include "base/macros.h"
#include "content/public/common/service_names.mojom.h"
#include "content/public/renderer/render_frame.h"
#include "content/shell/test_runner/web_test_delegate.h"
#include "gin/arguments.h"
#include "gin/handle.h"
#include "gin/object_template_builder.h"
#include "gin/wrappable.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "third_party/blink/public/platform/web_gamepad_listener.h"
#include "third_party/blink/public/web/blink.h"
#include "third_party/blink/public/web/web_local_frame.h"
......@@ -170,14 +171,17 @@ void GamepadController::Reset() {
}
void GamepadController::Install(blink::WebLocalFrame* frame) {
service_manager::Connector::TestApi connector_test_api(
blink::Platform::Current()->GetConnector());
connector_test_api.OverrideBinderForTesting(
service_manager::Identity(content::mojom::kBrowserServiceName),
content::RenderFrame* render_frame =
content::RenderFrame::FromWebFrame(frame);
if (!render_frame)
return;
service_manager::InterfaceProvider::TestApi connector_test_api(
render_frame->GetRemoteInterfaces());
connector_test_api.SetBinderForName(
device::mojom::GamepadMonitor::Name_,
base::BindRepeating(&GamepadController::OnInterfaceRequest,
base::Unretained(this)));
GamepadControllerBindings::Install(weak_factory_.GetWeakPtr(), frame);
}
......
......@@ -7,6 +7,7 @@ variant = "blink"
for_blink = true
_typemap_imports = [
"//device/gamepad/public/cpp/typemaps.gni",
"//mojo/public/cpp/bindings/tests/blink_typemaps.gni",
"//third_party/blink/renderer/platform/mojo/blink_typemaps.gni",
"//third_party/blink/public/blink_typemaps.gni",
......
......@@ -20,6 +20,8 @@ blink_modules_sources("gamepad") {
"gamepad_list.h",
"gamepad_pose.cc",
"gamepad_pose.h",
"gamepad_shared_memory_reader.cc",
"gamepad_shared_memory_reader.h",
"navigator_gamepad.cc",
"navigator_gamepad.h",
]
......
include_rules = [
"+device/base/synchronization/shared_memory_seqlock_buffer.h",
# NOTE: These files are POD structs used to interpret shared memory across
# the Device Gamepad implementation and the Blink client.
"+device/gamepad/public/cpp/gamepad.h",
"+device/gamepad/public/cpp/gamepads.h",
"+device/gamepad/public/mojom/gamepad.mojom-blink.h",
"+device/gamepad/public/mojom/gamepad_hardware_buffer.h",
"+mojo/public/cpp/bindings/binding.h",
"+mojo/public/cpp/system/buffer.h",
"-third_party/blink/renderer/modules",
"+third_party/blink/renderer/modules/event_modules.h",
"+third_party/blink/renderer/modules/gamepad",
"+third_party/blink/renderer/modules/modules_export.h",
"+third_party/blink/renderer/platform/wtf/noncopyable.h",
# For shared metrics.
"+third_party/blink/renderer/modules/vr/navigator_vr.h",
......
......@@ -6,6 +6,7 @@
#include "third_party/blink/public/platform/interface_provider.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/renderer/modules/gamepad/gamepad_shared_memory_reader.h"
#include "third_party/blink/renderer/modules/gamepad/navigator_gamepad.h"
namespace blink {
......@@ -19,7 +20,9 @@ GamepadDispatcher& GamepadDispatcher::Instance() {
}
void GamepadDispatcher::SampleGamepads(device::Gamepads& gamepads) {
Platform::Current()->SampleGamepads(gamepads);
if (reader_) {
reader_->SampleGamepads(gamepads);
}
}
void GamepadDispatcher::PlayVibrationEffectOnce(
......@@ -76,11 +79,17 @@ void GamepadDispatcher::DispatchDidConnectOrDisconnectGamepad(
}
void GamepadDispatcher::StartListening(LocalFrame* frame) {
Platform::Current()->StartListening(kWebPlatformEventTypeGamepad, this);
// TODO(crbug.com/850619): ensure a valid frame is passed
if (!frame)
return;
if (!reader_)
reader_ = std::make_unique<GamepadSharedMemoryReader>(*frame);
reader_->Start(this);
}
void GamepadDispatcher::StopListening() {
Platform::Current()->StopListening(kWebPlatformEventTypeGamepad);
if (reader_)
reader_->Stop();
}
} // namespace blink
......@@ -13,6 +13,8 @@
namespace blink {
class GamepadSharedMemoryReader;
class GamepadDispatcher final
: public GarbageCollectedFinalized<GamepadDispatcher>,
public PlatformEventDispatcher,
......@@ -53,6 +55,7 @@ class GamepadDispatcher final
const device::Gamepad&,
bool connected);
std::unique_ptr<GamepadSharedMemoryReader> reader_;
device::mojom::blink::GamepadHapticsManagerPtr gamepad_haptics_manager_;
};
......
......@@ -2,20 +2,19 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/gamepad_shared_memory_reader.h"
#include "third_party/blink/renderer/modules/gamepad/gamepad_shared_memory_reader.h"
#include "base/metrics/histogram_macros.h"
#include "base/trace_event/trace_event.h"
#include "content/renderer/renderer_blink_platform_impl.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "third_party/blink/public/platform/interface_provider.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
namespace content {
namespace blink {
GamepadSharedMemoryReader::GamepadSharedMemoryReader() : binding_(this) {
blink::Platform::Current()->GetInterfaceProvider()->GetInterface(
GamepadSharedMemoryReader::GamepadSharedMemoryReader(LocalFrame& frame)
: binding_(this) {
frame.GetInterfaceProvider().GetInterface(
mojo::MakeRequest(&gamepad_monitor_));
device::mojom::GamepadObserverPtr observer;
device::mojom::blink::GamepadObserverPtr observer;
binding_.Bind(mojo::MakeRequest(&observer));
gamepad_monitor_->SetObserver(std::move(observer));
}
......@@ -40,9 +39,10 @@ void GamepadSharedMemoryReader::Start(blink::WebGamepadListener* listener) {
// If we don't get a valid handle from the browser, don't try to Map (we're
// probably out of memory or file handles).
bool valid_handle = renderer_shared_buffer_handle_.is_valid();
UMA_HISTOGRAM_BOOLEAN("Gamepad.ValidSharedMemoryHandle", valid_handle);
if (!valid_handle)
bool is_valid = renderer_shared_buffer_handle_.is_valid();
UMA_HISTOGRAM_BOOLEAN("Gamepad.ValidSharedMemoryHandle", is_valid);
if (!is_valid)
return;
renderer_shared_buffer_mapping_ = renderer_shared_buffer_handle_->Map(
......@@ -135,4 +135,4 @@ void GamepadSharedMemoryReader::GamepadDisconnected(
listener_->DidDisconnectGamepad(index, gamepad);
}
} // namespace content
} // namespace blink
......@@ -2,25 +2,29 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_RENDERER_GAMEPAD_SHARED_MEMORY_READER_H_
#define CONTENT_RENDERER_GAMEPAD_SHARED_MEMORY_READER_H_
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_GAMEPAD_GAMEPAD_SHARED_MEMORY_READER_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_GAMEPAD_GAMEPAD_SHARED_MEMORY_READER_H_
#include <memory>
#include "base/macros.h"
#include "device/base/synchronization/shared_memory_seqlock_buffer.h"
#include "device/gamepad/public/cpp/gamepads.h"
#include "device/gamepad/public/mojom/gamepad.mojom.h"
#include "device/gamepad/public/mojom/gamepad.mojom-blink.h"
#include "device/gamepad/public/mojom/gamepad_hardware_buffer.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/system/buffer.h"
#include "third_party/blink/public/platform/web_gamepad_listener.h"
#include "third_party/blink/renderer/platform/wtf/noncopyable.h"
namespace content {
namespace blink {
class LocalFrame;
class GamepadSharedMemoryReader : public device::mojom::blink::GamepadObserver {
WTF_MAKE_NONCOPYABLE(GamepadSharedMemoryReader);
class GamepadSharedMemoryReader : public device::mojom::GamepadObserver {
public:
GamepadSharedMemoryReader();
explicit GamepadSharedMemoryReader(LocalFrame& frame);
~GamepadSharedMemoryReader() override;
void SampleGamepads(device::Gamepads& gamepads);
......@@ -32,7 +36,7 @@ class GamepadSharedMemoryReader : public device::mojom::GamepadObserver {
void SendStopMessage();
private:
// device::mojom::GamepadObserver methods.
// device::mojom::blink::GamepadObserver methods.
void GamepadConnected(int index, const device::Gamepad& gamepad) override;
void GamepadDisconnected(int index, const device::Gamepad& gamepad) override;
......@@ -42,13 +46,11 @@ class GamepadSharedMemoryReader : public device::mojom::GamepadObserver {
bool ever_interacted_with_ = false;
mojo::Binding<device::mojom::GamepadObserver> binding_;
device::mojom::GamepadMonitorPtr gamepad_monitor_;
mojo::Binding<device::mojom::blink::GamepadObserver> binding_;
device::mojom::blink::GamepadMonitorPtr gamepad_monitor_;
blink::WebGamepadListener* listener_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(GamepadSharedMemoryReader);
};
} // namespace content
} // namespace blink
#endif // CONTENT_RENDERER_GAMEPAD_SHARED_MEMORY_READER_H_
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_GAMEPAD_GAMEPAD_SHARED_MEMORY_READER_H_
......@@ -302,7 +302,10 @@ _CONFIG = [
'third_party/blink/renderer/modules/gamepad/',
'third_party/blink/renderer/modules/sensor/',
],
'allowed': ['device::.+'],
'allowed': [
'base::subtle::Atomic32',
'device::.+',
],
},
{
'paths': [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment