diff options
author | jdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-16 22:11:26 +0000 |
---|---|---|
committer | jdduke@chromium.org <jdduke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-16 22:11:26 +0000 |
commit | 2955e4e3c747fd4aa3c227d6c4e4c698cf31b3c4 (patch) | |
tree | 4653406477771c82a78bb65092cbc252a789b2f6 /content/browser/renderer_host | |
parent | baf64d069a6bbc6e87f3ce9eaf7ed5bb775f0965 (diff) | |
download | chromium_src-2955e4e3c747fd4aa3c227d6c4e4c698cf31b3c4.zip chromium_src-2955e4e3c747fd4aa3c227d6c4e4c698cf31b3c4.tar.gz chromium_src-2955e4e3c747fd4aa3c227d6c4e4c698cf31b3c4.tar.bz2 |
Allow MessageFilters to restrict listening to specific message classes
ChannelProxy currently offers messages to all member MessageFilters. It turns
out that a good portion of the most common message types will never be filtered,
making the O(N) filter walk an unnecessary affair. To prevent this, allow
MessageFilters to indicate which (if any) subset of message classes they may
filter, allowing the ChannelProxy to refine the list of filters that are offered
a particular message. This saves ~35us per message received on the browser IO
thread for a typical Android device.
BUG=340881
TBR=asargent@chromium.org
Review URL: https://codereview.chromium.org/142923005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251622 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/renderer_host')
23 files changed, 62 insertions, 24 deletions
diff --git a/content/browser/renderer_host/clipboard_message_filter.cc b/content/browser/renderer_host/clipboard_message_filter.cc index 6ba95f8..df6d5c3 100644 --- a/content/browser/renderer_host/clipboard_message_filter.cc +++ b/content/browser/renderer_host/clipboard_message_filter.cc @@ -34,7 +34,8 @@ void WriteObjectsOnUIThread(ui::Clipboard::ObjectMap* objects) { } // namespace -ClipboardMessageFilter::ClipboardMessageFilter() {} +ClipboardMessageFilter::ClipboardMessageFilter() + : BrowserMessageFilter(ClipboardMsgStart) {} void ClipboardMessageFilter::OverrideThreadForMessage( const IPC::Message& message, BrowserThread::ID* thread) { diff --git a/content/browser/renderer_host/database_message_filter.cc b/content/browser/renderer_host/database_message_filter.cc index 261019d..e266059 100644 --- a/content/browser/renderer_host/database_message_filter.cc +++ b/content/browser/renderer_host/database_message_filter.cc @@ -41,7 +41,8 @@ const int kDelayDeleteRetryMs = 100; DatabaseMessageFilter::DatabaseMessageFilter( webkit_database::DatabaseTracker* db_tracker) - : db_tracker_(db_tracker), + : BrowserMessageFilter(DatabaseMsgStart), + db_tracker_(db_tracker), observer_added_(false) { DCHECK(db_tracker_.get()); } diff --git a/content/browser/renderer_host/file_utilities_message_filter.cc b/content/browser/renderer_host/file_utilities_message_filter.cc index 577653e..e784ee3 100644 --- a/content/browser/renderer_host/file_utilities_message_filter.cc +++ b/content/browser/renderer_host/file_utilities_message_filter.cc @@ -11,7 +11,8 @@ namespace content { FileUtilitiesMessageFilter::FileUtilitiesMessageFilter(int process_id) - : process_id_(process_id) { + : BrowserMessageFilter(FileUtilitiesMsgStart), + process_id_(process_id) { } FileUtilitiesMessageFilter::~FileUtilitiesMessageFilter() { diff --git a/content/browser/renderer_host/gamepad_browser_message_filter.cc b/content/browser/renderer_host/gamepad_browser_message_filter.cc index 6b5972e..cd36e6a 100644 --- a/content/browser/renderer_host/gamepad_browser_message_filter.cc +++ b/content/browser/renderer_host/gamepad_browser_message_filter.cc @@ -10,7 +10,8 @@ namespace content { GamepadBrowserMessageFilter::GamepadBrowserMessageFilter() - : is_started_(false) { + : BrowserMessageFilter(GamepadMsgStart), + is_started_(false) { } GamepadBrowserMessageFilter::~GamepadBrowserMessageFilter() { diff --git a/content/browser/renderer_host/gpu_message_filter.cc b/content/browser/renderer_host/gpu_message_filter.cc index 4dc49bb..8a14cf6 100644 --- a/content/browser/renderer_host/gpu_message_filter.cc +++ b/content/browser/renderer_host/gpu_message_filter.cc @@ -54,7 +54,8 @@ struct GpuMessageFilter::FrameSubscription { GpuMessageFilter::GpuMessageFilter(int render_process_id, RenderWidgetHelper* render_widget_helper) - : gpu_process_id_(0), + : BrowserMessageFilter(GpuMsgStart), + gpu_process_id_(0), render_process_id_(render_process_id), share_contexts_(false), render_widget_helper_(render_widget_helper), diff --git a/content/browser/renderer_host/input/touch_input_browsertest.cc b/content/browser/renderer_host/input/touch_input_browsertest.cc index 4889b49..b450c02 100644 --- a/content/browser/renderer_host/input/touch_input_browsertest.cc +++ b/content/browser/renderer_host/input/touch_input_browsertest.cc @@ -82,7 +82,8 @@ namespace content { class InputEventMessageFilter : public BrowserMessageFilter { public: InputEventMessageFilter() - : type_(WebInputEvent::Undefined), + : BrowserMessageFilter(InputMsgStart), + type_(WebInputEvent::Undefined), state_(INPUT_EVENT_ACK_STATE_UNKNOWN) {} void WaitForAck(WebInputEvent::Type type) { diff --git a/content/browser/renderer_host/media/audio_input_renderer_host.cc b/content/browser/renderer_host/media/audio_input_renderer_host.cc index 6a75f54..9bd39c8 100644 --- a/content/browser/renderer_host/media/audio_input_renderer_host.cc +++ b/content/browser/renderer_host/media/audio_input_renderer_host.cc @@ -54,7 +54,8 @@ AudioInputRendererHost::AudioInputRendererHost( MediaStreamManager* media_stream_manager, AudioMirroringManager* audio_mirroring_manager, media::UserInputMonitor* user_input_monitor) - : audio_manager_(audio_manager), + : BrowserMessageFilter(AudioMsgStart), + audio_manager_(audio_manager), media_stream_manager_(media_stream_manager), audio_mirroring_manager_(audio_mirroring_manager), user_input_monitor_(user_input_monitor), diff --git a/content/browser/renderer_host/media/audio_renderer_host.cc b/content/browser/renderer_host/media/audio_renderer_host.cc index a1f3710..bea8bcf 100644 --- a/content/browser/renderer_host/media/audio_renderer_host.cc +++ b/content/browser/renderer_host/media/audio_renderer_host.cc @@ -111,7 +111,8 @@ AudioRendererHost::AudioRendererHost( AudioMirroringManager* mirroring_manager, MediaInternals* media_internals, MediaStreamManager* media_stream_manager) - : render_process_id_(render_process_id), + : BrowserMessageFilter(AudioMsgStart), + render_process_id_(render_process_id), audio_manager_(audio_manager), mirroring_manager_(mirroring_manager), audio_log_(media_internals->CreateAudioLog( diff --git a/content/browser/renderer_host/media/device_request_message_filter.cc b/content/browser/renderer_host/media/device_request_message_filter.cc index 89e632f..0c34b53 100644 --- a/content/browser/renderer_host/media/device_request_message_filter.cc +++ b/content/browser/renderer_host/media/device_request_message_filter.cc @@ -23,7 +23,8 @@ namespace content { DeviceRequestMessageFilter::DeviceRequestMessageFilter( ResourceContext* resource_context, MediaStreamManager* media_stream_manager) - : resource_context_(resource_context), + : BrowserMessageFilter(MediaStreamMsgStart), + resource_context_(resource_context), media_stream_manager_(media_stream_manager) { DCHECK(resource_context); DCHECK(media_stream_manager); diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc index 2385f3b..d8c7608 100644 --- a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc +++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc @@ -16,7 +16,8 @@ MediaStreamDispatcherHost::MediaStreamDispatcherHost( int render_process_id, ResourceContext* resource_context, MediaStreamManager* media_stream_manager) - : render_process_id_(render_process_id), + : BrowserMessageFilter(MediaStreamMsgStart), + render_process_id_(render_process_id), resource_context_(resource_context), media_stream_manager_(media_stream_manager) { } diff --git a/content/browser/renderer_host/media/midi_dispatcher_host.cc b/content/browser/renderer_host/media/midi_dispatcher_host.cc index 73b69ac..e42fe11 100644 --- a/content/browser/renderer_host/media/midi_dispatcher_host.cc +++ b/content/browser/renderer_host/media/midi_dispatcher_host.cc @@ -16,7 +16,8 @@ namespace content { MidiDispatcherHost::MidiDispatcherHost(int render_process_id, BrowserContext* browser_context) - : render_process_id_(render_process_id), + : BrowserMessageFilter(MidiMsgStart), + render_process_id_(render_process_id), browser_context_(browser_context) { } diff --git a/content/browser/renderer_host/media/midi_host.cc b/content/browser/renderer_host/media/midi_host.cc index b6e2688..3c09ba6 100644 --- a/content/browser/renderer_host/media/midi_host.cc +++ b/content/browser/renderer_host/media/midi_host.cc @@ -49,7 +49,8 @@ using media::kSysExByte; using media::kEndOfSysExByte; MidiHost::MidiHost(int renderer_process_id, media::MidiManager* midi_manager) - : renderer_process_id_(renderer_process_id), + : BrowserMessageFilter(MidiMsgStart), + renderer_process_id_(renderer_process_id), has_sys_ex_permission_(false), midi_manager_(midi_manager), sent_bytes_in_flight_(0), diff --git a/content/browser/renderer_host/media/peer_connection_tracker_host.cc b/content/browser/renderer_host/media/peer_connection_tracker_host.cc index b937073..96029b9 100644 --- a/content/browser/renderer_host/media/peer_connection_tracker_host.cc +++ b/content/browser/renderer_host/media/peer_connection_tracker_host.cc @@ -9,7 +9,8 @@ namespace content { PeerConnectionTrackerHost::PeerConnectionTrackerHost(int render_process_id) - : render_process_id_(render_process_id) {} + : BrowserMessageFilter(PeerConnectionTrackerMsgStart), + render_process_id_(render_process_id) {} bool PeerConnectionTrackerHost::OnMessageReceived(const IPC::Message& message, bool* message_was_ok) { diff --git a/content/browser/renderer_host/media/video_capture_host.cc b/content/browser/renderer_host/media/video_capture_host.cc index 71ec081..11958c2 100644 --- a/content/browser/renderer_host/media/video_capture_host.cc +++ b/content/browser/renderer_host/media/video_capture_host.cc @@ -14,7 +14,8 @@ namespace content { VideoCaptureHost::VideoCaptureHost(MediaStreamManager* media_stream_manager) - : media_stream_manager_(media_stream_manager) { + : BrowserMessageFilter(VideoCaptureMsgStart), + media_stream_manager_(media_stream_manager) { } VideoCaptureHost::~VideoCaptureHost() {} diff --git a/content/browser/renderer_host/media/webrtc_identity_service_host.cc b/content/browser/renderer_host/media/webrtc_identity_service_host.cc index 16f7b6e..1c7291e2 100644 --- a/content/browser/renderer_host/media/webrtc_identity_service_host.cc +++ b/content/browser/renderer_host/media/webrtc_identity_service_host.cc @@ -16,7 +16,8 @@ namespace content { WebRTCIdentityServiceHost::WebRTCIdentityServiceHost( int renderer_process_id, scoped_refptr<WebRTCIdentityStore> identity_store) - : renderer_process_id_(renderer_process_id), + : BrowserMessageFilter(WebRTCIdentityMsgStart), + renderer_process_id_(renderer_process_id), identity_store_(identity_store), weak_factory_(this) {} diff --git a/content/browser/renderer_host/memory_benchmark_message_filter.cc b/content/browser/renderer_host/memory_benchmark_message_filter.cc index d559852..35b2884 100644 --- a/content/browser/renderer_host/memory_benchmark_message_filter.cc +++ b/content/browser/renderer_host/memory_benchmark_message_filter.cc @@ -12,7 +12,8 @@ namespace content { -MemoryBenchmarkMessageFilter::MemoryBenchmarkMessageFilter() { +MemoryBenchmarkMessageFilter::MemoryBenchmarkMessageFilter() + : BrowserMessageFilter(MemoryBenchmarkMsgStart) { } bool MemoryBenchmarkMessageFilter::OnMessageReceived( diff --git a/content/browser/renderer_host/p2p/socket_dispatcher_host.cc b/content/browser/renderer_host/p2p/socket_dispatcher_host.cc index 7e9b835..7780970 100644 --- a/content/browser/renderer_host/p2p/socket_dispatcher_host.cc +++ b/content/browser/renderer_host/p2p/socket_dispatcher_host.cc @@ -96,7 +96,8 @@ class P2PSocketDispatcherHost::DnsRequest { P2PSocketDispatcherHost::P2PSocketDispatcherHost( content::ResourceContext* resource_context, net::URLRequestContextGetter* url_context) - : resource_context_(resource_context), + : BrowserMessageFilter(P2PMsgStart), + resource_context_(resource_context), url_context_(url_context), monitoring_networks_(false) { } diff --git a/content/browser/renderer_host/pepper/pepper_message_filter.cc b/content/browser/renderer_host/pepper/pepper_message_filter.cc index 1394d95..0668f2a 100644 --- a/content/browser/renderer_host/pepper/pepper_message_filter.cc +++ b/content/browser/renderer_host/pepper/pepper_message_filter.cc @@ -11,7 +11,9 @@ namespace content { -PepperMessageFilter::PepperMessageFilter() {} +PepperMessageFilter::PepperMessageFilter() + : BrowserMessageFilter(PpapiMsgStart) {} + PepperMessageFilter::~PepperMessageFilter() {} bool PepperMessageFilter::OnMessageReceived(const IPC::Message& msg, diff --git a/content/browser/renderer_host/pepper/pepper_renderer_connection.cc b/content/browser/renderer_host/pepper/pepper_renderer_connection.cc index 1c00388..f20562e 100644 --- a/content/browser/renderer_host/pepper/pepper_renderer_connection.cc +++ b/content/browser/renderer_host/pepper/pepper_renderer_connection.cc @@ -26,6 +26,11 @@ namespace content { namespace { +const uint32 kFilteredMessageClasses[] = { + PpapiMsgStart, + ViewMsgStart, +}; + // Responsible for creating the pending resource hosts, holding their IDs until // all of them have been created for a single message, and sending the reply to // say that the hosts have been created. @@ -87,7 +92,9 @@ PendingHostCreator::~PendingHostCreator() { } // namespace PepperRendererConnection::PepperRendererConnection(int render_process_id) - : render_process_id_(render_process_id) { + : BrowserMessageFilter( + kFilteredMessageClasses, arraysize(kFilteredMessageClasses)), + render_process_id_(render_process_id) { // Only give the renderer permission for stable APIs. in_process_host_.reset(new BrowserPpapiHostImpl(this, ppapi::PpapiPermissions(), diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc index 1597d78..6a436e2 100644 --- a/content/browser/renderer_host/render_message_filter.cc +++ b/content/browser/renderer_host/render_message_filter.cc @@ -101,6 +101,13 @@ const int kPluginsRefreshThresholdInSeconds = 3; // usage only once and send it as a response for both queries. static const int64 kCPUUsageSampleIntervalMs = 900; +const uint32 kFilteredMessageClasses[] = { + ChildProcessMsgStart, + DesktopNotificationMsgStart, + FrameMsgStart, + ViewMsgStart, +}; + #if defined(OS_WIN) // On Windows, |g_color_profile| can run on an arbitrary background thread. // We avoid races by using LazyInstance's constructor lock to initialize the @@ -320,7 +327,9 @@ RenderMessageFilter::RenderMessageFilter( media::AudioManager* audio_manager, MediaInternals* media_internals, DOMStorageContextWrapper* dom_storage_context) - : resource_dispatcher_host_(ResourceDispatcherHostImpl::Get()), + : BrowserMessageFilter( + kFilteredMessageClasses, arraysize(kFilteredMessageClasses)), + resource_dispatcher_host_(ResourceDispatcherHostImpl::Get()), plugin_service_(plugin_service), profile_data_directory_(browser_context->GetPath()), request_context_(request_context), diff --git a/content/browser/renderer_host/socket_stream_dispatcher_host.cc b/content/browser/renderer_host/socket_stream_dispatcher_host.cc index 204bf8e..5c5e2b8a 100644 --- a/content/browser/renderer_host/socket_stream_dispatcher_host.cc +++ b/content/browser/renderer_host/socket_stream_dispatcher_host.cc @@ -32,7 +32,8 @@ SocketStreamDispatcherHost::SocketStreamDispatcherHost( int render_process_id, const GetRequestContextCallback& request_context_callback, ResourceContext* resource_context) - : render_process_id_(render_process_id), + : BrowserMessageFilter(SocketStreamMsgStart), + render_process_id_(render_process_id), request_context_callback_(request_context_callback), resource_context_(resource_context), weak_ptr_factory_(this), diff --git a/content/browser/renderer_host/text_input_client_message_filter.mm b/content/browser/renderer_host/text_input_client_message_filter.mm index 7af5a8f..f3e10fd3 100644 --- a/content/browser/renderer_host/text_input_client_message_filter.mm +++ b/content/browser/renderer_host/text_input_client_message_filter.mm @@ -16,7 +16,7 @@ namespace content { TextInputClientMessageFilter::TextInputClientMessageFilter(int child_id) - : BrowserMessageFilter(), + : BrowserMessageFilter(TextInputClientMsgStart), child_process_id_(child_id) { } diff --git a/content/browser/renderer_host/websocket_dispatcher_host.cc b/content/browser/renderer_host/websocket_dispatcher_host.cc index 2a7ed76..9756354 100644 --- a/content/browser/renderer_host/websocket_dispatcher_host.cc +++ b/content/browser/renderer_host/websocket_dispatcher_host.cc @@ -25,7 +25,8 @@ typedef WebSocketDispatcherHost::WebSocketHostState WebSocketHostState; WebSocketDispatcherHost::WebSocketDispatcherHost( const GetRequestContextCallback& get_context_callback) - : get_context_callback_(get_context_callback), + : BrowserMessageFilter(WebSocketMsgStart), + get_context_callback_(get_context_callback), websocket_host_factory_( base::Bind(&WebSocketDispatcherHost::CreateWebSocketHost, base::Unretained(this))) {} @@ -33,7 +34,8 @@ WebSocketDispatcherHost::WebSocketDispatcherHost( WebSocketDispatcherHost::WebSocketDispatcherHost( const GetRequestContextCallback& get_context_callback, const WebSocketHostFactory& websocket_host_factory) - : get_context_callback_(get_context_callback), + : BrowserMessageFilter(WebSocketMsgStart), + get_context_callback_(get_context_callback), websocket_host_factory_(websocket_host_factory) {} WebSocketHost* WebSocketDispatcherHost::CreateWebSocketHost(int routing_id) { |